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 :

[VBA-E]Problème de comparaison entre plusieurs colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut [VBA-E]Problème de comparaison entre plusieurs colonnes
    Bonjour à tous et à toutes tout d'abord je tient à félicité l'efficacité de ce forum, je ne suis là que depuis seulement une semaine et cela m'a beaucoup aidé seulement après plusieurs recherche sur les centaines de pages de post je me décide à vous exposer mon problème après plusieurs semaines je vais essayé d'etre clair et précis.

    Alors voilà je dois comparer plusieurs colonnes entres elles qui se présentent comme ceci :

    dans 8 colonnes j'ai plusieurs titres qui sont les suivants :

    DON12 DON13 DON14 DON15 ; DON20 DON21 DON22 DON23

    Je souhaite comparer les colonnes DON12 à DON20
    DON13 à DON21
    DON14 à DON22
    DON15 à DON21

    Sachant que s'il y a un chiffre dans les colonnes DON12,13,14,15 qui est différent de 0 alors dans les colonnes DON20,21,22,23 il doit également y avoir un chiffre pas forcément similaire aux 4 autres colonnes et il ne doit pas y avoir 0, je vais essayé d'illustrer :

    DON12 DON20

    120.3 23 Alors on affiche Pas D'erreur
    0 0 Pas D'erreur
    452.1 0 Là il y a une erreur

    Voici le code que je m'efforce de faire marcher mais sans succès :

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    Sub Comparaison()
     
        Application.ScreenUpdating = False
     
        Dim y As Long
        Dim limite As Long
        Dim x As Long
     
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
     
        For x = 3 To y
        If (Cells(x, "DON12" <> 0)) Then
        If (Cells(x, "DON20" <> 0)) Then Cells(x, 33) = "Pas D'Erreur" Else: Cells(x, 33) = "Erreur"
        Else: Cells(x, 33) = "Pas D'Erreur"
     
        End If
     
        Next x
        Next y
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
     
        For x = 3 To y
        If (Cells(x, "DON13" <> 0)) Then
        If (Cells(x, "DON21" <> 0)) Then Cells(x, 34) = "Pas D'Erreur" Else: Cells(x, 34) = "Erreur"
        Else: Cells(x, 34) = "Pas D'Erreur"
     
     
        End If
     
        Next x
        Next y
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
     
        For x = 3 To y
        If (Cells(x, "DON14" <> 0)) Then
        If (Cells(x, "DON22" <> 0)) Then Cells(x, 35) = "Pas D'Erreur" Else: Cells(x, 35) = "Erreur"
        Else: Cells(x, 35) = "Pas D'Erreur"
     
     
        End If
     
        Next x
        Next y
     
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
     
     
        For x = 3 To y
        If (Cells(x, "DON15" <> 0)) Then
        If (Cells(x, "DON23" <> 0)) Then Cells(x, 36) = "Pas D'Erreur" Else: Cells(x, 36) = "Erreur"
        Else: Cells(x, 36) = "Pas D'Erreur"
     
     
        End If
        Next x
        Next y
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
        For x = 3 To y
        If ActiveCell.Value = "DON16" <> 0 Then
        Cells(x, 37) = "Pas D'Erreur"
        Else: Cells(x, 37) = "Erreur"
     
        End If
        Next x
        Next y
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
        For x = 3 To y
        If ActiveCell.Value = "DON17" <> 0 Then
        Cells(x, 38) = "Pas D'Erreur"
        Else: Cells(x, 38) = "Erreur"
        End If
        Next x
        Next y
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
        For x = 3 To y
        If ActiveCell.Value = "DON18" <> 0 Then
        Cells(x, 39) = "Pas D'Erreur"
        Else: Cells(x, 39) = "Erreur"
        End If
        Next x
        Next y
     
        For y = 3 To 65536
        If Cells(y, 1) = "" Then
        limite = y
        Exit For
        End If
     
        For x = 3 To y
        If ActiveCell.Value = "DON19" <> 0 Then
        Cells(x, 40) = "Pas D'Erreur"
        Else: Cells(x, 40) = "Erreur"
        End If
        Next x
        Next y
     
     
       Application.ScreenUpdating = True
     
    End Sub
    Merci pous vos futurs réponses
    Cordialement Jean-Mikaël.

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    je ne comprend pas la partie avec les 2 elses. Comment fait on la différence entre l'un ou l'autre?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    If (Cells(x, "DON20" <> 0)) Then
                    Cells(x, 33) = "Pas D'Erreur"
                Else: Cells(x, 33) = "Erreur"
                Else: Cells(x, 33) = "Pas D'Erreur"

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Bah en fait il ya un else qui sert a rien, donc si tu peux m'aidé en partant de cette réponse se serait sympa c'est vraiment urgent cette comparaison merci d'avance

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Ton problème vient du fait que don20 est le titre d'une colonne, pas la référence de la colonne.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Oui mais étant donné que j'ai besoin du nom de la colonne pour pouvoir effectuer la comparaison et non du nombre auquel correspond la colonne ni de ces lettres j'aimerai bien comprendre comment faire pour que justement mon programme tri en fonction du titre de la colonne sa m'évite ainsi de réadapter le code en fonction des autres fichiers que je reçoit c'est pour cela que je veux effecteur ma comparaison selon le titre de la colonne merci de votre aide

  6. #6
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    essaye voir ca ^^
    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
    Sub Comparaison()
     
        Application.ScreenUpdating = False
     
        Dim Ligne As Long
        Dim x As Long
     
     
        x = 3
        Do While Cells(x, 1) <> ""
     
            'Test des colonne 12 et 20
            If Cells(x, "DON12") <> 0 And Cells(x, "DON20") <> 0 Then
            ElseIf Cells(x, "DON12") = 0 And Cells(x, "DON20") = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            'Test des colonne 13et 21
            If Cells(x, "DON13") <> 0 And Cells(x, "DON21") <> 0 Then
            ElseIf Cells(x, "DON13") = 0 And Cells(x, "DON21") = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            'Test des colonne 14 et 22
            If Cells(x, "DON14") <> 0 And Cells(x, "DON22") <> 0 Then
            ElseIf Cells(x, "DON14") = 0 And Cells(x, "DON22") = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            'Test des colonne 15 et 23
            If Cells(x, "DON15") <> 0 And Cells(x, "DON23") <> 0 Then
            ElseIf Cells(x, "DON15") = 0 And Cells(x, "DON23") = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            x = x + 1
        Loop
     
       Application.ScreenUpdating = True
     
    End Sub
    mais comme dit jfontaine, le coup des noms de colonnes "DONXX" ca me parait casse gueule ...

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Merci mordrhim mais j'ai une erreur dès la première fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'Test des colonne 12 et 20
    If Cells(x, "DON12") <> 0 And Cells(x, "DON20") <> 0 Then
    je sais que c'est casse gueule avec les titres des colonnes mais j'ai obligations de faire avec pour comparer pas le choix :s merci beaucoup pour votre aide, meme si j'en ai encore beaucoup besoin pour ce programme.

  8. #8
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    bon essaye ca alors ^^
    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
    Sub Comparaison()
     
        Application.ScreenUpdating = False
     
        Dim Ligne As Long
        Dim x As Long
     
     
        x = 3
        Do While Cells(x, 1) <> ""
            If Range("DON12").Rows(x) <> 0 And Range("DON20").Rows(x) <> 0 Then
            ElseIf Range("DON12").Rows(x) = 0 And Range("DON20").Rows(x) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            If Range("DON13").Rows(x).Rows(x) <> 0 And Range("DON21").Rows(x) <> 0 Then
            ElseIf Range("DON13").Rows(x).Rows(x) = 0 And Range("DON21").Rows(x) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            If Range("DON14").Rows(x) <> 0 And Range("DON22").Rows(x) <> 0 Then
            ElseIf Range("DON14").Rows(x) = 0 And Range("DON22").Rows(x) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            If Range("DON15").Rows(x) <> 0 And Range("DON23").Rows(x) <> 0 Then
            ElseIf Range("DON15").Rows(x) = 0 And Range("DON23").Rows(x) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            x = x + 1
        Loop
     
       Application.ScreenUpdating = True
     
    End Sub

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Là j'ai également une erreur dès le début une erreur 1004
    qui me dit que la méthode range de l'objet global à echoué merci quand meme beaucoup pour ton aide j'apprécie

  10. #10
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    bah je comprends pas trop ton fichier alors

    les colonnes on des noms ? (DON12 etc. ...)

    ou les premiere lignes des colonnes sont les noms DON12 etc.. ?

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Bah en fait sur la ligne 2 tu as tout les noms des colonnes par exemple DON20
    correspond à la colonne U et ainsi de suite DON19 correspond a S
    j'espère que j'ai été précis et que tu as compris ou je voulais en venir encore merci de ton aide

  12. #12
    Membre averti Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Points : 314
    Points
    314
    Par défaut
    ben voila Il suffit d'expliquer tout tout de suite.

    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
    Sub Comparaison()
     
        Application.ScreenUpdating = False
     
        Dim Ligne As Long
        Dim x As Long
     
        Don12 = Cells.Find(What:="DON12").Column
        Don13 = Cells.Find(What:="DON13").Column
        Don14 = Cells.Find(What:="DON14").Column
        Don15 = Cells.Find(What:="DON15").Column
        Don20 = Cells.Find(What:="DON20").Column
        Don21 = Cells.Find(What:="DON21").Column
        Don22 = Cells.Find(What:="DON22").Column
        Don23 = Cells.Find(What:="DON23").Column
     
        x = 3
        Do While Cells(x, 1) <> ""
            If Cells(x, Don12) <> 0 And Cells(x, Don20) <> 0 Then
            ElseIf Cells(x, Don12) = 0 And Cells(x, Don20) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            If Cells(x, Don13) <> 0 And Cells(x, Don21) <> 0 Then
            ElseIf Cells(x, Don13) = 0 And Cells(x, Don21) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            If Cells(x, Don14) <> 0 And Cells(x, Don22) <> 0 Then
            ElseIf Cells(x, Don14) = 0 And Cells(x, Don22) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            If Cells(x, Don15) <> 0 And Cells(x, Don23) <> 0 Then
            ElseIf Cells(x, Don15) = 0 And Cells(x, Don23) = 0 Then
            Else
                Cells(x, 10) = "Erreur"
            End If
     
            x = x + 1
        Loop
     
       Application.ScreenUpdating = True
     
    End Sub
    ca devrai marcher normalement.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 39
    Points : 24
    Points
    24
    Par défaut
    Sa marche nikel mordrhim je te remercie infiniment désolé de ne pas avoir été plus explicite dès le début bonne soirée et encore merci !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comparaison entre plusieurs colonnes
    Par slyz0r dans le forum Excel
    Réponses: 2
    Dernier message: 04/10/2013, 11h23
  2. [XL-2003] Comparaison des données entre plusieurs colonnes
    Par floctc dans le forum Excel
    Réponses: 6
    Dernier message: 08/12/2009, 20h56
  3. [VBA-E]Problème Copier-Coller entre 2 classeurs
    Par Corlo dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/05/2007, 14h31
  4. Problème de cloisonnement entre plusieurs instances
    Par nostub dans le forum Langage
    Réponses: 2
    Dernier message: 05/12/2006, 18h00
  5. [VBA E] Problème de lien entre textbox et cellule
    Par vanessaferraz dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 21/06/2006, 08h49

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