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 :

Appliquer la macro pour plusieurs colonnes (boucles)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    QSE
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : QSE

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Par défaut Appliquer la macro pour plusieurs colonnes (boucles)
    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 F et 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each NumCol In Array("A", "F", "L")
    Mais cela ne fonctionne pas. Pouvez-vous m'aider SVP.
    Ci-joint un fichier pour exemple. Dans ce fichier c'est la macro qui fonctionne uniquement pour la colonne A.
    Merci
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Décembre 2017
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Décembre 2017
    Messages : 733
    Par défaut
    Bonjour, un truc tout bête.
    essayez donc ceci, les trois boucles l'une après l'autre?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For Each NumCol In Array("A")
    ......
    Next
    For Each NumCol In Array("F")
    .....
    Next
    For Each NumCol In Array("L")
    ......
    Next
    Cordialement

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 681
    Par défaut
    Bonjour,
    Citation Envoyé par Taktser Voir le message
    Mais cela ne fonctionne pas. Pouvez-vous m'aider SVP.
    Avec si peu de précision, non.
    Pour t'aider il nous serait utile d'avoir:
    -le code
    -le message d'erreur éventuel ainsi que la ligne sur laquelle l'erreur se produit

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Par défaut
    Bonjour
    Plutôt que Range, en passant par Cells (pas testé ici)



    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
    Option Explicit
     
      Public Sub LienHyper()
     
          Dim Col As String, sFichier As Strings, Repertoire As String
          Dim iLigFin As Integer, iLig As Integer
          Dim iLigManquant As Integer
          'indiquer ici le répertoire de stockage de tous les fichiers
          sRepertoire = "C:\Users\Ghile\Downloads\"
          For Each Col In Array("A", "F", "L")
     
              'RAZ anomalies
     
              iLigFin = Feuil2.Cells(Rows.Count, Col).End(xlUp).Row
              If iLigFin > 1 Then    Feuil2.Rows("2:" & iLigFin).Delete:   End If
              'MAJ liens hypertexte
              iLigFin = Feuil1.Cells(Rows.Count, Col).End(xlUp).Row
              iLigManquant = 1
              For iLig = 6 To iLigFin
                  'mettre ici l'extension du fichier (Excel ?)
                  sFichier = sRepertoire & Feuil1.Cells(iLig, Col).Value & ".pdf"
     
                  'vérifie que le fichier existe
                  If Dir(sFichier) = "" Then
                      'manquant
                      iLigManquant = iLigManquant + 1
                      Feuil2.Cells(iLigManquant, Col).Value = sFichier
                  Else
     
                      'OK
                      Feuil1.Hyperlinks.Add Anchor:=Feuil1.Cells(iLig, Col), Address:=sFichier
                  End If
              Next
          Next
     
          'informations anomalies
          If iLigManquant > 1 Then
     
              MsgBox "Fichiers manquants : " & iLigManquant - 1
              Feuil2.Activate
          Else
              MsgBox "Traitement terminé !", vbExclamation
          End If
      End Sub

  5. #5
    Membre averti
    Homme Profil pro
    QSE
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : QSE

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Par défaut
    Citation Envoyé par halaster08 Voir le message
    Bonjour,


    Avec si peu de précision, non.
    Pour t'aider il nous serait utile d'avoir:
    -le code
    -le message d'erreur éventuel ainsi que la ligne sur laquelle l'erreur se produit
    Il n’y a pas de message d’erreur. J’avais joint le fichier là j’ai répondu en mettant le code dans mon message plus bas dans la discussion. Au fait ma macro fonction que pour la première colonne.

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Liste As Variant, I As Long, NumCol As String
    Liste = Array("A", "F", "L")
    For I = 0 To UBound(Liste)
        NumCol = Liste(I)

  7. #7
    Membre averti
    Homme Profil pro
    QSE
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : QSE

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Par défaut
    Merci à tous pour votre aide. Mais je n'y arrive toujours pas. Ci-dessous mon code, au fait je souhaite que le texte soit fait pour trois colonnes et que les fichiers manquants soient listées dans un onglet.Quand j'enlève ma boucle ça fonctionne parfaitement pour une seule colonne, mais pour plusieurs non.
    Je n'ai pas de message d'erreur mais la macro ne fait pas ce que je veux.

    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
    Option Explicit
     
    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 NumCol
        'indiquer ici le répertoire de stockage de tous les fichiers
        sRepertoire = "R:\CHEMIN\"
        Set oSh = Worksheets(1)
        Set oShManquants = Worksheets("Manquants")
        'RAZ anomalies
    For Each NumCol In Array("A", "F", "L")
        iLigFin = oShManquants.Range(NumCol & Rows.Count).End(xlUp).Row
        If iLigFin >= 2 Then
            oShManquants.Rows("2:" & iLigFin).Delete
        End If
        'MAJ liens hypertexte
        iLigFin = oSh.Range(NumCol & Rows.Count).End(xlUp).Row
        iLigManquant = 1
        For iLig = 6 To iLigFin
            'mettre ici l'extension du fichier (Excel ?)
            sFichier = sRepertoire & oSh.Range(NumCol & 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(NumCol & iLig), Address:=sFichier
            End If
        Next iLig
        'informations anomalies
    Next NumCol
        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
        Sheets("Références").Activate
    '
    End Sub

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Taktser Voir le message
    Mais je n'y arrive toujours pas.
    Qu'est-ce qui pose problème dans le code que je t'ai transmis ?
    L'as-tu au moins testé ?

  9. #9
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    bon Il y a des choses qui me gène

    Tout d'abord :

    Perso je trouve ça pourri autant aller jusqu'au bout et faire et déclarer un variant alors que c'est un string me gène !!!

    deplus déclarer NumCol sous entend que c'est un numérique or ce n'est pas le cas, tu devrais déclarer Col à la place (moins perturbant)

    il faut penser à la maintenance de ton code dès la conception

  10. #10
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 174
    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 : 13 174
    Billets dans le blog
    53
    Par défaut
    Bonjour Igloobel,
    Totalement d'accord avec toi
    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

  11. #11
    Membre averti
    Homme Profil pro
    QSE
    Inscrit en
    Septembre 2014
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : QSE

    Informations forums :
    Inscription : Septembre 2014
    Messages : 22
    Par défaut
    Bonsoir, merci pour vos conseils, j'ai repris le code. 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)

    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
    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\Risques industriels\"
        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

Discussions similaires

  1. [XL-2003] Appliquer une macro pour plusieurs fichiers sélectionnés
    Par Spicanis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/07/2015, 08h38
  2. Réponses: 2
    Dernier message: 20/11/2008, 18h09
  3. [Requête] Conditions différentes pour plusieurs colonnes
    Par NiKoTiNe dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 15/05/2007, 10h30
  4. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54
  5. [VBA Excel] Une même macro pour plusieurs CheckBox
    Par Choupett' dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/06/2006, 13h54

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