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 :

Excel comparaison de colonne


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Excel comparaison de colonne
    J'ai fait exactement comme çà mais il me recopie toutes les ligne même celles qui sont pas concernées!!!!

    En fait je souhaite faire un tri des valeur

    Ma colonne A s'appelle tuteur
    Ma colonne AB c'est une liste avec nom et prénom du tuteur dans chaque cellule

    Donc si le nom du tuteur est dans la liste on touche pas à la ligne concernée
    Supposons Donald en ligne A3 et il est présent dans AB23

    La ligne A3 : W3 ne sera pas copiée
    Par contre Martin ligne A10 n'est pas dans AB

    Donc on copie la ligne dans "Restant"

    Et là il parcours bien ma boucle mais il me copie quand même toutes les lignes A:W

    Je vois pourtant pas ou est mon erreur


    Exemple :

    col A col B ........col W col AB

    Donald freshyback cours1.......présent Liste

    Matias Tagueule cours B.....présent Matias Tagueule

    Jules Mytho coursC......Absent Donald freshyback


    donc en comparaison les noms dans A et ceux de AB
    On va recopier uniquement toute la ligne de Jules Mytho de A à W dans la feuille "Restant" et ainsi de suite

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
       For i = 3 To 400
       If CStr(Sheets("LISTE").Range("A" & i).Value) <> CStr(Sheets("LISTE").Range("AB" & i).Value) Then
     
     
    Sheets("LISTE").Range("A" & i & ":W" & i).Copy  'éviter les Select
     
    Sheets("Restant").Range("A" & i).PasteSpecial
    End If
     
     Next i
    mais il me fait juste un copier coller global
    Sans tenir compte de ma condition

    Quelqu'un peut m'aider???

  2. #2
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    tel qu'il est écrit ton code compare la valeur de la colonne A ligne i à celle présente dans la colone AB ligne i également....

    Donc soit tu fais une deuxième boucle pour chercher la valeur, soit tu utilise directement la méthode de recherche.
    Da vinci Code....


    Code??? qui a dit Code?

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Comme l'a bien préciser Many, dans ton code tu vérifies si le tuteur A3 est le même que le tuteur AB3.

    Essaye ceci, je l'ai fait à la volée et non testé:
    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
    Sub comparer()
    With Sheets("LISTE")
    For i = 3 To 400
    x = 0
    If .Range("A" & i).Value <> "" Then
        For j = 3 To 400
        If .Range("AB" & j).Value = .Range("A" & i).Value Then
        x = 1
        Exit For
        End If
        Next j
    If x = 0 Then
    .Range("A" & i & ":W" & i).Copy
    Sheets("Restant").Range("A" & i).PasteSpecial Paste:=xlValues
    Application.CutCopyMode = False
    End If
    End If
    Next i
    End With
    End Sub
    @+
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  4. #4
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    sinon par la méthode find ca devrait ressembler a ca (je connais pas tes hypothèses de départ donc j'ai fait sans vérifier)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
        i = 3
        Do while Sheets("LISTE").Cells(i, 1) <> ""
     
            If Sheets("LISTE").Columns("AB:AB").Find(What:=Sheets("LISTE").Cells(i, 1)) Is Nothing Then
                Sheets("LISTE").Range("A" & i & ":W" & i).Copy
                Sheets("Restant").Range("A" & i).PasteSpecial
            end if
     
            i = i+1
        Loop
    edit une erreur de copié collé réctifiée
    Da vinci Code....


    Code??? qui a dit Code?

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Merci les gars!!!

    çà à l'air de marcher

    Mais c'est juste qu'il copie et colle exactement à la initiale dans l'autre feuille
    Comment je peux les disposer a partir de la ligne 3 par exemple et surtout les un à la suite des autre?

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonjour
    Plus simple à tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Màjour()
    Dim rngAB As Range, cell As Range
    Set rngAB = Range("AB1:" & Cells(Rows.Count, 28).End(xlUp).Address)
      For Each cell In Range("titeur")
        If IsError(Application.Match(cell, rngAB, 0)) Then
           Range("AB65536").End(xlUp)(2).Resize(1, 33) = cell.Resize(1, 23).Value
           End If
       Next
    End Sub
    Abed_H

  7. #7
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    en fait il fait bien la copie dans la feuille ("restant")
    Mais c'est diposé avec des décalages de lignes
    Et j'aimerais les mettre les uns à suite des autres...

  8. #8
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Je pense devoir rajouter à paste spécial une condition de mise en forme!!!

  9. #9
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    si tu relis ton code, il copie les cellule à la ligne i de ta premiere feuille à la ligne i de la deuxieme....

    il faut que adapte... c'est ce que je te demandais tout a l'heure.... tu ne nous dit pas tes hypothèses de travail et on peut pas deviner.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        i = 3
        Do while Sheets("LISTE").Cells(i, 1) <> ""
     
            If Sheets("LISTE").Columns("AB:AB").Find(What:=Sheets("LISTE").Cells(i, 1)) Is Nothing Then
                Sheets("LISTE").Range("A" & i & ":W" & i).Copy
                h = 2
                Do while Sheets("Restant").Cells(h,1) <> ""
                    h = h +1
                Loop
                Sheets("Restant").Range("A" & h+1).PasteSpecial
            end if
     
            i = i+1
        Loop

    La boucle do while sur h devrait t'aider a trouver la derniere ligne non vide. Et donc tu n'as plus qu'a copier dans la cellule suivante (vide donc)

    Voila la prochaine fois un peu plus d'information utiles seraient les bienvenues car quitte a tout faire autant tout donner
    Da vinci Code....


    Code??? qui a dit Code?

  10. #10
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Oui dslé j'ai pas été très explicite!!!

    Bon en fait je viens de tester mais apparrement il copier que la derniere ligne maintenant.
    Donc le parcous se fait bien mais il colle que la derniere ligne passée en revue!!

  11. #11
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     i = 3
        Do while Sheets("LISTE").Cells(i, 1) <> ""
     
            If Sheets("LISTE").Columns("AB:AB").Find(What:=Sheets("LISTE").Cells(i, 1)) Is Nothing Then
                Sheets("LISTE").Range("A" & i & ":W" & i).Copy
                h = 3
                Do while Sheets("Restant").Cells(h,1) <> ""
                    h = h +1
                Loop
                Sheets("Restant").Range("A" & h).PasteSpecial
            end if
     
            i = i+1
        Loop
    Corrections effectuées j'avais pas tout vérifié

    par contre j'ai fixé arbitrairement la valeur de h de départ a 3... donc il commencera a vérifier la validité des cellules de ta page "restant" a partir de la 3eme ligne
    Da vinci Code....


    Code??? qui a dit Code?

  12. #12
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Re,

    Il n'est pas vraiment nécessaire de refaire une boucle pour trouver la première ligne vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Restant").Range("A65535").End(xlUp)(2).PasteSpecial
    Donc si tu utilises la proposition de Many, ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    i = 3
        Do while Sheets("LISTE").Cells(i, 1) <> ""
     
            If Sheets("LISTE").Columns("AB:AB").Find(What:=Sheets("LISTE").Cells(i, 1)) Is Nothing Then
                Sheets("LISTE").Range("A" & i & ":W" & i).Copy
                Sheets("Restant").Range("A65535").End(xlUp)(2).PasteSpecial
            end if
     
            i = i+1
        Loop
    LES FAQ OFFICE - LES COURS OFFICE - LES COURS EXCEL - LES LIVRES OFFICE - SOURCES VBA - ATELIER BRICOLAGE VBA

    Lorsque votre problème est solutionné, pensez à le signaler en cliquant sur le bouton au bas de la discussion.

  13. #13
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    chui daccord avec fring

    pis on peut meme aller plus loin pour simplifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Macro1()
    i = 3
        Do While Sheets("LISTE").Cells(i, 1) <> ""
     
            If Sheets("LISTE").Columns("C:C").Find(What:=Sheets("LISTE").Cells(i, 1)) Is Nothing Then
                Sheets("LISTE").Range("A" & i & ":B" & i).Copy
                Sheets("Restant").Columns("A:A").End(xlUp).Insert
            End If
     
            i = i + 1
        Loop
     
    End Sub
    nah
    Da vinci Code....


    Code??? qui a dit Code?

  14. #14
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Bonjour
    si j'ai bien compris je pense que ce code devrait faire l'affaire sans "Copy & Paste ect...."
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Màjour()
    Dim rngAB As Range, cell As Range
    Set rngAB = Range("AB1:" & Cells(Rows.Count, 28).End(xlUp).Address)
      For Each cell In Range("titeur")
        If IsError(Application.Match(cell, rngAB, 0)) Then
           Sheets("Restant").Range("AB65536").End(xlUp)(2).Resize(1, 33) = cell.Resize(1, 23).Value
           End If
       Next
    End Sub
    Abed_H

  15. #15
    Membre actif Avatar de Many31
    Profil pro
    Inscrit en
    Février 2007
    Messages
    198
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 198
    Points : 210
    Points
    210
    Par défaut
    ouaiiiiis un keupain qui veut jouer à "noyer un débutant dans des codes qui font tous la meme chose"....

    keupain george

    Cells(Rows.Count, 28) ca si tu regarde en pas a pas... ca vaut Cells(65536,28) en gros.... AB65536

    Range("AB1:" & Cells(Rows.Count, 28).End(xlUp) ==> Range("AB1:AB65536").End(xlUp)

    ca me rappel qq chose

    heuuuu au final.... c'est moi ou tu test les 65536 cellules d'une collone pour au final ne pas faire un copié collé... mais juste faire un =
    tit cachotier tu as un BlueGene à la maison

    faut savoir s'adapter a la demande... ca sert a rien d'envoyer les char soviètique pour capturer un lapin
    Da vinci Code....


    Code??? qui a dit Code?

  16. #16
    Futur Membre du Club
    Inscrit en
    Février 2008
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Oui çà m'a l'air niquel
    Merci à tous
    C'est excellent !!! ;-)

  17. #17
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 467
    Points : 493
    Points
    493
    Par défaut
    Ps :pour Many31 Mon petit c'est normal ,à l'age de 24 ans en dis n'importe quoi .! tu as oublier que c'est un forum d'echange d'idées
    Bonne journée.
    Abed_H

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

Discussions similaires

  1. [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
  2. 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
  3. [Excel] comparaison colonnes
    Par ostro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 02/02/2006, 12h50
  4. [VB.NET] [excel] Pb remplir colonne excel
    Par mikolirto dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/04/2005, 14h55
  5. [OLE Excel] Récupérer une colonne d'un coup
    Par Nemerle dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/05/2004, 15h56

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