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

Excel Discussion :

Comparer COLONNE A et COLONNE B


Sujet :

Excel

  1. #1
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut Comparer COLONNE A et COLONNE B
    bonjour,

    pourquoi ce code ne fonctionne pas ??
    MERCI

    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
    Sub test()
    Dim x As Integer
    x = 2
    For Each cell In Range("a2:a22")
     
    If cell(x, 1).Value < cell(x, 2).Value Then
     
    cell(x, 1).Font.Bold = True
    cell(x, 1).Font.Size = 16
    cell(x, 1).Font.ColorIndex = vbRed
    'cell(x, 1).Interior.ColorIndex = 3
     
    Else
     
    cell(x, 1).Font.Bold = False
    cell(x, 1).Font.Size = 12
    cell(x, 1).Font.ColorIndex = 1
    'cell(x, 1).Interior.ColorIndex = False
    End If
    Next cell
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Cell comprend la ligne et la colonne, il ne faut pas ajouter (x,1)

    Essayez ceci:
    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
    Sub test()
        Dim x As Integer
        x = 2
        For Each Cell In Range("a2:a22")
            If Cell.Value < Cell.Offset(0, 1).Value Then
                With Cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = vbRed
                End With
                'cell.Interior.ColorIndex = 3
            Else
                With Cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = 1
                End With
                'cell.Interior.ColorIndex = False
            End If
        Next Cell
    End Sub
    Cdlt

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 792
    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 : 12 792
    Points : 28 671
    Points
    28 671
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si vous souhaitez comparer la colonne A par rapport à la colonne B, ce n'est pas la bonne syntaxe.
    La boucle que vous utilisez parcourt la plage de A2 jusqu'à A22 donc pour pouvoir comparer la colonne B c'est à dire celle qui est décalée d'une colonne la bonne syntaxe devrait être If Cell.Value < Cell.Offset(ColumnOffset:=1).Value Then

    Idéalement et pour éviter les mauvaises surprises, il y aurait lieu de préciser les objets classeur et feuille, parents de la plage A2:A22, et déclarer la variable Cell comme objet Range
    Un autre problème, vous utilisez la constante de couleur vbRed qui s'utilise avec la propriété Font.Color de l'objet Range et pas Font.ColorIndex
    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

  4. #4
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Cell comprend la ligne et la colonne, il ne faut pas ajouter (x,1)

    Essayez ceci:
    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
    Sub test()
        Dim x As Integer
        x = 2
        For Each Cell In Range("a2:a22")
            If Cell.Value < Cell.Offset(0, 1).Value Then
                With Cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = vbRed
                End With
                'cell.Interior.ColorIndex = 3
            Else
                With Cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = 1
                End With
                'cell.Interior.ColorIndex = False
            End If
        Next Cell
    End Sub
    Cdlt
    merci ca fonctionne très bien.

    j'ai le même cas un peux plus compliquer

    comparer deux tableaux je compares 15 colonnes du tableau A début (ligne C6 à q2) tableau B de la ligne ( U6 à AI6)
    fin (ligne C26 à q26) tableau B de la ligne ( U26 à AI26)

    exemple ; je compare la première ligne : la c6 vs u6 en suite d6 cv v6 ....etc

    dois faire le même code et définir toutes les lignes §?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Cell In Range("C6:Q26")
     
            If Cell.Value < Cell.Offset(0, 1).Value Then
    MERCI

    Nom : COMP TAB COL EXL.jpg
Affichages : 96
Taille : 393,7 Ko

  5. #5
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par nouveau17 Voir le message
    merci ca fonctionne très bien.

    j'ai le même cas un peux plus compliquer

    comparer deux tableaux je compares 15 colonnes du tableau A début (ligne C6 à q2) tableau B de la ligne ( U6 à AI6)
    fin (ligne C26 à q26) tableau B de la ligne ( U26 à AI26)

    exemple ; je compare la première ligne : la c6 vs u6 en suite d6 cv v6 ....etc

    dois faire le même code et définir toutes les lignes §?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each Cell In Range("C6:Q26")
       If Cell.Value < Cell.Offset(0, 20).Value Then
       If Cell.Value(0,3).value < Cell.Offset(0, 21).Value Then
    MERCI

    Nom : COMP TAB COL EXL.jpg
