Création d'une macro qui range des lignes d'un fichier dans un autre

outilsetprocess

Expert
Bonjour, je vous explique tout de A à Z

Dans le répertoire Ordinateur > RACINEENT (M:) > D des F > Finances > Fichiers > Compta Creds > Compta > 2-Dossiers Creds

se trouvent de nombreux dossiers avec le nom d'entreprise en nom de dossier

Quand on clique sur un dossier, l'arborescence telle qu'elle s'affiche

0-Compta
1-Fiche
2- ...
3- ...

etc

Seul Compta m'interesse
Et quand on clique sur Compta, un fichier excel apparait, c'est de celui ci que je veux extraire les données (je parle au singulier mais c'est valable pour tous les dossiers)
Son nom est constitué comme suit : "*Nom de l'entreprise* - Suivi"

Sur ce fichier se situent deux onglets, PRET, et COM

Seul l'onglet COM m'interesse

J'aimerais que en colonne A, à partir de la ligne où est écrit "Suivi des coms", la macro enregistre toutes les données en dessous de la ligne, de la colonne A à J dans un autre fichier "Fichier récapitulatif des coms" à partir de la ligne 2 de la colonne B à K avec en colonne A le nom de l'entreprise (récupéré à partir du nom de dossier ? du nom du fichier ?)

Voilà

J'ai absolument aucune idée de comment m'y prendre
Et j'aimerais lancer la macro depuis le "Fichier récapitulatif des coms"
Problème, je suis très mauvais, et je souhaiterais de l'aide

Merci
Je suis un peu pressé
Je vais essayer de poster un algorithme en Français brut pour faire comprendre ce que je veux
 

drul

Obscur pro du hardware
Staff
Salut, un peu pressé ça va être difficile (tu sais pour avoir déjà travailler ici que je ne ferai pas tout le boulot à ta place)
Dans le dossier 0-Compta il n'y a qu'un fichier excel ?
 

outilsetprocess

Expert
Salut

Oui pas de soucis

Oui il y a un seul fichier, c'est un excel, un autre sous dossier nommés "Justificatifs" mais on doit pas fouiller dedans

Donc l'algorithme en Français brut :

Aller dans Ordinateur > RACINEENT (M : ) > D des F > Finances > Fichiers > Compta Creds > Compta > 2-Dossiers Creds

Tant qu'il existe un dossier qui ne commence pas par un chiffre (oui il y a 4 dossiers qui commencent par 0 - xxx ; 1 - xxx , etc)
aller dedans, puis dans comptabilité et ouvrir le Excel
Ouvrir l'onglet COM
Mettre le curseur sur la colonne A,
Descendre les lignes une par une
Si à un moment il est écrit "Suivi des coms" alors
Copier toutes les lignes en dessous de la colonne A à J
Les coller sur fichier récapitulatif des coms en dessous de la derniere ligne écrite de la colonne B à K
En colonne A pour les lignes en question, écrire le nom de l'entreprise (qui se situe dans le nom de dossier ou premier mot du nom du fichier)

Voilà
 

drul

