Problème macro : boucle sur plusieurs colonnes
Bonjour,
J'ai un tableau Excel qui me permet de suivre des fichiers .pdf
En colonne A, j'ai les noms des fichiers sans l'extension.
Ma macro teste alors la présence de chaque fichier dans un dossier spécifique. Si le fichier est présent, elle met le lien hypertexte sur son nom en colonne A. Si il est absent, elle renseigne l'onglet "Manquants".
Aujourd'hui, j'ai ajouté deux colonnes avec des noms de fichiers. Je voudrais donc faire la même chose pour les colonnes "A", "F", "L". Soit, tester la présence du fichier, si ok remonter le lien hypertexte, sinon renseigner l'onglet Manquants.
J'ai essayé en ajoutant une boucle
La macro fonctionne très bien pour les liens.
Le seul soucis, c'est que le noms des fichiers non présents dans le dossier sont repris dans l'onglet manquants.
Elle me liste uniquement les fichiers manquants de la dernière colonne. Or j'aimerai avoir la liste des fichiers manquants de toutes les colonnes. Ci-dessous le Code que j'ai essayé de mettre en forme ( je suis débutant, je ne pratique pas souvent)
Je vous remercie par avance pour votre aide.
Public Sub PDF()
'
Dim oSh As Worksheet
Dim sRepertoire As String
Dim iLigFin As Integer
Dim iLig As Integer
Dim sFichier As String
Dim oShManquants As Worksheet 'fichiers manquants
Dim iLigManquant As Integer
Dim Col As Variant
'indiquer ici le répertoire de stockage de tous les fichiers
sRepertoire = "C:\Users\Ghile\OneDrive\Bureau\Dossier tests\"
Set oSh = Worksheets(1)
Set oShManquants = Worksheets("Manquants")
'RAZ anomalies
For Each Col In Array("A", "F", "L")
iLigFin = oShManquants.Range(Col & Rows.Count).End(xlUp).Row
If iLigFin >= 2 Then
oShManquants.Rows("2:" & iLigFin).Delete
End If
'MAJ liens hypertexte
iLigFin = oSh.Range(Col & Rows.Count).End(xlUp).Row
iLigManquant = 1
For iLig = 6 To iLigFin
'mettre ici l'extension du fichier (Excel ?)
sFichier = sRepertoire & oSh.Range(Col & iLig).Value & ".pdf"
'vérifie que le fichier existe
If Dir(sFichier) = "" Then
'manquant
iLigManquant = iLigManquant + 1
oShManquants.Range("A" & iLigManquant).Value = sFichier
Else
'OK
oSh.Hyperlinks.Add Anchor:=oSh.Range(Col & iLig), Address:=sFichier
End If
Next iLig
Next Col
'informations anomalies
If iLigManquant > 1 Then
MsgBox "Nombre manquants : " & iLigManquant - 1
oShManquants.Activate
Else
MsgBox "Tous les fichiers sont présents dans la base signés !", vbExclamation
End If
Set oSh = Nothing
Set oShManquants = Nothing
'
End Sub
Bonjour,
Un essai ...
Public Sub PDF()
Dim oSh As Worksheet
Dim sRepertoire As String
Dim iLigFin As Integer
Dim iLig As Integer
Dim sFichier As String
Dim oShManquants As Worksheet 'fichiers manquants
Dim iLigManquant As Integer
Dim Col As Variant
Dim NbManquant As Integer
'indiquer ici le répertoire de stockage de tous les fichiers
sRepertoire = "C:\Documents\LesExcels\PdfPresents\" '"C:\Users\Ghile\OneDrive\Bureau\Dossier tests\"
Set oSh = Worksheets(1)
Set oShManquants = Worksheets("Manquants")
'RAZ anomalies
NbManquant = 0
iLigFin = oShManquants.Range("A" & Rows.Count).End(xlUp).Row
If iLigFin >= 2 Then oShManquants.Rows("2:" & iLigFin).Delete
For Each Col In Array("A", "F", "L")
'MAJ liens hypertexte
iLigFin = oSh.Range(Col & Rows.Count).End(xlUp).Row
iLigManquant = 1
For iLig = 6 To iLigFin
'mettre ici l'extension du fichier (Excel ?)
sFichier = sRepertoire & oSh.Range(Col & iLig).Value & ".pdf"
'vérifie que le fichier existe
If Dir(sFichier) = "" Then
'manquant
iLigManquant = iLigManquant + 1
NbManquant = NbManquant + 1
oShManquants.Range(Col & iLigManquant).Value = sFichier ' petit changement ICI
Else
'OK
oSh.Hyperlinks.Add Anchor:=oSh.Range(Col & iLig), Address:=sFichier
End If
Next iLig
Next Col
'informations anomalies
If iLigManquant > 1 Then
MsgBox "Nombre manquants : " & NbManquant ' iLigManquant - 1
oShManquants.Activate
Else
MsgBox "Tous les fichiers sont présents dans la base signés !", vbExclamation
End If
Set oSh = Nothing
Set oShManquants = Nothing
End Sub
ric
Bonsoir,
Merci pour votre retour ! Cela fonctionne par contre quand j'ai une cellule vide dans l'une des trois colonnes (pas de fichiers), alors dans l'onglets manquants cela m'affiche le chemin du répertoire sans fichier (ex : C:\Users\Ghile\OneDrive\Bureau\.pdf). Est-il possible de corriger cela ? Je ne vois pas comment le faire. Un texte en amont si la cellule est non vide ?
Aussi, j'aimerai savoir s'il est possible d'avoir une seule liste en colonne ("A") dans l'onglet "Manquants" et non trois colonnes. Je joins le fichier au cas où je ne suis pas clair
Merci pour votre aide.
Bonjour,
Ceci Set oSh = Worksheets(1)
ne fonctionne pas sur ma machine, car Worksheets(1) indique la première feuille dans la séquence de présentation des feuilles.
Dans ton fichier LiensV2.xlsm, la première feuille dans la séquence est "Manquants"
J'ai changé pour Set oSh = Feuil1
- Si une cellule est vide, la boucle passe à la cellule suivante.
- La liste des fichiers manquants se cumule en colonne "A" de la feuille "Manquants".
ric
Bonsoir,
ça marche parfaitement, merci beaucoup!
Bonne soirée.
ric