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 en fin de boucle ?


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut Erreur en fin de boucle ?
    Bonjour,

    Dans le code ci-dessous, j'ai le message suivant à la dernière boucle :

    Nous sommes désolés mais « P:\ENGINEERING\Entry_Form_.xlsm » est introuvable. Peut-être a-t-il été déplacé, renommé ou supprimé ?

    Quelle modif dois-je effectuer SVP ?

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    Sub Recup_donnees_pour_TDB()
     
    'Déclaration des variables
    Dim nbr As Integer
    Dim Derlig As Integer
    Dim x As String
    Dim y As Integer
    Dim i As Integer
    Dim Program As String
    Dim PO As String
    Dim PO_Date As String
    Dim Content As String
    Dim Deliv_Target_Date As String
    Dim Deliv_Date_OTD1 As String
    Dim Deliv_Time_OTD1 As String
    Dim Last_Reject_Date As String
    Dim Deliv_Date_OTD2 As String
    Dim Deliv_Time_OTD2 As String
    Dim Quality_OQD As String
    Dim Quality_NC_Iteration As String
    Dim Global_Quality As String
    Dim Deliv_Note_Testia As String
    Dim Deliv_Note_AIRBUS As String
    Dim Good_Receipt As String
    Dim Status As String
    Dim Comments As String
     
     
    'Exécution de la macro "Recuperation_Noms_sous_dossiers"
    Call Recuperation_Noms_sous_dossiers
     
    nbr = 0
     
    'Recherche du numéro de la dernière ligne non vide en partant de B6 (dernier ID) --> derlig
    'Recherche du nombre de références ID en colonne B --> nbr
    Derlig = Application.WorksheetFunction.CountA(Range("B:B")) + 3
    nbr = Range("B6:B" & Derlig).SpecialCells(xlCellTypeVisible).Count
     
    'Affichage dans une boite de dialogue du nombre de références ID
    MsgBox ("Vous avez " & nbr & " références d'ID")
     
    'Initialisation des compteurs (on part de la ligne 6)
    i = 0
    y = 6
     
    'Ouverture du fichier "FOLLOW_UP_TEST.xlsm" et activation de l'onglet "Feuil1"
    'On l'ouvre avant la boucle pour éviter de l'ouvrir à chaque fois (messages systématiques)
    'Workbooks.Open Filename:=Dossier_racine & "\" & "FOLLOW_UP_TEST.xlsm"
    'Sheets("Feuil1").Activate
     
    'MsgBox ("le fichier follow up Test doit être ouvert")
     
    'Boucle sur le nombre de références ID, nbr (remplissage du tableau)
    While i <= nbr
     
    'Activation du fichier "FOLLOW_UP_TEST.xlsm", on active l'onglet "Feuil1"
    Windows("FOLLOW_UP_TEST.xlsm").Activate
    Sheets("Feuil1").Activate
     
    'x correspond à la valeur de la cellule B6 (première valeur de la liste)
    x = Range("B" & y).Value
     
    'Ouverture du fichier "Entry_Form_ID.....xlsm" situé dans le dossier racine auquel on rajoute le sous-dossier ID....
    'Activation de l'onglet "ADD_INFOS"
    On Error GoTo fin
    Workbooks.Open Filename:=Dossier_racine & "\" & x & "\" & "Entry_Form_" & x & ".xlsm"
    Sheets("ADD_INFOS").Activate
     
    'Mise en mémoire des données du fichier "Entry_Form_ID.....xlsm". Celles-ci sont à rapatrier dans le fichier "FOLLOW_UP_TEST.xlsm"
    Program = Range("C7").Value
    PO = Range("C8").Value
    PO_Date = Range("C9").Value
    Content = Range("C10").Value
    Deliv_Target_Date = Range("H6").Value
    Deliv_Date_OTD1 = Range("H8").Value
    Deliv_Time_OTD1 = Range("H9").Value
    Last_Reject_Date = Range("H11").Value
    Deliv_Date_OTD2 = Range("H13").Value
    Deliv_Time_OTD2 = Range("H14").Value
    Quality_OQD = Range("M8").Value
    Quality_NC_Iteration = Range("M10").Value
    Global_Quality = Range("M12").Value
    Deliv_Note_Testia = Range("F21").Value
    Deliv_Note_AIRBUS = Range("F22").Value
    Good_Receipt = Range("E30").Value
    Status = Range("E31").Value
    Comments = Range("E32").Value
     
    'On active le fichier "FOLLOW_UP_TESTIA.xlsm" et on se mets dans l'onglet "Feuil1"
    Windows("FOLLOW_UP_TESTIA.xlsm").Activate
    Sheets("Feuil1").Activate
     
    'On colle les valeurs précédemment mises en mémoire dans le fichier "FOLLOW_UP_TEST.xlsm" (onglet "Feuil1")
    Range("C" & y).Value = Program
    Range("D" & y).Value = PO
    Range("E" & y).Value = PO_Date
    Range("F" & y).Value = Content
    Range("G" & y).Value = Deliv_Target_Date
    Range("I" & y).Value = Deliv_Date_OTD1
    Range("J" & y).Value = Deliv_Time_OTD1
    Range("L" & y).Value = Quality_OQD
    Range("M" & y).Value = Last_Reject_Date
    Range("N" & y).Value = Deliv_Date_OTD2
    Range("P" & y).Value = Deliv_Time_OTD2
    Range("Q" & y).Value = Quality_NC_Iteration
    Range("R" & y).Value = Deliv_Note_Testia
    Range("S" & y).Value = Deliv_Note_AIRBUS
    Range("T" & y).Value = Good_Receipt
    Range("U" & y).Value = Status
    Range("V" & y).Value = Comments
    Range("W" & y).Value = Global_Quality
     
    y = y + 1
     
    'Fermer le fichier "Entry_Form_ID....xlsm" sans l'enregistrer (false)
    Workbooks("Entry_Form_" & x & ".xlsm").Close False
     
    Wend
     
    fin:
     
    End Sub

  2. #2
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    (Bizarre je crois avoir vu une partie de ce code précédemment)

    Il te faut faire un contrôle sur les valeurs de x et nbre.
    Sans doute aussi sur l'adresse de tes cellules spéciales.
    Ici x = ""
    Un devrait suffire

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut
    Je débute.
    Qu'est ce que "debug print"? Où dois-je le mettre ? A quoi cela sert-il ?

    Cdlt.
    Jérôme.

  4. #4
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Si je peux me permettre.
    To code ne m'inspire pas. Je le trouve assez lourd.
    1 - Pourquoi toutes ces variables?
    Des égalités entre des objets Range bien rattachés (ce qui n'est pas le cas) devraient suffire.
    2 - As-tu vérifié que l'intégralité des classeurs s'ouvrent bien, un à un?
    3 - Pas d'indentation. Code pas très clair.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Un peu de recherche....
    Regarde cette discussion
    Discussion Debug.Print

    D'autre part, tu peux également, et peut-être avant tout, utiliser la fenêtre des variables locales.

    Là aussi, un minimum de recherche t'amènera à une bonne exploitation de ton VBE.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  6. #6
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut
    (Re)bonjour,

    Effectivement le code n'est pas optimisé. Cela vient du fait que je débute en VBA et que je dois rendre un livrable à mon client pour hier....Je l'ai cependant testé et il fonctionne. Certes pas dans les règles de l'art mais bon .....

    En fait le fichier "Entry_Form_ID4353.xlsm" (par exemple), est la concaténation de "Entry_Form_" et d'une valeur située dans une colonne du type "ID4353".
    Dans mon cas tout se passe bien jusqu'à ce que la cellule relative à la valeur ID.... soit vide. Il faudrait que je mette un test sur "x" (qui prend la valeur ID....) pour savoir si elle est vide ....sauf que je ne sais trop comment l'insérer dans mon code. En fait si x est vide cela signifie que j'ai parcouru la totalité de la liste et que donc je dois m'arrêter.

    Cdlt.
    Jérôme.

    Quoi qu'il en soit un grand merci pour toutes ces infos.....

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut,

    Tu testes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If x = "" Then GoTo Fin
    Mais, comme je te l'ai indiqué, assure-toi que tous les classeurs que tu souhaites ouvrir s'ouvrent bien.

    Suggestion

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim lenom as String
    lenom = Dossier_racine & "\" & x & "\" & "Entry_Form_" & x & ".xlsm"
    Debug.Print lenom
    Mais tu peux aussi utiliser la fenêtre des variables locales en exécutant ton code pas à pas

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 754
    Points : 28 605
    Points
    28 605
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Qu'est ce que "debug print"? Où dois-je le mettre ? A quoi cela sert-il ?
    Pour bien développer avec un langage quel qu'il soit, il est important de bien connaître son environnement de développement et les outils de débogage.
    Voici trois liens intéressants vers des tutoriels hébergés par Developpez.com
    1. Le débogage sous Visual Basic 6 & Visual Basic pour Application (1ère partie)
    2. Vos premiers pas dans l'éditeur de macros Excel
    3. Visual Basic Editor

    Si le premier traite du débogage pour Visual Basic, il est valable pour VBA sauf pour deux, trois fonctionnalités non présentes en VBA
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Août 2017
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2017
    Messages : 363
    Points : 79
    Points
    79
    Par défaut
    Merci pour vos conseils éclairés à tous.
    Cdlt.
    Jérôme

Discussions similaires

  1. Erreur de Segmentation en fin de boucle
    Par SebHaLEau dans le forum C
    Réponses: 5
    Dernier message: 12/02/2013, 22h37
  2. Erreur incompréhensible dans une boucle
    Par Neuromancien2 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/08/2007, 16h48
  3. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 09h00
  4. [STL] condition fin de boucle avec iterateurs
    Par ZaaN dans le forum SL & STL
    Réponses: 5
    Dernier message: 30/06/2007, 14h52
  5. [VB-E] Erreur 1004 dans une boucle For
    Par lycaon dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 02/11/2006, 22h41

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