Ouvrir fichier a partir d'une liste

Résolu
Bonjour, je me permets de vous contatcer pour un probleme sur une macro.

Je bloque au tout début d'une macro qui consiste a ouvrir un fichier excel grace à une liste situé dans un autre fichier, voila où j'en suis :

[Sub TEST()

For I = 5 To 500

Workbooks.Open range("B" & I).Value + "\" + range("C" & I).Value

Next I
End Sub]

Mais un message d'erreur apparait :\code.xlsx introuvable.

Quelqu'un sait d'où vient le problème ?

Merci.

13 réponses

  1. Il faut l'adresse complète du fichier à ouvrir (disque:\ répertoire\...\nom.xlsx
    0
    1. Bonjour Patrice33740,

      En fait j'ai en colonne B l'adresse du répertoire et en colonne C le nom du fichier.

      Je suis donc obligé de mettre l'adresse complète en colonne B et entre parenthèse ?

      Puis-je choisir l'onglet qui m'intéresse également ?

      Merci
      0
      1. Re,

        Non, le chemin (répertoire) en B et le nom du fichier en C conviennent, il semblerait que le chemin soit vide lors de l'erreur.

        Essaie :
        Sub TEST()
        Dim strFichier As String
        For I = 5 To 500
            strFichier = Range("B" & I).Value & "\" & Range("C" & I).Value
            Workbooks.Open strFichier
        Next I
        End Sub
        


        Avec le débogueur, la variable locale strFichier permet de vérifier que le nom complet du fichier correspond à un fichier existant.
        0
        1. Merci pour ton aide en tout cas !

          Avec ce code le fichier s'ouvre bien mais le même message d'erreur apparaît !

          Le fichier que j'ouvre est un .xlsm, le problème peut-il venir de là ? Sachant que l'extension xlsm est bien précisée dans la colonne C.
          0
          1. Tu dis le fichier s'ouvre, mais avec ce code tu est sensé ouvrir non pas un mais 495 fichiers, il n'y a aucune sécurité en cas d'absence de fichier sur une des 495 lignes explorées.
            0
            1. En fait pour ne pas que la macro dure trop longtemps pendant l'essai, je transforme le i = 5 to 500 en I = 5 to 7, mais quoiqu'il arrive, le message arrive après l'ouverture du premier fichier
              0
              1. Vérifie que l'exécution des macro est autorisée, vérifie le niveau de sécurité.
                Les macros sont-elles signées numériquement ?
                0
                1. Quel est exactement le message d'erreur ? Sur quelle ligne s'arrête l'exécution ?
                  0
                2. N'y aurait-il pas des cellules fusionnées dans les colonnes B ou C ?
                  0
                3. Contributeur
                  Bonjour, Bonjour Patrice,
                  Excusez l'incruste...
                  Si les classeurs viennent "d'ailleurs", voir le niveau de sécurité ?
                  A+
                  0
              2. Messieurs,

                le message d'erreur est le suivant :
                Erreur d'execution 1004
                '\code.xlsx' introuvable. Vérifiez l'orthographe du nom du classeur et la validité de l'emplacement.

                Quand je clique sur débogage la ligne " Workbooks.Open strFichier " est surlignée en jaune.

                Pour ce qui est du niveau de sécurité, c'est la case "activer toutes les macros" qui est cochée (je suis sur excel 2007).

                Dois-je modifier quelque chose ?
                0
                1. Re,

                  Dans le VBE, lors du débogage (ligne surlignée en jaune) affiche les variables locales (affichage / fenêtre variables locales), vérifier la valeur de strFichier.

                  Il est fort probable que le fichier n'existe pas.
                  0
                  1. il y est indiqué :

                    Expression : strFichier
                    Valeur : "\code"
                    Type : string
                    0
                    1. Effectivement, "\code" n'est pas un nom de fichier valide

                      Essaie :
                      Sub TEST()
                      Dim wsh As Worksheet
                      Dim strFichier As String
                      
                      Set wsh = ActiveSheet
                      For I = 5 To 7
                          strFichier = wsh.Range("B" & I).Value & "\" & wsh.Range("C" & I).Value
                          Workbooks.Open strFichier
                      Next I
                      End Sub

                      0
                      1. Merci beaucoup Patrice,

                        ça fonctionne parfaitement !!!!!

                        afin que je me couche mons bete ce soir, peux tu m'expliquer ce qui n'allait pas ? (je sais que l'explication est dans le code ci-dessus mais c'est loin d'être clair pour moi...)

                        En tout cas merci encore...
                        0
                        1. Re,

                          En fait, quand le premier fichier s'ouvre, il devient le fichier actif et donc
                          Range("B" & I).Value et Range("C" & I).Value sont lus dans ce fichier au lieu du fichier initial.
                          En déclarant la feuille active initiale (wsh) et en y faisant référence lors de la lecture du répertoire (wsh.Range("B" & I).Value) et du nom (wsh.Range("C" & I).Value) on évite cette erreur de débutant à laquelle nous faisons tous piéger régulièrement.
                          Cordialement
                          Patrice
                          0