[VBA] Copie de certains fichiers d'un dossier vers un autre Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
E
Elhadj
Membre habitué
Membre habitué
Messages : 50
Inscrit le : 1 juillet 2013
Version d'Excel : 2010FR; 2016FR

Message par Elhadj » 1 juillet 2013, 11:15

bonjour à toutes et à tous,

cela fait quelques jours que je galère à programmer une tache de copie de fichiers mal grès quelques idées pompées sur le forum ci ou là.
Le but de mon fichier est de récapituler des données de rapport de contrôle tous situés dans un même dossier.
Le dossier contenant les fichiers est changeant mais je maîtrise l'indexation vers son lien.
Dans ce dossier je veux ouvrir que les fichiers .xls qui ont un nom numérique à partir de 1.xls ( pas les fichier essai.xls ou 0.xls...) sachant que le nombre de fichier varie d'une fabrication à l'autre. La copie des données contenue dans les différents fichiers se fera avec certaines conditions que je maîtrise déjà.
J'ai essayé ce code:
Chemin = "W:\tridim\Rapport\Client\" & Sheets(1).Range("client") & "\" & Sheets(1).Range("cmd_int") & "\" & Sheets(1).Range("code_produit") & "\N°OF" & Sheets(1).Range("of") & "\" 'lien vers le dossier contenant les fichiers à copier, modifiable à souhait
Fichier = Dir(Chemin & "*.xls") 'ouverture des fichiers .xls

    Do While Fichier <> "" 'je comprend cette commande comme étant "faire jusqu'à ce que le dossier soit vide", or le dossier n'est jamais vide
    
        With Workbooks.Open(Fichier)
        
            If IsNumeric(ThisWorkbook.Name) And ThisWorkbook.Name <> "0" Then 'si le nom du fichier est numérique et different de 0
                MsgBox "ça marche"
            Else
                MsgBox "ça ne marche pas"
            End If
            .Close
        End With
        
    Loop
j'obtiens une boucle infinie avec le message "ça ne marche pas" et le même fichier est ouvert.
Toute aide est la bien venue et si c'est pas claire n’hésitez pas à me demander des éclaircissements.

Cordialement,
Avatar du membre
Banzai64
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'726
Appréciations reçues : 2
Inscrit le : 21 novembre 2010
Version d'Excel : 2003 FR (learning 2010 - 2013)

Message par Banzai64 » 1 juillet 2013, 11:39

Bonjour

:bv:

:slt:

Code non testé
Sub test()
  chemin = "W:\tridim\Rapport\Client\" & Sheets(1).Range("client") & "\" & Sheets(1).Range("cmd_int") & "\" & Sheets(1).Range("code_produit") & "\N°OF" & Sheets(1).Range("of") & "\" 'lien vers le dossier contenant les fichiers à copier, modifiable à souhait
  fichier = Dir(chemin & "*.xls") 'ouverture des fichiers .xls

  Do While fichier <> ""  'Boucle tant que l'on trouve un NOUVEAU fichier
     If Val(fichier) > 0 Then
      MsgBox "Fichier à ouvrir"
      With Workbooks.Open(chemin & fichier)
        ' Traitement du fichier
        .Close
      End With
    Else
      MsgBox "Pas le bon type de fichier"
    End If
    fichier = Dir     ' Va voir s'il existe un autre fichier
  Loop
End Sub
Image
E
Elhadj
Membre habitué
Membre habitué
Messages : 50
Inscrit le : 1 juillet 2013
Version d'Excel : 2010FR; 2016FR

Message par Elhadj » 1 juillet 2013, 11:40

ci joint le fichier en question.

est concerné le module "création_rapport", et la partie "OUVERTURE DES FICHIERS ET COPIE DES VALEURS"
E
Elhadj
Membre habitué
Membre habitué
Messages : 50
Inscrit le : 1 juillet 2013
Version d'Excel : 2010FR; 2016FR

Message par Elhadj » 1 juillet 2013, 12:01

Bonjour Banzai64 et merci pour le message et la réponse proposée.

le code marche :D je vais pouvoir mettre dans la partie "traitement fichier" la copie des valeurs.

par contre j'ai fait un essai avec des fichiers dont un nommé 1a et il le prend!!! y'aurait-il une condition qui permettrait de ne prendre que les fichiers à nom numérique compris entre 1 et 10000 par exemple.

encore merci et bon appétit
Avatar du membre
Banzai64
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'726
Appréciations reçues : 2
Inscrit le : 21 novembre 2010
Version d'Excel : 2003 FR (learning 2010 - 2013)

Message par Banzai64 » 1 juillet 2013, 13:01

Bonjour

Pas de limite supérieure avec ce code
Minimum 1 maximum ......
If Val(fichier) > 0 And IsNumeric(Left(fichier, Len(fichier) - 4)) Then
  MsgBox "Fichier à ouvrir"
Image
E
Elhadj
Membre habitué
Membre habitué
Messages : 50
Inscrit le : 1 juillet 2013
Version d'Excel : 2010FR; 2016FR

Message par Elhadj » 1 juillet 2013, 13:13

Banzai64 a écrit :Bonjour

Pas de limite supérieure avec ce code
Minimum 1 maximum ......
If Val(fichier) > 0 And IsNumeric(Left(fichier, Len(fichier) - 4)) Then
  MsgBox "Fichier à ouvrir"
super banzai64 avec cette nouvelle condition tout fonctionne comme je veux. juste une dernière question: comment récupérer le nom du fichier ouvert? je vais alterner entre ce fichier ouvert et le fichier ou je dois copier les valeurs :)
Avatar du membre
Banzai64
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'726
Appréciations reçues : 2
Inscrit le : 21 novembre 2010
Version d'Excel : 2003 FR (learning 2010 - 2013)

Message par Banzai64 » 1 juillet 2013, 14:03

Bonjour
Elhadj a écrit : comment récupérer le nom du fichier ouvert?
Celui que tu ouvres : fichier
Celui qui est ouvert (celui contenant la macro) : ThisWorkbook.Name
Image
E
Elhadj
Membre habitué
Membre habitué
Messages : 50
Inscrit le : 1 juillet 2013
Version d'Excel : 2010FR; 2016FR

Message par Elhadj » 1 juillet 2013, 14:18

::D merci beaucoup pour ton aide
E
Elhadj
Membre habitué
Membre habitué
Messages : 50
Inscrit le : 1 juillet 2013
Version d'Excel : 2010FR; 2016FR

Message par Elhadj » 1 juillet 2013, 15:26

Si t'as encore un peu de temps, pourrais -tu s'il te plait m'expliquer le code (Left(fichier, Len(fichier) - 4)?
Avatar du membre
Banzai64
Fanatique d'Excel
Fanatique d'Excel
Messages : 16'726
Appréciations reçues : 2
Inscrit le : 21 novembre 2010
Version d'Excel : 2003 FR (learning 2010 - 2013)

Message par Banzai64 » 1 juillet 2013, 15:55

Bonjour
(Left(fichier, Len(fichier) - 4)
On récupère la partie gauche du fichier sans l'extension

Exemple si le fichier s'appelle "458.xls" on récupère juste "458"

Len(fichier) = 7
Len(fichier) - 4 ==> 7 -4 = 3
(Left(fichier, Len(fichier) - 4) ==> Left( "458.xls, 7 - 4) ==> Left( "458.xls, 3) ==> "458"
Image
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message