Obscur pro du hardware
Staff
Ok la procédure est assez clair.
On va commencer par scanner tous les dossiers pour trouver tes entreprise:
Code:
sub test()
Dim Folderlist() As String
Dim Listsize As Integer
Set FSO = CreateObject("scripting.filesystemobject")
Listsize = 0
Filepath = "c:\test\" 'pour toi: > RACINEENT (M : ) > D des F > Finances > Fichiers > Compta Creds > Compta > 2-Dossiers Creds 
Foldername = Dir(Filepath, vbDirectory)
While Foldername <> ""
    FoldernameFirstChar = Left(Foldername, 1)
    If FSO.FolderExists(Filepath & Foldername & "\") _
    And (FoldernameFirstChar <> ".") And Not IsNumeric(FoldernameFirstChar) Then
        ReDim Preserve Folderlist(Listsize)
        Folderlist(Listsize) = Foldername
        Listsize = Listsize + 1
    End If
    Foldername = Dir
Wend
For i = LBound(Folderlist) To UBound(Folderlist)
    MsgBox Folderlist(i)
Next
End Sub
Essaye d'adapter ça à tes besoins (et de comprendre ce qui est fait ...)
 

outilsetprocess

Expert
Ouais merci beaucoup, là je l'ai lu j'ai pas tout compris mais avec les isnumeric et tout j'arrive à savoir où on va
Je le lis, je le comprends et je dis ce que j'en pense
 

drul

Obscur pro du hardware
Staff
hum ... C'est quand même très compliqué ce que je t'ai proposé là,
On va faire plus simple:

Code:
Sub searchfolders()
    Dim FileSystem As Object
    Dim SubFolder
    
    Set FileSystem = CreateObject("Scripting.FileSystemObject")

    For Each SubFolder In FileSystem.GetFolder("c:\test\").SubFolders
        If SubFolder.Name Like "[!0-9]*" Then
            MsgBox SubFolder.Name
        End If
    Next

End Sub
 

outilsetprocess

Expert
Ok, et à la place de test je mets mon répertoire ?

> RACINEENT (M : ) > D des F > Finances > Fichiers > Compta Creds > Compta > 2-Dossiers Creds
 

drul

Obscur pro du hardware
Staff
C'est bien ça (mais sous une forme plus informatique ...
Code:
 M:\D des F\Finances\Fichiers\Compta Creds\Compta\2-Dossiers Creds\
 

outilsetprocess

Expert
Et en fait que fais la macro ? Parce que je vois les 0-9 et tout mais concrètement sur quoi agit-t-elle ?

Je la mets sur le fichier Récapitulatif des commissions, et elle renvoie tout les noms d'entreprises ?
 

drul

Obscur pro du hardware
Staff
Je te donne la suite, qui devrait trouver tous les fichiers excel dans les répertoire entreprise (une nouvelle fois je te laisse remplacer c:\test ...):

Code:
Sub searchfolders()
    Dim FileSystem As Object
    Dim SubFolder As Object
    Dim aFile As Object
    
    Set FileSystem = CreateObject("Scripting.FileSystemObject")

    For Each SubFolder In FileSystem.GetFolder("c:\test\").SubFolders
        If SubFolder.Name Like "[!0-9]*" Then
            For Each aFile In FileSystem.GetFolder(SubFolder.Path & "\0-compta\").Files
                If aFile.Name Like "*.xls*" Then
                    MsgBox aFile.Path
                End If
            Next
        End If
    Next

End Sub

Dis moi si ça marche, et si oui, essaye de créer un fonction qui ouvre un fichier xls à partir de son nom et ensuite cherche "Suivi des coms" dans l'onglet com dudit fichier.
A la fin on liera les deux fonctions. La technique des petits pas ...
 

outilsetprocess

Expert
Rebonjour

J'ai un soucis au niveau de cette ligne, il signale une erreur de syntaxe

For Each SubFolder In FileSystem.GetFolder(C:\Users\Galopin\Desktop\TEST pour macro\DOSSIER).SubFolders

Il me semble que les deux points le dérangent après le C

Et oui, pour essayer j'ai préféré faire un test sur un dossier du bureau
 

drul

Obscur pro du hardware
Staff
manque les ""
For Each SubFolder In FileSystem.GetFolder("C:\Users\Galopin\Desktop\TEST pour macro\DOSSIER").SubFolders

N.B. ici on fait que lire, pas de risque pour tes dossiers, mais t'a raison mieux vaut être prudent avec les macros :)
 

outilsetprocess

Expert
Ok ca fonctionne en tant que syntaxe mais quand je lance la macro, il me renvoie chemin d'accès introuvable alors que j'ai recopié l'arborescence jusqu'à DOSSIER

Si je vais plus loin, je devrai en plus rajouter le nom du dossier de l'entreprise après un \ et je doute que ca ne marche :/
 

outilsetprocess

Expert
C:\Users\Galopin\Desktop\TEST pour macro\DOSSIER\ALARME SECURITE TOULOUSE par exemple
 

outilsetprocess

Expert
Oui, Par exemple ALARME SECURITE TOULOUSE
Après il y a l'organisation

0- Compta
1- ...
2- ...

ETC mais seul 0- Compta m'interesse, du moins le excel qui s'y trouve et l'onglet COM de ce excel
 

drul

Obscur pro du hardware
Staff
Ton problème est certainement ici:
For Each aFile In FileSystem.GetFolder(SubFolder.Path & "\0-compta\").Files

[strike]J'ai déjà inclu le sous dossier "0-compta" de ton arborescence, si tu ne l'a pas dans ton test, ça va merder ...[/strike]

edit: Manque peut-être un espace, vérifie que j'ai écris juste ...
 

outilsetprocess

Expert
Ca fonctionne on ne peut plus excellement, il me renvoie dans un msgbox tous les trucs c'est ok pour ça
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 099
Messages
6 717 109
Membres
1 586 288
Dernier membre
blkpurpleg
Partager cette page
Haut