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 :

Comparaison de cellules sous conditions


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
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Par défaut Comparaison de cellules sous conditions
    Bonjour à tous, et au forum !

    Après avoir chercher et essayer pas mal de codes cette après-midi je me tourne vers la communauté !

    Mes données : Sur la Colonne A j'ai des ID correspondant à numéro d'offres, puis sur le reste de chaques lignes les résultats de ces offres.
    J'ai deux feuilles avec ces données sur 2 différentes périodes (Feuille1 période X, Feuille2 période Y) sur max 100 lignes et max 10 colonnes (cela peux varier, mais ca reste petit).

    Ce que je veux faire : Si une offre (ID) est présente sur les deux feuilles (donc les 2 périodes) je veux comparer les résultats en mettant en rouge ou vert les cellules de la période Y (Feuille2) selon si la valeur à l'intérieure à augmenter ou diminuer par rapport à la valeur en X (Feuille1).

    Ce que j'ai : Après mes recherces et mes essais j'ai quelque chose. Je me suis perdue dans mes variables et je ne maitrise pas les Range, mais la logique du code est assez simple.

    Info supplémentaire : Les données des deux feuilles proviennent d'un tableau pivot, je trouvais plus simple pour moi de d'abord copié coller mes données dans de nouvelle feuille pour faire cette manip de comparaison. Une fois la comparaison effectuer je vais copier les données comme image pour les importer dans un PowerPoint. Si vous trouvez qu'il est plus simple de garder la relation avec le tableau pivot, je suis prêt à vous suivre !

    Je ne m'attend pas à avoir une solution toute cuite, mais plutôt des guidelines pour pouvoir comprendre ce que je fais ! Ci-joint un fichier exemple, si besoin

    Merci aux lectures/-trices !

    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
     
    Sub Comparaison()
    Dim rng1 As Range
    Dim rng2 As Range
    Dim cell1 As Range
    Dim cell2 As Range
    Dim i As Integer
    Dim j As Integer
    Dim egal As Boolean
     
    Set rng1 = Worksheets("Sheet1").UsedRange.Columns("A:A")
    Set rng2 = Worksheets("Sheet2").UsedRange.Columns("A:A")
     
    'Application.ScreenUpdating = False
    For Each cell1 In rng1
      For Each cell2 In rng2
        egal = True
        For i = 1 To cell1.Cells.Count
            'For j = 1 To cell2.Cells.Count
            If cell1.Cells(1, i).Value <> cell2.Cells(1, i).Value Then egal = False ' Ici je regarde si j'ai des offres en commun, je suis arrivé à la faire marché fût un moment, mais impossible depuis que j'ai fait des modifs
            'Next j
        Next i
        If egal Then
           'Ici une formule pour comparer et colorier les cellules en feuille 2      
        End If
      Next cell2
    Next cell1
    'Application.ScreenUpdating = True
     
    End Sub
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Voici ton code un peu modifié.
    J'ai ajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell1.Parent.Activate: cell1.Select
    pour que tu puisses visualiser ton erreur.
    Tu verras que tu compares des colonnes au lieu de comparer chacune des cellules des colonnes.

    Il te faudra remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rng1 = Worksheets("Sheet1").UsedRange.Columns("A:A")
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set rng1 = Worksheets("Sheet1").UsedRange.Columns("A:A").Cells
    Idem pour mg2.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Par défaut
    Salut Docmarti ! Et merci

    J'ai donc continué avec ce code, il est plus simple pour moi à manipulé !

    J'ai repris le même principe pour remplir les cellules comme je le veux. Lorsque je regarde la macro fonctionner (et ca pique les yeux) j'ai l'impression qu'elle fait plusieurs fois les check de cellules, comme un aller retour répéter 1-2-3 fois.

    En regardant ce code, aurais tu une idée pour le raccourcir ou amélioré la vitesse d'éxécution ?

    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
     
    Sub Comparaison()
    Dim rng1 As Range
    Dim rng2 As Range
    Dim cell1 As Range
    Dim cell2 As Range
    Dim cellrow1 As Range
    Dim cellrow2 As Range
    Dim row1 As Range
    Dim row2 As Range
     
    Set rng1 = Worksheets("Sheet1").UsedRange.Columns("A:A").Cells
    Set rng2 = Worksheets("Sheet2").UsedRange.Columns("A:A").Cells
     
     
    Application.ScreenUpdating = False
    For Each cell1 In rng1
     
    cell1.Parent.Activate: cell1.Select
     
    For Each cell2 In rng2
     
    cell2.Parent.Activate: cell2.Select
     
    If cell1.Value = cell2.Value Then
     
        Set row2 = Range(cell2, cell2.End(xlToRight))
        Set row1 = Range(cell1, cell1.End(xlToRight))
     
            For Each cellrow1 In row1 '''
     
            cellrow1.Parent.Activate: cellrow1.Select
     
            For Each cellrow2 In row2
     
            cellrow2.Parent.Activate: cellrow2.Select
     
                If cellrow2.Value > cellrow1.Value Then
     
                    cellrow2.Interior.ColorIndex = 43
     
                ElseIf cellrow2.Value < cellrow1.Value Then
     
                    cellrow2.Interior.ColorIndex = 46
     
                ElseIf cellrow2.Value = cellrow1.Value Then
     
                    cellrow2.Interior.ColorIndex = 36
     
            End If
     
            Next cellrow2
            Next cellrow1
     
    End If
     
    Next cell2
    Next cell1
    Application.ScreenUpdating = True
     
    End Sub

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    J'ai donc continué avec ce code, il est plus simple pour moi à manipulé !
    C'est le but. Créer un code simple à écrire.

    Lorsque je regarde la macro fonctionner (et ca pique les yeux) j'ai l'impression qu'elle fait plusieurs fois les check de cellules, comme un aller retour répéter 1-2-3 fois.
    Ce n'est pas juste une impression. Il répète inutilement la même opération.
    Le but des Select est uniquement de faciliter l'écriture du code en s'assurant qu'il fonctionne selon nos espoirs. Alors il faut mettre un Stop après chaque Select pour vérifier le comportement du code. Quand on est sûr que le code fonctionne comme désiré, on doit supprimer le STOP et le SELECT.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 19
    Par défaut
    D'accooooord.

    Donc ces lignes là servent à suivre la boucle For Each

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cell1.Parent.Activate: cell1.Select
    d'ailleurs à quoi correspond le .Parent ? J'ai cherché, mais je n'ai pas compris.

  6. #6
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    C'est le principe de la programmation orientée Objet.
    Chaque cellule est un objet (de type Range). La feuille est un objet de type WorkSheet et le classeur est un objet de type Workbook.
    Le contenant (ou Parent) de la cellule est la feuille. Le contenant (ou Parent) d'une feuille est le classeur. Le contenant du classeur est l'objet Application.

    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
    Sub Tuto()
    'Pèse sur la touche F8 pour avancer dans le code pas à pas
     
    Worksheets("Feuil1").Activate
     
    Set r = Worksheets("Feuil2").Cells(5, 1)
     
    MsgBox "L'objet R est contenu dans " & r.Parent.Name
     
    MsgBox "1. Je vais activer la feuille contenant l'objet r, soit " & r.Parent.Name
     
    r.Parent.Activate
     
    MsgBox "2. Je vais sélectionner la cellule R dont l'adresse est " & r.Address
     
    r.Select
     
    End Sub

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

Discussions similaires

  1. [XL-2000] Saisie dans des cellules sous conditions
    Par cedana dans le forum Excel
    Réponses: 3
    Dernier message: 14/01/2010, 14h00
  2. suppression cellules sous condition
    Par bizjet dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/12/2009, 16h06
  3. [XL-2003] faire Clignoter une cellule sous condition
    Par LaPanic dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 21/06/2009, 18h49
  4. macro vba identifier cellule sous condition
    Par yanacrux dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/03/2009, 14h00
  5. colorer des cellules sous conditions
    Par coenonympha dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/07/2008, 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