Affichages : 96
Taille : 393,7 Ko

  6. #6
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Oui c'est le principe, il n'y a qu'à tester pour vérifier que tout va bien.
    Cdlt

  7. #7
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Oui c'est le principe, il n'y a qu'à tester pour vérifier que tout va bien.
    Cdlt
    j'ai testé le code comme suit et ca fonctionne..Donc j'ai 15 colonnes avec 15 for each!!
    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
    Sub teste1()
     
        Dim x As Integer
        'x = 6
        For Each cell In Range("a6:a7")
            If cell.Value < cell.Offset(columnoffset:=1).Value Then    '(0, 14).Value Then
     
                With cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = vbRed
                End With
                'cell.Interior.ColorIndex = 3
            Else
                With cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = 1
                End With
                'cell.Interior.ColorIndex = False
            End If
     
            Next cell
         For Each cell In Range("b6:b7")
     
               If cell.Value < cell.Offset(0, 14).Value Then
                With cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = vbRed
                End With
                'cell.Interior.ColorIndex = 3
            Else
                With cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = 1
                End With
                'cell.Interior.ColorIndex = False
            End If
     
     
        Next cell
     
     
        For Each cell In Range("c6:c7")
     
               If cell.Value < cell.Offset(0, 14).Value Then
                With cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = vbRed
                End With
                'cell.Interior.ColorIndex = 3
            Else
                With cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = 1
                End With
                'cell.Interior.ColorIndex = False
            End If
     
     
     
        Next cell
    End Sub

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 792
    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 : 12 792
    Points : 28 671
    Points
    28 671
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j'ai testé le code comme suit et ca fonctionne..Donc j'ai 15 colonnes avec 15 for each!!
    S'il y a 15 colonnes à vérifier, il faudrait plutôt prévoir une boucle For...To...Next qui décale les colonnes à comparer. Cependant je ne comprends pas trop ce que vous voulez comparer. Vos explications et le code qui vous satisfait ne semblent pas être identiques.
    La première boucle For..Each compare la colonne A avec la colonne B, la deuxième compare la colonne B avec la 14ème colonne à partir de B, la troisième compare la c avec la 14ème colonne à partir de C
    Où est la logique ?
    Si on doit comparer deux tableaux ayant le même nombre de colonnes et de lignes on définit le périmètre de ceux-ci et on compare ligne par ligne et colonne par colonne et personnellement je travaillerais alors avec deux boucles For...To...Next
    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

  9. #9
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    S'il y a 15 colonnes à vérifier, il faudrait plutôt prévoir une boucle For...To...Next qui décale les colonnes à comparer. Cependant je ne comprends pas trop ce que vous voulez comparer. Vos explications et le code qui vous satisfait ne semblent pas être identiques.
    La première boucle For..Each compare la colonne A avec la colonne B, la deuxième compare la colonne B avec la 14ème colonne à partir de B, la troisième compare la c avec la 14ème colonne à partir de C
    Où est la logique ?
    Si on doit comparer deux tableaux ayant le même nombre de colonnes et de lignes on définit le périmètre de ceux-ci et on compare ligne par ligne et colonne par colonne et personnellement je travaillerais alors avec deux boucles For...To...Next
    Bonjour, je compare deux tableaux identique seulement le premier tableau ne doit pas être inférieur au second : si la colonne 1 du tableau 1 < de la colonne 1 du tableau 2 colorer si non rien et ceci pour toutes les lignes et colonnes restantes la colonne 2 tab1 vs colonne 2 tab2...etc. exemple valeur vente < valeur achat colorer .

  10. #10
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Bonjour,

    Ce que j'ai compris:

    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
    Sub test1()
        For Each cell In Range("C6:Q26")
            If cell.Value < cell.Offset(0, 18).Value Then
                With cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = RGB(255, 0, 0)
                End With
             Else
                With cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = RGB(0, 0, 0)
                End With
            End If
        Next cell
    End Sub
    Cdlt

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 792
    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 : 12 792
    Points : 28 671
    Points
    28 671
    Billets dans le blog
    53
    Par défaut
    Bonjour,

    Une autre approche avec un procédure générique où l'on passe comme arguments deux objets Range, le tableau de gauche et celui de droite

    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
    Function CompareTable(LeftRange As Range, RightRange As Range)
      Dim r As Long, c As Integer
      Dim Flag As Boolean
      With LeftRange
       For r = 1 To .Rows.Count      ' Parcourt les lignes
         For c = 1 To .Columns.Count ' Parcourt les colonnes
           With .Cells(r, c)
             ' vérifie si la cellule de la même ligne et colonne de gauche est inférieure à celui de droite
             Flag = .Value < RightRange.Cells(r, c).Value
             ' Mise en forme en fonction test logique
             With .Font
             .Bold = Flag: .Size = 12 + Abs((4 * Flag))
             .Color = RGB(0 + Abs(255 * Flag), 0, 0)
             End With
           End With
         Next
       Next
      End With
    End Function
    Exemple de l'invocation de la procédure
    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
    Sub TestCompareTable()
      Dim rngLeft As Range
      Dim rngRight As Range
      With ThisWorkbook
        Set rngLeft = .Worksheets("Data").Range("A2").CurrentRegion
        Set rngRight = .Worksheets("Data").Range("J2").CurrentRegion
      End With
      With rngLeft
        Set rngLeft = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
      End With
      With rngRight
        Set rngRight = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
      End With
      With rngLeft
        If (.Columns.Count = rngRight.Columns.Count) And (.Rows.Count = rngRight.Rows.Count) Then
           CompareTable rngLeft, rngRight
        End If
      End With
    End Sub
    Illustration des tableaux traités

    Nom : 240403 dvp CompareTable Illustration.png
