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 comparaison colonnes


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club Avatar de bernard38
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 64
    Points
    64
    Par défaut VBA-E comparaison colonnes
    Bjr,
    J'essaie de comparer les cellules de deux colonnes d'un tableau excel de sorte que:

    1 1 1
    2 3 2
    3 4 3 4

    si je trouve une égalité je copie col3,si je trouve une nouveauté je copie col5
    et si il y a une disparition (comme ici le 2) je copie col4.
    Mais j'ai des difficultés à intégrer ma troisième condition.
    Mon bout de 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub ComparaisonWF()
    '
    '
        Dim PlageCriteres As Range
        Dim PlageDonnees As Range
        Dim CelDonnee As Range
        Dim CelCritere As Range
        Dim Trouve As Boolean
     
     
        Set PlageCriteres = Range("B2:B" & Range("B65536").End(xlUp).Row)
        Set PlageDonnees = Range("A2:A" & Range("A65536").End(xlUp).Row)
     
        For Each CelDonnee In PlageDonnees
            Trouve = False
            For Each CelCritere In PlageCriteres
     
                If InStr(1, CelDonnee.Value, CelCritere.Value) <> 0 Then
                    Trouve = True
                    Exit For
                End If
            Next CelCritere
     
     
            If Not Trouve Then CelDonnee.Offset(0, 3).Value = CelDonnee.Value
     
            If Trouve Then CelDonnee.Offset(0, 2).Value = CelDonnee.Value
     
     
        Next CelDonnee
     
        Set PlageCriteres = Nothing
        Set PlageDonnees = Nothing
        Set CelCritere = Nothing
        Set CelDonnee = Nothing
     
     
    End Sub

  2. #2
    Membre régulier
    Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 156
    Points : 105
    Points
    105
    Par défaut
    Bonjour

    Si tu donnais un exemple avec toutes les données, depuis la colonne 1 jusqu'à la colonne 5, ce serait plus explicite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    co1 co2 co3 co4 co5
     7   7   7          égal
     4           4      disp
     3   9           9  nouv
    Est-ce que cet exemple correspond à ce que tu veux obtenir? sinon apporte les modifications, et l'aide suivra.

    Cordialement

  3. #3
    Membre du Club Avatar de bernard38
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    Bjr,
    C'est bien ça sauf qu'il n'y a pas de trou dans la colonne 2

    Je voudrais mettre dans une nouvelle colonne les occurences qui se retrouvent dans les deux colonnes.
    Mettre celles qui ont disparues de la colonne 1 dans une nouvelle colonne.
    Mettre les nouvelles de la colonne 2 dans une nouvelle colonne.

    La difficulté c'est qu'il faut comparer une fois la première colonne par rapport à la deuxième et inversement.(Seulement ily a 2000 lignes)

  4. #4
    Membre régulier
    Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 156
    Points : 105
    Points
    105
    Par défaut
    Bonjour

    S'il n'y a pas de trou dans la colonne 2, c'est dans la colonne 1? Si tu pouvais compléter la portion de code que j'ai envoyée ce serait mieux pour l'aide.
    Le nombre de lignes n'a aucune importance. Si le code marche pour 2 lignes, il marchera pour 2000 lignes!

    Cordialement

  5. #5
    Membre régulier
    Profil pro
    Enseignant
    Inscrit en
    Août 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Août 2006
    Messages : 156
    Points : 105
    Points
    105
    Par défaut
    Bonjour

    j'ai repris mon exemple avec toutes les données.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    co1 co2 co3 co4 co5
     7   7   7          égal
         4       4      disp
     3   9           9  nouv
    Est-ce que cet exemple correspond à ce que tu veux obtenir?

    Cordialement

  6. #6
    Membre du Club Avatar de bernard38
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    co1 co2 co3 co4 co5
    7 7 7 égal
    4 2 4 2 disp
    2 9 2 9 nouv

    ligne1: co3 = je trouve 7 dans co1 et co2
    ligne2: co4 = 4 a disparu de co1 et 2 est nouveau co2 donc je le mets co5
    ligne3: co3= 2 dans co1 et co2 et 9 nouveau
    (Il ne peut pas y avoir de nouveau dans co1)
    Est-ce plus compréhensible ?

    Mon tableau:
    1298099 1298099
    1449383 1449383
    1310626 1310626
    1357819 1357819
    1429414 1429414
    1433881 1433881
    1414176 1414176
    1425777 1425777
    1418306 1444380
    1444380 1436733
    1436733 1444557
    1444557 1449415
    1448648 1446176
    1448649 1446176
    1448650 1450440
    1451033 1447018
    1449415 1446739
    1446176 1446739
    1446176 1448917
    1450440 1452515

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    pour t'aider à réfléchir
    tu nommes la colonne A ante=Feuil1!$A:$A
    la colonne B post =Feuil1!$B:$B
    dans la colonne f tu tapes la formule =SI(ESTERREUR(RECHERCHEV(ante;post;1;FAUX));"disparu";"ident")
    dans la colonne g tu tapes la formule =SI(ESTERREUR(RECHERCHEV(post;ante;1;FAUX));"nouveau";"ancien")

    le traitement de cde devrait être plus facile
    Elle est pas belle la vie ?

  8. #8
    Membre du Club Avatar de bernard38
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    Bjr,
    En fait je voudrai traiter par une macro:
    La colonne 1 représente les factures du jour J.
    La colonne 2 les factures à J+1
    J'aimerais sortir les factures nouvelles de la colonne 2, afficher les factures
    qui ont disparues de la colonne 1 et réécrire celles qui n'ont pas bougées
    de J à J+1.
    J'arrive à sortir celles qui n'y sont plus et celles qui sont restées mais pas
    les nouvelles (en une fois)

  9. #9
    Membre du Club Avatar de bernard38
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    Ton exemple Random mis en macro est une solution, mais il faut que j'affiche
    le n° facture (pas disparue ou nouvelle) sinon il peut y avoir confusion
    de colonne.

  10. #10
    Membre du Club Avatar de bernard38
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    Le résultat à obtenir après recherche de col1 par rapport à co2 et inversement:
    (sauf que à la place de anciennes,nouvelles et disparues il faut la valeur de cellule)
    ANCIEN NOUVEAU NOUVELLESRESTÉES BAPB
    1298099 1298099 ancienne
    1449383 1449383 ancienne
    1310626 1310626 ancienne
    1357819 1357819 ancienne
    1429414 1429414 ancienne
    1433881 1433881 ancienne
    1414176 1414176 ancienne
    1425777 1425777 ancienne
    1418306 1444380 disparue(1418306)
    1444380 1436733 ancienne
    1436733 1444557 ancienne
    1444557 1449415 ancienne
    1448648 1446176 disparue(1448648)
    1448649 1446176 disparue
    1448650 1450440 disparue
    1451033 1447018 disparue
    1449415 1446739 ancienne
    1446176 1446739 ancienne
    1446176 1448917 ancienne
    1450440 1452515 ancienne
    1447018 1453527 ancienne
    1446739 1453962 ancienne
    1446739 1447684 ancienne
    1448917 1446796 ancienne
    1452515 1449373 ancienne
    1453527 1450131 ancienne
    1453962 1450590 ancienne
    1449736 1457137 ancienne disparue
    1447684 1453623 ancienne
    1446796 1450411 ancienne
    1449373 1449609 ancienne
    1450131 1457193 ancienne
    1450590 1454403 ancienne
    1457137 1453637 ancienne
    1453623 1454402 ancienne
    1450411 1452317 ancienne
    1449609 1453797 ancienne
    1457193 1453797 ancienne
    1454403 1454005 ancienne
    1453637 1455355 ancienne
    1454402 1455356 ancienne
    1452317 1453116 ancienne
    1453797 1455354 ancienne
    1453797 1455363 ancienne
    1454005 1455362 ancienne
    1455355 1455210 ancienne
    1455356 1455360 ancienne
    1453116 1455365 ancienne
    1455354 1456129 ancienne
    1455363 1460031 nouvelle(1460031)
    1455362 1459446 ancienne
    1455210 1456226 ancienne
    1455360 1456233 ancienne
    1455365 1456232 ancienne
    1456129 1460152 nouvelle(1460152)
    1458545 1456873 disparue

  11. #11
    Membre du Club Avatar de bernard38
    Inscrit en
    Février 2006
    Messages
    158
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 158
    Points : 64
    Points
    64
    Par défaut
    En fait en répétant et inversant données et critères j'arrive à mon but,mais quelque chose me dit que l'on peut faire plus simple:

    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
    Sub ComparaisonWF()
    '
    '
        Dim PlageCriteres As Range
        Dim PlageDonnees As Range
        Dim CelDonnee As Range
        Dim CelCritere As Range
        Dim Trouve As Boolean
     
     
        Set PlageCriteres = Range("B2:B" & Range("B65536").End(xlUp).Row)
        Set PlageDonnees = Range("A2:A" & Range("A65536").End(xlUp).Row)
     
        For Each CelDonnee In PlageDonnees
            Trouve = False
            For Each CelCritere In PlageCriteres
     
                If InStr(1, CelDonnee.Value, CelCritere.Value) <> 0 Then
                    Trouve = True
                    Exit For
                End If
            Next CelCritere
     
     
            If Not Trouve Then CelDonnee.Offset(0, 3).Value = CelDonnee.Value
     
            If Trouve Then CelDonnee.Offset(0, 2).Value = CelDonnee.Value
     
     
        Next CelDonnee
     
        Set PlageCriteres = Nothing
        Set PlageDonnees = Nothing
        Set CelCritere = Nothing
        Set CelDonnee = Nothing
     
        Set PlageDonnees = Range("B2:B" & Range("B65536").End(xlUp).Row)
        Set PlageCriteres = Range("A2:A" & Range("A65536").End(xlUp).Row)
     
        For Each CelDonnee In PlageDonnees
            Trouve = False
            For Each CelCritere In PlageCriteres
     
                If InStr(1, CelDonnee.Value, CelCritere.Value) <> 0 Then
                    Trouve = True
                    Exit For
                End If
            Next CelCritere
     
     
            If Not Trouve Then CelDonnee.Offset(0, 3).Value = CelDonnee.Value
     
     
     
        Next CelDonnee
     
        Set PlageCriteres = Nothing
        Set PlageDonnees = Nothing
        Set CelCritere = Nothing
        Set CelDonnee = Nothing
     
     
     
    End Sub

Discussions similaires

  1. comparaison colonnes VBA
    Par Ced39300 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/10/2011, 19h34
  2. [VBA EXCEL] Comparaison d'entête de colonne
    Par Keitarokun dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 26/06/2007, 16h53
  3. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  4. [VBA] Fusionner plusieurs colonnes en une seule
    Par brutos2 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/01/2006, 14h25
  5. [VBA] Trier les colonnes d'une listview
    Par alncool dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/09/2005, 14h12

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