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 sur deux colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut Comparaison sur deux colonnes
    Bonjour,

    Le programme que je veux faire sert à savoir si les cellules de la colonnes B sont présentes dans la colonne A et colorier la cellule le cas échéant.

    Voici le code :

    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
     
    Sub compare()
       Dim Wb As Workbook
       Dim Ws As Worksheet
       Dim Cell1 As Range
       Dim Cell2 As Range
       Dim Plage As Range
       Dim Plage2 As Range
       Dim Cont1 As String
       Dim Cont2 As String
     
       Set Wb = Workbooks("Classeur2.xlsx")
        For Each Ws In Wb.Worksheets
           Set Plage = Ws.Columns(2)
           Set Plage2 = Ws.Columns(1)
           For Each Cell1 In Plage
               Set Cont1 = Cell1.Text
                For Each Cell2 In Plage2
                   Set Cont2 = Cell2.Text
                   If InStr(Cont2, Cont1) > 0 Then Cell2.Interior.ColorIndex = 28
               Next Cell2
           Next Cell1
       Next
    End Sub

    Cela me retourne une erreur : Erreur de compilation : Objet requis sur l'expression "Cont1 =".

    Avez-vous une idée de ce qui bloque ?

    Merci à vous !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    bonjour,

    La première réponse que j'ai envie de donner, c'est : "Y-a-t-il vraiment besoin de VBA?"

    Si non, la mise en forme conditionnelle peut s'avérer une solution très intéressante... http://fauconnier.developpez.com/tut...onditionnelle/
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Dim Cont1 As String et puis Set Cont1 = Cell1.Text


    Cela me retourne une erreur :
    Normal, il faut regarder l'aide sur set qui n'a rien à faire avec un string.

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Si tu veux le faire par VBA, tu peux adapter le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub Test()
      Dim RangeB As Range
      Dim RangeA As Range
      Dim Target As Range
     
      Set RangeB = Range("b1:b5")
      Set RangeA = Range("a1:a3")
      For Each Target In RangeB
        If Application.WorksheetFunction.CountIfs(RangeA, Target) <> 0 Then Target.Interior.Color = vbRed
      Next Target
    End Sub
    Dans ton code, tu as vraiment intérêt à baliser tes plages. Dans un fichier xlsm, avec ton code, tu vas balayer un million de fois un million de cellules pour chaque feuille de calcul de ton classeur. Je penses que tu ne te rends pas compte de ce que cela va demander comme temps...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut
    Bonjour,

    Merci !

    J'ai finalement trouvé une autre méthode (voir ci-dessous) qui calcule plus rapidement qu'un CountIfs.

    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 ServiceAnalyse()
        Dim Wb As Workbook
        Dim Ws As Worksheet
        Dim CellB As Range
        Dim RangeB As Range
        Dim RangeA As Range
        Dim Target As Range
     
        Set Wb = Workbooks("Classeur2.xlsx")
     
        For Each Ws In Wb.Worksheets
    	Set RangeB = Range("B1:B110")
            Set RangeA = Range("A1:A4395")
            For Each CellB In RangeB
                For Each Target In RangeA
                    If CellB Like "*" & Target & "*" Then Target.Interior.Color = vbGreen
                Next Target
            Next CellB
    Next
    End Sub
    Par contre, je veux pouvoir colorier les cellules de la colonne A qui "contiennent" les mots des cellules de la colonne B.

    Avec ce code cela ne marche pas, j'ai bien mes cellules coloriées mais uniquement celles qui sont totalement égales, pourtant sur internet les personnes avaient l'air de dire que ça marche avec les "*".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CellB Like "*" & Target & "*" Then Target.Interior.Color = vbGreen
    Une idée ?

    Merci

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    essaye de spécifier la propriété souhaitée, en l'occurrence .Value (voir .Text), peut être que ça vient de là ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CellB.Value Like "*" & Target.Value & "*" Then Target.Interior.Color = vbGreen

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 15
    Par défaut
    Bonjour,

    Non, même résultat (ni avec Value ni avec Text) ... :/

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Je pense que tu as inversé tes colonnes de tests
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    If Target Like "*" & CellB & "*" Then Target.Interior.Color = vbGreen
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Requête avec comparaison dates sur deux colonnes
    Par DAVJO dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/02/2015, 10h22
  2. [XL-2007] Comparaison sur deux colonnes excel plus traitement
    Par guiltyspark dans le forum Excel
    Réponses: 5
    Dernier message: 04/03/2011, 10h53
  3. Afficher des enregistrements sur deux colonnes
    Par Dauphind dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 14h16
  4. [Tableaux] Array sur deux colonnes et foreach..
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2006, 08h46
  5. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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