Microsoft 365 VBA_Classement automatique des documents à partir d'un répertoire fixe vers répertoire variable

pulelian

XLDnaute Nouveau
Bonsoir à tous !


Je souhaite archiver automatiquement mes documents à partir d'un répertoire fixe vers des répertoires variables selon le nom du document.

1- je récupère les documents postés dans le répertoire fixe sur la colonne A et B
2 - via des formules je découpe en colonne D,E,F et G
3 - Le code MoveFile est là pour partir du répertoire fixe et dispatcher les documents sur les différents répertoire



1er erreur : et bien cela ne fonctionne pas 😓 . Les docs vont tous au même endroit quoiqu'il arrive...
2ième erreur : Je reste bloqué sur une erreur 76: chemin introuvable sans comprendre pourquoi lorsque je rajoute doss2 et doss3 pour xDPath


(ps: je n'ai pas eu la compétence d'écrire les codes, juste de les adapter = amateur !!!. Il s'agit de la récupération de code de généreuse personne actif sur les forums.)

VB:
Sub MoveFiles()

    Dim xFd As FileDialog
    Dim xTFile As String
    Dim xExtArr As Variant
    Dim xExt As Variant
    Dim xSPath As String
    Dim xDPath As String
    Dim xSFile As String
    Dim xCount As Long
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    
    NomEntreprise = "entreprisea"
    Lect = USBD
    SpecialPath = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN\Ranger"
    NomDossier = SpecialPath & "\"
    
      
       Dim doss, doss1, doss2, doos3 As String
 
      
      
       xSPath = NomDossier
        
'
    If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
    
    ''
    Set Plage = Sheets("Doc_2").Range("A1:A50")
    For Each cell In Plage
    If cell <> 0 Then
    
    
    doss = cell.Offset(0, 3).Value
    doss1 = cell.Offset(0, 4).Value
    doss2 = cell.Offset(0, 5).Value
    doss3 = cell.Offset(0, 6).Value

    MsgBox doss2
    
    SpecialPath2 = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN"
    NomDossier2 = SpecialPath2 & "\" & doss & "\" & doss1 & "\" & doss2 & "\" & doss3 & "\"
    

        xDPath = NomDossier2
        
    End If
    Next


    If Right(xDPath, 1) <> "\" Then xDPath = xDPath + "\"
    xExtArr = Array("*.xlsx*", "*.jpg", "*.pdf", "*.xlsm")
    For Each xExt In xExtArr
        xTFile = Dir(xSPath & xExt)
        Do While xTFile <> ""
            xSFile = xSPath & xTFile
            [COLOR=rgb(235, 107, 86)]FileCopy xSFile, xDPath & xTFile[/COLOR]
            Kill xSFile
            xTFile = Dir
            xCount = xCount + 1
        Loop
    'Next cell
    Next
    MsgBox "Nombre de fichier déplacés est : " & xCount, vbInformation, ""
End Sub



Si quelqu'un à une idée, je prends, j'ai tout donnée pour adapter ce code à mon fichier.. ^^' plus de jus ici.
Le fichier est en copie.

d'avance merci à tous et bonne nuit,
 

Pièces jointes

  • ranger.xlsm
    23.3 KB · Affichages: 23
Solution
oui le code suivant fonctionne :

VB:
Sub MoveFiles()

'Nécessite que TOUT les dossiers mois soient crée dans chaque catégorie et sous-catégorie !!!!sinon le code ne marche pas !!

    Dim xFd As FileDialog
    Dim xTFile As String
    Dim xExtArr As Variant
    Dim xExt As Variant
    Dim xSPath As String
    Dim xDPath As String
    Dim xSFile As String
    Dim xCount As Long
    Dim doss, doss1, doss2, doss3, fich, ext, point As String
  
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
  
    NomEntreprise = "entreprisea"
    Lect = USBD
  
  
        Set Plage = Sheets("Doc_2").Range("A1:A50")
        For Each cell In Plage
            If cell <> 0 Then
    fich = cell.Value
    ext = cell.Offset(0, 1).Value
    point...

pulelian

XLDnaute Nouveau
Bonjour BrunoM45,

Lect = USB est défini via une fonction plus loin dans le module :

'Lect = USBD
Function USBD()
Set fs = CreateObject("Scripting.FileSystemObject")
Tmp = ""
For Each d In fs.Drives
If d.DriveType = 1 Then
If d.IsReady Then Tmp = Tmp & d.DriveLetter
End If
Next
USBD = Tmp
End Function

Je travaille sur clé, avec 2 ordinateurs et à termes je devrais filer mon projet donc j'ai placé ceci afin d’arrêter d'avoir le message d'erreur "le chemin est erroné.." pour mes autres codes.

Du coup cette fonction marche bien ailleurs (pour enregistrer le fichier, pour inscrire sur fichier txt ce que j'ai fais = log, pour mettre à jour des données vers autre classeur).

Ici le message d'erreur bloque sur :

FileCopy xSFile, xDPath & xTFile

et si je défini comme suit :

SpecialPath2 = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN"
NomDossier2 = SpecialPath2 & "\" & doss & "\" & doss1 & "\"
xDPath = NomDossier2

pas de message, le code s’exécute (au moins) mais il va me ranger les documents au même endroits...

alors que si je défini comme suit :

SpecialPath2 = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN"
NomDossier2 = SpecialPath2 & "\" & doss & "\" & doss1 & "\" & doss2 & "\" & doss3 & "\"
xDPath = NomDossier2

j'ai le message d'erreur 76.

J'espère que j'ai pu t'éclairer plus, merciii à toi ^^
 

pulelian

XLDnaute Nouveau
Bonjour Dranreb,

Les dossiers 2018 et 2019 existaient déjà. J'ai, dans le doute, crée aussi les dossiers faisant référence aux mois (de 1 à 12) et ai joué le code cependant toujours cette fameuse erreur :

1627282395926.png


merci pour ta réponse quand même ^^
 

pulelian

XLDnaute Nouveau
Dranreb re,

J'ai crée les dossiers mensuels aussi dans B. CONTRAT, le code s'est enfin exécuté d'où l'explication de l'erreur 2, mercii ! cela me débloque pas mal!

Pour mon exemple, les 2 docs :
2019-10-10_FRS_A. FACTURE_AMAZON_num_Apple airpods avec boitier de charge​
pdf​
B. FOURNISSEURA. FACTURE201910
2018-11-21_FRS_A. FACTURE_AMAZON_num_Kitchenaid accessoire machine à pâte pour robot​
pdf​
B. FOURNISSEURB. CONTRAT201811

se sont rangés dans B. FOURNISSEUR\B. CONTRAT\2018\11

Pourtant je pensais qu'avec :

VB:
    Set Plage = Sheets("Doc_2").Range("A1:A50")

    For Each cell In Plage

    If cell <> 0 Then

    

    

    doss = cell.Offset(0, 3).Value

    doss1 = cell.Offset(0, 4).Value

    doss2 = cell.Offset(0, 5).Value

    doss3 = cell.Offset(0, 6).Value


il n'y aurait pas de doute quant à la direction du fichier, une idée encore ?

merci beaucoup,
 

pulelian

XLDnaute Nouveau
J'ai rétabli le Next cell (celui commenté tout en bas), puis erreur sur l'utilisation du Next.
Donc j'ai fait cela :

VB:
Sub MoveFiles()


    Dim xFd As FileDialog
    Dim xTFile As String
    Dim xExtArr As Variant
    Dim xExt As Variant
    Dim xSPath As String
    Dim xDPath As String
    Dim xSFile As String
    Dim xCount As Long
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    
    NomEntreprise = "SolidSnack"
    Lect = USBD
    SpecialPath = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN\Ranger"
    NomDossier = SpecialPath & "\"
    
      
    Dim doss, doss1, doss2, doss3 As String
      
      
    xSPath = NomDossier
    
    '
        If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
        
        ''
        Set Plage = Sheets("Doc_2").Range("A1:A50")
        For Each cell In Plage
            If cell <> 0 Then
            
            
            doss = cell.Offset(0, 3).Value
            doss1 = cell.Offset(0, 4).Value
            doss2 = cell.Offset(0, 5).Value
            doss3 = cell.Offset(0, 6).Value
            
            SpecialPath2 = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN"
            NomDossier2 = SpecialPath2 & "\" & doss & "\" & doss1 & "\" & doss2 & "\" & doss3 & "\"
            
            
            xDPath = NomDossier2
            End If
            
            
            If Right(xDPath, 1) <> "\" Then xDPath = xDPath + "\"
            xExtArr = Array("*.xlsx*", "*.jpg", "*.pdf", "*.xlsm")
            For Each xExt In xExtArr
            xTFile = Dir(xSPath & xExt)
                Do While xTFile <> ""
                xSFile = xSPath & xTFile
                FileCopy xSFile, xDPath & xTFile
                Kill xSFile
                xTFile = Dir
                xCount = xCount + 1
                Loop
            Next
        Next cell
    MsgBox "Nombre de fichier déplacés est : " & xCount, vbInformation, ""
End Sub


Maintenant tout s'est bien rangé ... dans les dossiers de la première ligne uniquement 😬😵

Désolé pour cette incompétence.. j'essaie decomprendre..
Une nouvelle suggestion ?

merciii
 

pulelian

XLDnaute Nouveau
VB:
Sub MoveFiles()

'Nécessite que TOUT les dossiers mois soient crée dans chaque catégorie et sous-catégorie !!!!sinon le code ne marche pas !!

    Dim xFd As FileDialog
    Dim xTFile As String
    Dim xExtArr As Variant
    Dim xExt As Variant
    Dim xSPath As String
    Dim xDPath As String
    Dim xSFile As String
    Dim xCount As Long
    Set xFd = Application.FileDialog(msoFileDialogFolderPicker)
    
    NomEntreprise = "SolidSnack"
    Lect = USBD
    SpecialPath = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN\Ranger"
    NomDossier = SpecialPath & "\"
    
      
    Dim doss, doss1, doss2, doss3 As String
      
      
    xSPath = NomDossier
    

If Right(xSPath, 1) <> "\" Then xSPath = xSPath + "\"
        

        Set Plage = Sheets("Doc_2").Range("A1:A50")
        For Each cell In Plage
            If cell <> 0 Then
            
            
            doss = cell.Offset(0, 3).Value
            doss1 = cell.Offset(0, 4).Value
            doss2 = cell.Offset(0, 5).Value
            doss3 = cell.Offset(0, 6).Value
            
            SpecialPath2 = Lect & ":\clé usb\DOSSIERS\" & NomEntreprise & "\A. FINANCE ET ADMIN"
            NomDossier2 = SpecialPath2 & "\" & doss & "\" & doss1 & "\" & doss2 & "\" & doss3 & "\"
            
            
            xDPath = NomDossier2
            'End If
            
            
If Right(xDPath, 1) <> "\" Then xDPath = xDPath + "\"
            
                xExtArr = Array("*.xlsx*", "*.jpg", "*.pdf", "*.xlsm")
                For Each xExt In xExtArr
                xTFile = Dir(xSPath & xExt)
                    Do While xTFile <> ""
                    xSFile = xSPath & xTFile
                    FileCopy xSFile, xDPath & xTFile
                    Kill xSFile
                    xTFile = Dir
                    xCount = xCount + 1
                    Loop
                Next
            End If
        Next cell
    MsgBox "Nombre de fichier déplacés est : " & xCount, vbInformation, ""
End Sub

Malheureusement cela tombe toujours dans le dossier de la première ligne uniquement..

🤨 why?. je continue à chercher
 

pulelian

XLDnaute Nouveau
et bien pour le document dont les infos sont les suivantes (ligne 1) :

2019-10-10_FRS_A. FACTURE_AMAZON_num_Apple airpods avec boitier de charge​
pdf​
B. FOURNISSEURA. FACTURE201910

le classer dans le dossier B.FOURNISSEUR\A. FACTURE\2019\10
et pour le document dont les infos sont les suivantes (ligne2 ) :
2018-11-21_FRS_A. FACTURE_AMAZON_num_Kitchenaid accessoire machine à pâte pour robot​
pdf​
B. FOURNISSEURB. CONTRAT201811

le classer dans le dossier B.FOURNISSEUR\B. CONTRAT\2018\11

soit 2 dossiers différents.
 

Statistiques des forums

Discussions
312 046
Messages
2 084 850
Membres
102 686
dernier inscrit
Franck6950