Affichages : 73
Taille : 32,0 Ko
    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

  12. #12
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Bonjour,

    Ce que j'ai compris:

    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
    Sub test1()
        For Each cell In Range("C6:Q26")
            If cell.Value < cell.Offset(0, 18).Value Then
                With cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = RGB(255, 0, 0)
                End With
             Else
                With cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = RGB(0, 0, 0)
                End With
            End If
        Next cell
    End Sub
    Cdlt
    Bonjour,

    merci ca fonctionne très bien aussi une question que j'aurais peut être besoin si jamais je voulais inverser la comparaison je dois juste changer et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If cell.Value < cell.Offset(0, 18).Value Then
    et ca deviens
    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
    Sub test1()
        For Each cell In Range("U6:AI26")
            If cell.Value < cell.Offset(0, 3).Value Then
                With cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = RGB(255, 0, 0)
                End With
             Else
                With cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = RGB(0, 0, 0)
                End With
            End If
        Next cell
    End Sub
    MERCI ET BONNE JOURNEE

  13. #13
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    Non, le décalage (offset) doit être inversé, c'est à dire avec une valeur négative:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If cell.Value < cell.Offset(0, -18).Value Then

  14. #14
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Non, le décalage (offset) doit être inversé, c'est à dire avec une valeur négative:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If cell.Value < cell.Offset(0, -18).Value Then
    J'ai testé ca fonctionne à la merveille.
    merci pour votre aide précieuse.
    cdt

  15. #15
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    Une autre approche avec un procédure générique où l'on passe comme arguments deux objets Range, le tableau de gauche et celui de droite

    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
    Function CompareTable(LeftRange As Range, RightRange As Range)
      Dim r As Long, c As Integer
      Dim Flag As Boolean
      With LeftRange
       For r = 1 To .Rows.Count      ' Parcourt les lignes
         For c = 1 To .Columns.Count ' Parcourt les colonnes
           With .Cells(r, c)
             ' vérifie si la cellule de la même ligne et colonne de gauche est inférieure à celui de droite
             Flag = .Value < RightRange.Cells(r, c).Value
             ' Mise en forme en fonction test logique
             With .Font
             .Bold = Flag: .Size = 12 + Abs((4 * Flag))
             .Color = RGB(0 + Abs(255 * Flag), 0, 0)
             End With
           End With
         Next
       Next
      End With
    End Function
    Exemple de l'invocation de la procédure
    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
    Sub TestCompareTable()
      Dim rngLeft As Range
      Dim rngRight As Range
      With ThisWorkbook
        Set rngLeft = .Worksheets("Data").Range("A2").CurrentRegion
        Set rngRight = .Worksheets("Data").Range("J2").CurrentRegion
      End With
      With rngLeft
        Set rngLeft = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
      End With
      With rngRight
        Set rngRight = .Offset(1, 1).Resize(.Rows.Count - 1, .Columns.Count - 1)
      End With
      With rngLeft
        If (.Columns.Count = rngRight.Columns.Count) And (.Rows.Count = rngRight.Rows.Count) Then
           CompareTable rngLeft, rngRight
        End If
      End With
    End Sub
    Illustration des tableaux traités

    Nom : 240403 dvp CompareTable Illustration.png
