Ca y est, j'ai pris le temps de revoir ton code. Voilà mes remarques :
- Dans ton code, n'ayant qu'un fichier à ouvrir, il est inutile d'utiliser 2 variables (Chemin et NomFichier), et on peut même ne pas en utiliser du tout puisqu'il n'y a pas besoin de répéter plus d'une fois le nom complet à l'ouverture.
- Il est également inutile d'utiliser 4 boucles ("While...Wend") puisqu'elles sont identiques 2 à 2.
- En ce qui me concerne, je préfère utiliser "For...Next" puisque l'amplitude de tes boucles est connue à l'avance. L'écriture est aussi plus "light" puisqu'il n'est pas nécessaire d'affecter une valeur initiale ni de prévoir une ligne spécifique pour incrémenter la variable.
- Il est inutile de répéter sans cesse la gestion des erreurs, un unique "On Error Resume Next" en début de macro est suffisant.
Voilà le code que je propose (j'ai gardé la vérification du nom d'onglet, au cas où) :
Sub Ouvrir()
Dim i As Long, j As Long, F As Worksheet
On Error Resume Next
Set F = ThisWorkbook.ActiveSheet
Workbooks.Open Filename:="http..Transport/Exploitation/Planning/DISPONIBILITES CHAUFFEURS/Feuille de route conducteur_fr-FR.xlsx"
With F
For i = 2 To 10
If FeuilleExiste("0" & .Range("B" & i)) Then
.Range("C" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & .Range("B" & i) & "'!$G$8"
.Range("D" & i).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]0" & .Range("B" & i) & "'!$B$8"
End If
Next i
For j = 11 To .Range("B" & Rows.Count).End(xlUp).Row
If FeuilleExiste(.Range("B" & j)) Then
.Range("C" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & .Range("B" & j) & "'!$G$8"
.Range("D" & j).Formula = "='[Feuille de route conducteur_fr-FR.xlsx]" & .Range("B" & j) & "'!$B$8"
End If
Next j
End With
ActiveWorkbook.Close False
End Sub
Public Function FeuilleExiste(FeuilleAVerifier As String) As Boolean
'fonction qui vérifie si la "FeuilleAVerifier" existe dans le Classeur actif
'par Excel-Malin.com ( https://excel-malin.com )
On Error GoTo SiErreur
Dim Feuille As Worksheet
FeuilleExiste = False
For Each Feuille In Worksheets
If Feuille.Name = FeuilleAVerifier Then
FeuilleExiste = True
Exit Function
End If
Next Feuille
Exit Function
SiErreur:
MsgBox "Une erreur s'est produite..."
FeuilleExiste = CVErr(xlErrNA)
End Function