Comparaison en vba

zef -  
 zef62 -
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. giheller
     
    bonjour,

    essaies ça :

    If (Range("A1").value = 7411) Then
    0
    1. zef
       
      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
      1. zef > zef
         
        rivate 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. giheller
     
    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. zef
       
      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
      1. giheller > zef
         
        si 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
      2. zef > giheller
         
        c 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
      3. giheller > zef
         
        --
        JL,  m'enfin c'est juste mon avis @+
        se faire aider, n'est pas faire faire son travail
        0
  3. zef
     
    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. giheller
       
      Mon message 8 est vide ja'i dû zapper qquechoe ! lol
      0
      1. zef > giheller
         
        pas 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. giheller
     
    a priori je ne verrais que le range a1,j7 comme chose étrange
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. zef
     
    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. giheller
       
      bonsoir,
      non c'est pas ça range se code a1:j7 mais là on prend plusieurs lignes et cellules
      0
  7. zef
     
    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. giheller
       
      a1:j7 cela donne 10 colonnes et 7 lignes, (colonnes A à J, lignes 1 à 7)
      0
  8. zef
     
    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
  9. giheller
     
    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
  10. zef
     
    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. giheller
       
      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
  11. zef
     
    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
  12. zef62
     
    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