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

11 réponses

Utilisateur anonyme
 
bonjour,

essaies ça :

If (Range("A1").value = 7411) Then
0
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
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
Utilisateur anonyme
 
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
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
Utilisateur anonyme > 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
zef > Utilisateur anonyme
 
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
Utilisateur anonyme > zef
 
--
JL,  m'enfin c'est juste mon avis @+
se faire aider, n'est pas faire faire son travail
0
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
Utilisateur anonyme
 
Mon message 8 est vide ja'i dû zapper qquechoe ! lol
0
zef > Utilisateur anonyme
 
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
Utilisateur anonyme
 
a priori je ne verrais que le range a1,j7 comme chose étrange
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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