IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Erreur 1004 : Nous ne trouvons pas C [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut Erreur 1004 : Nous ne trouvons pas C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Sub Test_Budget()
        Dim Year As String
        Dim i As Integer
        Year = Workbooks("CF").Sheets("CSD").Range("B5")
        Workbooks("CF").Activate
     
        For i = 1 To 4
            PathName = Cells(1, i + 1)
            Filename = Cells(2, i + 1)
            TabName = Cells(3, i + 1)
            ControlFile = "CF"
            Workbooks.Open Filename:=PathName & "\" & Filename
            Workbooks(Filename).Sheets(Year).Copy after:=Workbooks(ControlFile).Sheets(i + 1)
            Workbooks(ControlFile).Sheets(i + 2).Name = TabName
            Workbooks(Filename).Close SaveChanges:=False
            i = i + 1
        Next
    End Sub
    L'erreur se situe sur la ligne "Workbooks.Open Filename:=PathName & "\" & Filename" lors de la seconde itération.

    Je me permets de vous glisser le second code qui fonctionne très bien. C'est le premier que j'ai essayé avec seulement 2 classeurs, afin de tester le code à petite échelle.
    Ce que je ne comprends pas c'est pourquoi il trouve C lors de la première boucle et ne le trouve plus lors du second. Est-ce que je dois retourner à la racine au niveau de l'arborescence ? Est-ce que le code actuel cherche , lors de la deuxième itération, à effectuer le chemin à partir de "l'arrivée" de la fin de la boucle précédente, ou bien il repart au tout début ?
    Merci pour votre aide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub Test_Extournes()
        Dim Year As String
        Year = Workbooks("CF").Sheets("CSD").Range("B5")
        Workbooks("CF").Activate
        'EXTOURNES'
        PathName = Range("B1").Value
        Filename = Range("B2").Value
        TabName = Range("B3").Value
        ControlFile = "CF"
        Workbooks.Open "C:\Users\XXXX\Desktop\TestVBA\Extournes\Extournes.xlsx"
        Workbooks(Filename).Sheets(Year).Copy after:=Workbooks(ControlFile).Sheets(2)
        Workbooks(ControlFile).Sheets(3).Name = TabName
        Workbooks(Filename).Close
     
        'BUDGET'
        PathName = Worksheets("CSD").Range("C1").Value
        Filename = Worksheets("CSD").Range("C2").Value
        TabName = Worksheets("CSD").Range("C3").Value
        ControlFile = "CF"
        Workbooks.Open "C:\Users\XXXX\Desktop\TestVBA\Budget\Budget.xlsx"
        Workbooks(Filename).Sheets(Year).Copy after:=Workbooks(ControlFile).Sheets(3)
        Workbooks(ControlFile).Sheets(4).Name = TabName
        Workbooks(Filename).Close
    End Sub

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Juste avant ton Open, mets un Debug.Print PathName & "\" & Filename et regarde quel est le résultat dans la fenêtre d'exécution.

    Ce que je ne comprends pas c'est pourquoi il trouve C lors de la première boucle et ne le trouve plus lors du second. Est-ce que je dois retourner à la racine au niveau de l'arborescence ? Est-ce que le code actuel cherche , lors de la deuxième itération, à effectuer le chemin à partir de "l'arrivée" de la fin de la boucle précédente, ou bien il repart au tout début ?
    Je ne comprends pas ton explication.
    Quand on fait un Open, il faut indiquer le chemin complet sinon, c'est jouer à la roulette.

  3. #3
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Debug.Print PathName & "\" & Filename

    Je le mets juste avant la ligne c'est ça ? Si c'est le cas, j'ai toujours la même erreur.

    Ce que je veux dire par mon explication quelque peu brouillon... c'est :

    Lors de ma première boucle, je suppose que la fonction part du disque C puis parcourt l'arborescence comme indiqué par la ligne de code Workbooks.Open (qui fonctionne pour la 1ère boucle). Je me demandais si, lors de la seconde boucle, la fonction part aussi du disque C ou bien essaie d'atteindre l'arborescence indiquée à partir de l'arborescence déjà atteinte. En gros, je voudrais savoir s'il y a un reset de l'arborescence à la fin de la boucle ?

    Je sais pas si un exemple bizarre peut expliquer mes dires je vais essayer, au pire je paraîtrais un peu ridicule

    Mon idée c'est :

    On passe la porte 1 et 2 lors de la première boucle pour trouver un Parchemin d'Intelligence (j'aimerai bien, ça pourrait aider dans ce cas précis :3 )
    Lors de la seconde boucle, on désire accéder à la porte 3, qui n'a aucune connexion directe avec la porte 2. Ce que je veux savoir, c'est : est-ce que la fonction lors de la 2e itération part de la porte 2 pour atteindre la porte 3 ? Ou bien retourne à la porte 1 pour accéder à la porte 3 ?

    J'espère que c'est plus clair :v

  4. #4
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Je viens de changer juste un truc dans mon code, ça ne marche toujours pas mais ça précise un peu + l'erreur que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open "C:\Users\XXXX\Desktop\TestVBA\" & Filename & "\" & Filename & ".xlsx"
    J'ai changé cette ligne de code en remplaçant par l'arborescence souhaitée.

    Désormais, mon erreur est :

    Erreur d'exécution '1004':

    Désolé...Nous ne trouvons pas
    C:\Users\XXXX\Desktop\TestVBA\.xlsx. Peut-être l'avez-vous déplacé, renommé ou supprimé ?
    Ce que je ne comprends pas c'est que au premier tour, il va me chercher le bon fichier au bon emplacement (il prend donc bien en compte le Filename "Extournes" et m'intègre la feuille dans le classeur CF. Par contre, lors de la seconde itération... Il ne m'intègre absolument pas "Budget" qui se trouve pourtant dans la cellule C2 (2, 3). J'ai intégré un MsgBox juste après le Filename = Cells(2, i+1) et la boîte est vide. Il ne me trouve pas du tout le mot "Budget" qui se trouve pourtant bien dans la cellule en question. J'ai essayé en précisant Workbooks("CF").Sheets("CSD").Cells(2,i+1) et toujours rien.

    Merci !

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par révèr Voir le message
    Je le mets juste avant la ligne c'est ça ? Si c'est le cas, j'ai toujours la même erreur.
    Cette ligne n'est pas supposée supprimer l'erreur mais regarder ce qui se trouve dans les variables pour essayer de comprendre ce qui dérange VBA dans ce contenu.

    Tant que tu n'auras pas indiquer ce que renvoie cette ligne dans la fenêtre d'exécution, on n'avancera pas.

    Lors de ma première boucle, je suppose que la fonction part du disque C puis parcourt l'arborescence comme indiqué par la ligne de code Workbooks.Open (qui fonctionne pour la 1ère boucle).
    Non, une boucle ne parcoure pas une arborescence et le répertoire par défaut ne change pas, sauf si une instruction le spécifie, et ta macro ne contient pas de telle instruction.
    Même si ta boucle fait plusieurs tours, la référence de Workbook.Open restera la même.

    Citation Envoyé par révèr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open "C:\Users\XXXX\Desktop\TestVBA\" & Filename & "\" & Filename & ".xlsx"
    Désolé...Nous ne trouvons pas C:\Users\XXXX\Desktop\TestVBA\.xlsx. Peut-être l'avez-vous déplacé, renommé ou supprimé ?
    Ca signifie que ta variable Filename est vide.
    Tant que tu t'obstineras à ne pas consulter le contenu des variables, ça n'avancera pas.

    D'ailleurs, donner à une variable le nom d'une méthode, c'est vraiment chercher inutilement les ennuis.

  6. #6
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Je me sens stupide... J'ai pris le réflexe d'itérer moi-même et du coup... au lieu de faire du +1 j'ai fait du +2 puisque le Next créait déjà l'itération automatiquement. Il me reste toujours un petit souci, mais j'essaie de le régler moi-même histoire de bûcher un peu.

    Au stade actuel, j'ai la seconde itération qui créé la page mais j'ai une erreur lors du nom que je lui donne "Workbooks(ControlFile).Sheets(i+1).Name = TabName" - Erreur définie par l'application ou par l'objet.

    Je vous tiens au courant cet après-midi !

  7. #7
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 369
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Sub Test_Budget()
        Dim Year As String
        Dim i As Integer
        Year = Workbooks("CF").Sheets("CSD").Range("B5")
        Workbooks("CF").Activate
     
        For i = 2 To 3
            PathName = Cells(1, i)
            Filename = Workbooks("CF").Sheets("CSD").Cells(2, i)
            TabName = Cells(3, i)
            ControlFile = "CF"
            Debug.Print PathName & "\" & Filename
            Workbooks.Open "C:\Users\XXXX\Desktop\TestVBA\" & Filename & "\" & Filename & ".xlsx"
            Workbooks(Filename).Sheets(Year).Copy after:=Workbooks(ControlFile).Sheets(i)
            Workbooks(ControlFile).Sheets(i + 1).Name = Sheets(i + 1).Range("A1").Value
            Workbooks(Filename).Close SaveChanges:=False
            Workbooks("CF").Activate
        Next
    End Sub
    Le code fonctionne parfaitement !!! Mes 2 pages se créent automatiquement en fonction de l'année choisie. Je peux désormais l'essayer avec un nombre de classeur supérieur à 2.

    Je te remercie pour ton aide Menhir !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur 1004 que je ne comprends pas
    Par H4B4N0S dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/06/2017, 10h57
  2. Réponses: 9
    Dernier message: 29/07/2016, 09h22
  3. Réponses: 3
    Dernier message: 29/04/2014, 11h43
  4. Réponses: 4
    Dernier message: 06/11/2013, 22h21
  5. Réponses: 8
    Dernier message: 26/03/2009, 22h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo