Comparaison en vba

Bonjour,
je dois comparer la valeur des cellules d'une colonne et copier coller dans un autre fichier le contenu de la ligne lorsqu'il y a correspondance mais je n'arrine pas a programmer cette comparaison(oui je debute mince)
voici ma macro qui je vous rassure et juste un raccourci de ce que je doit faire

Private Sub CommandButton1_Click()

Range("a1").Select
Do While ActiveCell.Value <> ""
ActiveCell.Offset(1, 0).Range("a1").Select
If (Range("a1") = 7411) Then
Selection.Copy
Range("a8").Select
Selection.Paste
End If
Loop
ActiveCell.Offset(1, 0).Range("a1").Select

End Sub

quelqu'un peut il m'aider svp !! je craque lol
merci d'avance
Configuration: Windows XP
Internet Explorer 6.0

11 réponses

  1. bonjour,

    essaies ça :

    If (Range("A1").value = 7411) Then
    1. merci pour ton aide c'est sympa de ta part
      j'ai trouvé ce moyen qui semble marcher mais j'ai un nouveau souci avec ma boucle.
      je souhaite coller et descendre de 3 ligne pour y coller la valeur suivante et ainsi de suite mais la ma boucle colle ,descend de 3 ligne mais reviens au popint de depart et colle par dessus.
      aurait tu une idée ?
      d'avance merci j'ai commencé depuis moins d'une semaine et je ne maitrise pas grand chose
    2. @zefrivate Sub CommandButton1_Click()

      Range("a1").Select
      ActiveCell.Offset(1, 0).Range("a1").Select
      Dim I As Long
      Dim Plage As Range
      Set Plage = Range("a2:a" & Range("a2").End(xlDown).Row)
      For I = Plage.Cells.Count To 1 Step -1
      If Plage.Cells(I).Value = 7411 Then
      Do While ActiveCell.Value <> ""
      Plage.Cells(I).EntireRow.Cut
      Range("a10").Select
      ActiveSheet.Paste
      Range("a13").Select
      Loop

      End If
      MsgBox ("ok")
      Next

      End Sub
  2. Il me semble que cette réaction est normale car tu "figes" la ligne en codnat A10 ou A13 alors qu'il faudrait que cette valeur évilue aussi.
    1. bsr
      oui j'avais remarqué ce soucis mais comment faire ,ja'i essayé avec ceci mais pas de résultats ,je continue de chercher
      merci pour tes reponses
      dim cell
      cel = ActiveCell.Address
    2. @zefsi je comprend bien, tu veux que le résultat soit 3 ligne plus bas que la ligne courante.

      donc si la ligne courante est "ciblée" par i
      la ligne voulue est i + 3

      donc
      j = I + 3
      at à la place de A13 tu mets range("A"+cstr(j)).select

      tu calcules j en fonction de l'endroit où tu veux faire le "coller"
    3. @gihellerc bon ca fonctionne merci de ton aide
      j'ai neanmoins une derniere question :
      j'ai creer un bouton mais je dois cliquer pour envoyer chaque boucle ,comment faire pour que les boucles s'enchaine a la suite.
      encore mille fois merci!!

      Private Sub CommandButton1_Click()

      Sheets("feuil1").Select
      Range("a1").Select
      Dim cell
      Dim I As Long
      Dim Plage As Range
      Set Plage = Range("a2:a" & Range("a2").End(xlDown).Row)
      For I = Plage.Cells.Count To 1 Step -1
      If Plage.Cells(I).Value = 7411 Then
      Do While ActiveCell.Value <> ""
      Plage.Cells(I).EntireRow.Cut
      Sheets("feuil2").Select
      cel = ActiveCell.Address
      ActiveSheet.Paste
      ActiveCell.Offset(3, 0).Select
      Loop

      End If

      Next

      End Sub
    4. @zef--
      JL,  m'enfin c'est juste mon avis @+
      se faire aider, n'est pas faire faire son travail
  3. voila pour conclure comment j'ai resolu le pb de boucle encore merci a toi giheller pour tes aides successives.

    Private Sub CommandButton1_Click()

    Sheets("feuil1").Select
    Range("a1").Select
    Dim cell
    Dim I As Long
    Dim Plage As Range
    Set Plage = Range("a2:a" & Range("a2").End(xlDown).Row)
    For I = Plage.Cells.Count To 1 Step -1

    If Plage.Cells(I).Value = 7411 Then
    Do While ActiveCell.Value <> ""
    Plage.Cells(I).EntireRow.Cut
    Sheets("feuil2").Select
    cel = ActiveCell.Address
    ActiveSheet.Paste
    ActiveCell.Offset(3, 0).Select

    Loop
    End If

    Sheets("feuil1").Select

    Next

    End Sub

    a bientot sur le site car je debute et j'ai encore tout a apprendre!! lol
    1. Mon message 8 est vide ja'i dû zapper qquechoe ! lol
    2. @gihellerpas grave lol merci quand meme pour les autres reponses.
      j'ai d'ailleurs une autres questions stp,dans mon programme actuel je copie la ligne ou se trouve 7411

      plage.cells(i).entirerow.cut

      mais e voudrais copier la ligne au dessus et celle en dessous en meme temps,j'ai essayé de remplacer par

      activecell.offset(-1,1).range(a1,j7).select
      apllication.cutcopymode=false
      selection.copy

      mais le prog bug sur selection copy

      aurait tu une idée ou quelqu'un d'autres sinon

      merci d'avance
  4. j'ai modifié en enlevent (a1,j7)mais ca ne marche pas ,j'ai fait quelque recherche mais la je bloque
    Private Sub CommandButton1_Click()

    Sheets("feuil1").Select
    Range("a1").Select
    Dim cell
    Dim I As Long
    Dim Plage As Range
    Set Plage = Range("a2:a" & Range("a2").End(xlDown).Row)
    For I = Plage.Cells.Count To 1 Step -1

    If Plage.Cells(I).Value = 7411 Then
    Do While ActiveCell.Value <> ""
    activecell.offset(-1,1).range("a,j").select bloque ici
    apllication.cutcopymode=false
    selection.copy
    Sheets("feuil2").Select
    cel = ActiveCell.Address
    ActiveSheet.Paste
    ActiveCell.Offset(3, 0).Select

    Loop
    End If

    Sheets("feuil1").Select

    Next

    End Sub
    1. bonsoir,
      non c'est pas ça range se code a1:j7 mais là on prend plusieurs lignes et cellules
  5. bjr
    oui en faite je veux selectionner une plage de cellule(une ligne au dessus une ligne en dessous de 7411 )pour copier coller l'ensemble sur la feuille 2 mais je n'y arrive pas comme ca.a moins de les copier coller une par une mais le programme risque d'etre lourds .
    cdlt
    1. a1:j7 cela donne 10 colonnes et 7 lignes, (colonnes A à J, lignes 1 à 7)
  6. a ok c'est pour ca qu'il me copier 7 lignes je ne savais pas
    bon maintenant comme ca j'arrive a trouver 7411 et a copier la ligne au dessus, la ligne trouvé et celle en dessous
    mais je dois maintenant ajouté une variable qui saurait se reperer pour le faire a l'endroit trouvé

    Private Sub CommandButton1_Click()

    Sheets("feuil1").Select
    cel = ActiveCell.Address

    Dim cell
    Dim I As Long
    Dim Plage As Range
    Set Plage = Range("a2:a" & Range("a2").End(xlDown).Row)
    For I = Plage.Cells.Count To 1 Step -1

    If Plage.Cells(I).Value = 7411 Then
    Do While ActiveCell.Value <> ""
    Range("a1:j3").Cut "ici je copie uniquement a1:j7"

    Sheets("feuil2").Select
    cel = ActiveCell.Address
    ActiveSheet.Paste
    ActiveCell.Offset(3, 0).Select

    Loop
    End If

    Sheets("feuil1").Select

    Next

    End Sub

    le tableau peut ressembler a cela

    7459
    7486
    7411 12 12 15
    7896
    7963
    7411 15 25

    etc
    1. lol je ne comprends pas ça :
      mais je dois maintenant ajouté une variable qui saurait se reperer pour le faire a l'endroit trouvé
      1. oui je me suis peut etre mal exprimé,je voudrais pouvoir copier les 3 lignes lorsque je trouve 7411 mais en faisant comme je fait actuellement dans mon prog c ame copie les 3 premieres ligne de la feuille 1
        c'est ^pour cela que je voudrais savoir si c'est possible d'ajouter une variable
        tel que range("A:J").select
        ou alors dit moi si je suis a coté de la plaque lol,il ne me reste que ca a regler et mon prog et fini
        cdlt
        1. encore moi,

          range("A:J").select

          ne crée pas une variable mais sélectionne des cellules
          si tu veux créer une varaible je te donne un exemple :
          mettre dans une vairaible dont le nom est toto le contenu de la cellule A1 tu écris
          toto = range("A1").value
      2. c bon tout est arrangé,ca marche
        merci pour tout
        ps;voila le résultat
        Private Sub CommandButton1_Click()

        Sheets("feuil1").Select
        Range("a1").Select
        Dim cell
        Dim I As Long
        Dim Plage As Range
        Set Plage = Range("a2:a" & Range("a2").End(xlDown).Row)
        For I = Plage.Cells.Count To 1 Step -1

        If Plage.Cells(I).Value = 7411 Then
        Do While ActiveCell.Value <> ""
        Plage.Cells(I).Offset(-1, 0).Range("a1:j3").Cut
        Sheets("feuil2").Select
        cel = ActiveCell.Address
        ActiveSheet.Paste
        ActiveCell.Offset(3, 0).Select

        Loop
        End If

        Sheets("feuil1").Select

        Next

        End Sub

        si ca peut aider quelqu'un desormais !!
        1. bsr
          je voudrais a la place de copier tant que la ligne <>0
          indiqué une ligne ex200 comme ligne de fin de controle
          est ce possible car j'ai des cellules vides entre mes donné mais je ne peux les supprimer
          merci