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.

4liensv2.xlsm (18.34 Ko)

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

Rechercher des sujets similaires à "probleme macro boucle colonnes"