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 :

MACRO / VBA : Comparaison de deux colonnes pour publipostage


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Référent Nouvelles Technologies
    Inscrit en
    Mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Référent Nouvelles Technologies
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2021
    Messages : 8
    Par défaut MACRO / VBA : Comparaison de deux colonnes pour publipostage
    Bonjour à tous,

    Voici ma problématique,

    je débute dans le VBA mais ai des bases dans plusieurs langage (C#, C++, Java, php,etc...) certes un peu rouillées par le temps

    J'ai parcouru pas mal de tuto, mais je ne trouve pour le coup que des méthodes "brute force" et statique de lecture de tableau (utilisation des plages Excel et non des tableaux, utilisation des en-têtes "A", "B" ... ).

    Je n'en suis pas satisfait vu que cette fonction à vocation à être développer pour des centaines de fichiers ...

    j'ai un le tableau issu d'une worksheet lambda comme l'exemple ci-dessous

    Nom : Exemple.png
Affichages : 263
Taille : 10,7 Ko

    Je souhaite comparer les colonnes intitulées ici "janv-21" et "Réal - janvier 2021" et dire

    Si la semaine en cours (au moment du clic sur le bouton) est inférieur à la semaine prévue "janv-21" - 1 et que la colonne "Réal - Janvier 2021" est vide alors envoyer un mail au référent "Mail Référent"

    Il est bien évident que je remplirais un tableau de string et que l'envoi des informations se fera par bloc mais j'ai déjà l'implémentation de prête pour cette approche
    Je n'arrive pas à savoir comment parcourir mon objet Tableau pour comparer les colonnes.

    J'ai quelque chose actuellement comme ça mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Range("t_data[" & moisSel & "]").Cells(1) <= (Format(Date, "WW") - 1) And Range("t_data[Real" & moisSel & "]").Cells(1) = "" 
    Then
        'MsgBox "A faire" else MsgBox " Prestation OK"
    moisSel étant un paramètre que je rentre lors de l'appel à la fonction qui me permet de choisir le mois à traiter puisque à droite de la colonne "Réaliser Janvier 2021" se trouvera "Fév-2021" etc..., je concatène pour faire mon if sur la bonne colonne en fonction de mon paramètre d'entrée.

    Le code ci-dessus me renvois parfaitement ce dont j'ai besoin mais uniquement sur la première ligne. Comment parcourir les "Cells" des colonnes. Existe t'il une fonction "compareToRight like"

    Mon problème : Comment parcourir l'entièreté de mon tableau?

    Merci de votre lecture

  2. #2
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Salut, perso je me serais pas embête avec un objet tableau, j'aurais laissé tel quel vu que excel est deja un tableur..

    Voila le code pour te dire si le champ de la colonne D est supérieur a la semaine actuelle et que le champ de la colonne E de la ligne correspondante est vide.

    Au lieu de l'envoi de mail je t'ai mis un msgbox pour tester avec le renvoi du champ de la colonne A (no agence)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub test()
    Dim derniereligne, i As Integer
    derniereligne = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row
     
    For i = 2 To derniereligne
    If Feuil1.Range("d" & i).Value > CDbl(Format(Date, "WW")) Then
        If Feuil1.Range("e" & i).Value = "" Then
         MsgBox "envoyer mail au réferent de l'agence : " & Feuil1.Range("a" & i).Value
        End If
    End If
    Next
    End Sub
    CB

  3. #3
    Membre du Club
    Homme Profil pro
    Référent Nouvelles Technologies
    Inscrit en
    Mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Référent Nouvelles Technologies
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2021
    Messages : 8
    Par défaut
    Merci de ton retour,

    en effet j'avais implémenté ce code au préalable puis je suis tombé sur de nombreux tutos, exemples, qui déconseillaient l'utilisation des plages :

    Au vu notamment du fait que mon fichier pourra atteindre un nombre conséquent de ligne (env 1000).

    Du coup question subsidiaire, comment implémenter le choix du mois à tester lors de l'appuie sur le bouton et par là faire que les colonnes testées ne soient plus la "e" et "f" mais "i" et "j" si le mois choisi c'est mars?

    PS : Pourquoi deux If imbriqués et non pas un And sur la première condition?

  4. #4
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Tu peux mettre des case pour chaque mois et gérer la sélection des bonnes colonnes en fonction :

    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
    Sub test()
    Dim derniereligne, i As Integer
    Dim mois As Integer
    Dim col1, col2 As String
    derniereligne = Feuil1.Cells(Rows.Count, 1).End(xlUp).Row
    mois = Month(Date)
     
    Select Case mois
        Case 3
            col1 = "i"
            col2 = "j"
        'case ect <----- tu mets la valeur que tu veux tester pour le mois
        'case else <------ la valeur pour tous les autres cas (pas obligé de le mettre)
    End Select
    For i = 2 To derniereligne
    If Feuil1.Range(col1 & i).Value > CDbl(Format(Date, "WW")) And Feuil1.Range(col2 & i).Value = "" Then
         MsgBox "envoyer mail au réferent de l'agence : " & Feuil1.Range("a" & i).Value
    End If
    Next
    End Sub
    Oui ça fonctionne aussi avec un and bien évidement =)

  5. #5
    Membre du Club
    Homme Profil pro
    Référent Nouvelles Technologies
    Inscrit en
    Mars 2021
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Référent Nouvelles Technologies
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mars 2021
    Messages : 8
    Par défaut
    Merci du retour,

    effectivement je ne connaissais pas la possibilité d'utiliser le "Case" en vba, j'étais parti sur des imbrications de If...

    Je test et je clôture le sujet si OK.

  6. #6
    Membre chevronné
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2021
    Messages
    334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2021
    Messages : 334
    Par défaut
    Oui c'est jamais très joli d'imbriquer des If, je l'ai fait mais c'est pas super car ça complique bcp le code visuellement.

    J’espère t'avoir aidé a comprendre un peu plus le VBA, moi je vais me lancer dans je JS =')

    A+

    CB

Discussions similaires

  1. Macro de comparaison de deux colonnes
    Par legna986 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/06/2015, 20h23
  2. Macro de comparaison de deux colonnes
    Par legna986 dans le forum Excel
    Réponses: 3
    Dernier message: 10/06/2015, 11h04
  3. Comparaison de deux colonnes
    Par casavba dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/02/2008, 19h18
  4. [VBA-E] Pb Comparaison De Deux Colonnes Avec Fonction If
    Par gromorice dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/03/2007, 05h57
  5. Swap entre deux colonnes pour 2 enregistrements
    Par Erakis dans le forum SQL Procédural
    Réponses: 12
    Dernier message: 15/12/2005, 19h09

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