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
    0
    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
      0
    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
      0
  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.
    0
    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
      0
    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"
      0
    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
      0
    4. @zef--
      JL,  m'enfin c'est juste mon avis @+
      se faire aider, n'est pas faire faire son travail
      0
  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
    0
    1. Mon message 8 est vide ja'i dû zapper qquechoe ! lol
      0
    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
      0
  4. a priori je ne verrais que le range a1,j7 comme chose étrange
    0
    1. 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
      0
      1. bonsoir,
        non c'est pas ça range se code a1:j7 mais là on prend plusieurs lignes et cellules
        0
    2. 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
      0
      1. a1:j7 cela donne 10 colonnes et 7 lignes, (colonnes A à J, lignes 1 à 7)
        0
    3. 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
      0
      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é
        0
        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
          0
          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
            0
        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 !!
          0
          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
            0