Affichages : 73
Taille : 32,0 Ko


    bonjour, j'ai testé mais je pense avoir louper une chose:

    un code que j'ai collé dans une macro
    et l'autre procédure dans un module


    Nom : test compare2eme approche.png
Affichages : 51
Taille : 128,1 Ko

  16. #16
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    Non, le décalage (offset) doit être inversé, c'est à dire avec une valeur négative:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        If cell.Value < cell.Offset(0, -18).Value Then
    Je vais vous embêté avec mais question : dans le cas ou je compare de cette façon

    Nom : COMPVERTIC.jpg
Affichages : 48
Taille : 276,7 Ko
    le code doit être comme suit: mais le résultat est faux

    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
    For Each Cell In Range("C6:Q6")
            If Cell.Value < Cell.Offset(36, 0).Value Then
                With Cell.Font
                    .Bold = True
                    .Size = 16
                    .Color = RGB(255, 0, 0)
                End With
             Else
                With Cell.Font
                    .Bold = False
                    .Size = 12
                    .Color = RGB(0, 0, 0)
                End With
            End If
        Next Cell

  17. #17
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    Juillet 2016
    Messages
    3 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : Juillet 2016
    Messages : 3 240
    Points : 5 655
    Points
    5 655
    Par défaut
    le décalage doit se faire 30 lignes plus bas, donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cell.Value < Cell.Offset(30, 0).Value Then

  18. #18
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par ARTURO83 Voir le message
    le décalage doit se faire 30 lignes plus bas, donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cell.Value < Cell.Offset(30, 0).Value Then

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Cell.Value < Cell.Offset(-30, 0).Value Then
    et j'ai inversé les tableaux ca fonctionne super bien pour les 30 et -30.

    ce que j'ai compris le décalage offset commence à partir du début de la sélection tel-que du c6 à c36 = 30 ou bien -30.
    merci encore.

  19. #19
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 792
    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 : 12 792
    Points : 28 671
    Points
    28 671
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    L'erreur 9 que vous avez sur cette ligne Set rngLeft = .Worksheets("Data").Range("A2").CurrentRegion est due tout simplement au fait que dans mon exemple la feuille où se trouve les deux tableaux se nomme "Data" et que évidemment il y a lieu soit de modifié le nom de votre feuille ou bien les deux lignes de code qui font référence à cette feuille.
    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

  20. #20
    Membre habitué
    Homme Profil pro
    administartion
    Inscrit en
    Avril 2017
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : administartion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2017
    Messages : 345
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    L'erreur 9 que vous avez sur cette ligne Set rngLeft = .Worksheets("Data").Range("A2").CurrentRegion est due tout simplement au fait que dans mon exemple la feuille où se trouve les deux tableaux se nomme "Data" et que évidemment il y a lieu soit de modifié le nom de votre feuille ou bien les deux lignes de code qui font référence à cette feuille.
    bonjour,

    effectivement j'ai corrigé et testé et fonctionne parfaitement et merci pour votre aide. comme ca j'ai deux approches pour exécuter ladite comparaison de tableau.

    encore merci.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2016] VBA comparer colonnes de plusieurs feuilles et extraire lignes correspondantes
    Par debutante_anonyme dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 22/12/2017, 21h35
  2. Réponses: 2
    Dernier message: 28/10/2014, 18h25
  3. [XL-2003] Comparer colonnes; indications données manquantes
    Par Joshua1969 dans le forum Excel
    Réponses: 6
    Dernier message: 17/10/2010, 11h45
  4. Comparer colonne avec cellule
    Par jaypaulojay dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/05/2007, 15h49
  5. comparer deux colonnes sur Excel
    Par delamarque dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 21/12/2005, 10h50

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