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. 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
    1. 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. 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. 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. 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. 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)
          2. 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
          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. 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
          5. 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