Erreur en fin de boucle ?

Erreur en fin de boucle ? - VB/VBA/VBS - Programmation

Marsh Posté le 07-11-2018 à 14:17:33    

Bonjour,
 
Dans la macro ci-jointe j'ai en fin de boucle le message d'erreur suivant :
 
Nous sommes désolés mais « P:\ENGINEERING\Entry_Form_.xlsm » est introuvable. Peut-être a-t-il été déplacé, renommé ou supprimé ?
 
Pouvez-vous m'indiquer la correction à effectuer ? Merci par avance.
 
Cdlt.
Jérôme.
 

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

Reply

Marsh Posté le 07-11-2018 à 14:17:33   

Reply

Marsh Posté le 07-11-2018 à 14:23:12    

A tout hasard, le fichier existe bien tu en es sur?

Reply

Marsh Posté le 07-11-2018 à 14:44:27    

Le fichier "Entry_Form_...." est le résultat d'une concaténation entre "Entry_Form_" et "ID4656" (par exemple).  
La boucle comprends 28 valeurs. La première se nomme ID4656 et la dernière ID2343.
 
ID4656
..
...
...
...
...
ID2343
 
La boucle se déroule correctement jusqu'à la 28ème mais par contre j'ai le message à la 29ème ...
 
Cdlt.
Jérôme.

Reply

Marsh Posté le 07-11-2018 à 16:25:29    

Bonjour,
 
Changer la condition :

Code :
  1. While i <= nbr


 
Par :

Code :
  1. While i < nbr


 
Prendre le cas avec une seule ligne pour comprendre. Le .Count vaut 1 et i vaut 0, or tu n'as qu'un seul tour de boucle à effectuer.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 07-11-2018 à 17:39:59    

Sinon, même remarque que sur un de tes autres sujets. Éviter les .activate qui vont ralentir ton script. Les .select et .activate, généralement tu dois en avoir max 1 par macro, c'est celui qui indique ce que tu veux qui soit activé et/ou sélectionné après l’exécution de la macro.

 

Privilégier l'utilisation de With ou passer directement l'objet ou range dans la ligne d'exécution, par exemple, ligne 56 à 61 :

Code :
  1. 'Activation du fichier "FOLLOW_UP_TEST.xlsm", on active l'onglet "Feuil1"
  2. Windows("FOLLOW_UP_TEST.xlsm" ).Activate
  3. Sheets("Feuil1" ).Activate
  4. 'x correspond à la valeur de la cellule B6 (première valeur de la liste)
  5. x = Range("B" & y).Value


Je ne connais pas vraiment l'objet Windows, il ne me semble pas approprié au contexte mais sinon ça devrait donner :

Code :
  1. 'x correspond à la valeur de la cellule B6 (première valeur de la liste)
  2. x = Workbooks("FOLLOW_UP_TEST.xlsm" ).Sheets("Feuil1" ).Range("B" & y).Value
 

Et avec un "With" par exemple pour la ligne 89 à 111 :

Code :
  1. 'On travaille sur le fichier "FOLLOW_UP_TESTIA.xlsm" et on se met dans l'onglet "Feuil1"
  2. With Workbooks("FOLLOW_UP_TESTIA.xlsm" ).Sheets("Feuil1" )
  3. 'On colle les valeurs précédemment mises en mémoire dans le fichier "FOLLOW_UP_TEST.xlsm" (onglet "Feuil1" )
  4.    .Range("C" & y).Value = Program
  5.    .Range("D" & y).Value = PO
  6.    .Range("E" & y).Value = PO_Date
  7.    .Range("F" & y).Value = Content
  8.    .Range("G" & y).Value = Deliv_Target_Date
  9.    .Range("I" & y).Value = Deliv_Date_OTD1
  10.    .Range("J" & y).Value = Deliv_Time_OTD1
  11.    .Range("L" & y).Value = Quality_OQD
  12.    .Range("M" & y).Value = Last_Reject_Date
  13.    .Range("N" & y).Value = Deliv_Date_OTD2
  14.    .Range("P" & y).Value = Deliv_Time_OTD2
  15.    .Range("Q" & y).Value = Quality_NC_Iteration
  16.    .Range("R" & y).Value = Deliv_Note_Testia
  17.    .Range("S" & y).Value = Deliv_Note_AIRBUS
  18.    .Range("T" & y).Value = Good_Receipt
  19.    .Range("U" & y).Value = Status
  20.    .Range("V" & y).Value = Comments
  21.    .Range("W" & y).Value = Global_Quality
  22. End With


Message édité par MaybeEijOrNot le 07-11-2018 à 17:40:43

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 07-11-2018 à 17:47:30    

Merci beaucoup pour tous ces conseils. Il va falloir que je les digère et me les approprient.

Reply

Marsh Posté le 07-11-2018 à 18:00:01    

licpegpon a écrit :

Code :
  1. Dim Deliv_Note_Testia As String
  2. Dim Deliv_Note_AIRBUS As String


 

J'espère juste que ce n'est pas toi qui gère les tests d'IA de Airbus ou que du moins ce n'est pas pour de la navigation, sinon je vais rester sur le plancher des vaches. :D
Bon je taquine, je ne sais pas si ça existe des experts VBA, comme beaucoup de monde je trifouille ça en complément d'Excel pour du traitement de données à petite échelle.


Message édité par MaybeEijOrNot le 07-11-2018 à 18:01:00

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 07-11-2018 à 18:14:40    

Lol. Pas de souci à avoir

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed