Macro excel valeur dépendant de deux conditio

Qorcin -  
bacus13 Messages postés 30 Statut Membre -
Bonjour,
voila mon probleme,
je souhaiterai faire une macro VB permettant de selectionner une cellule dependant de deux conditions.
Par exemple une valeur de la colonne A (par exemple valeur 7) et la valeur associer dans la colonne B (dans ce cas le nombre "2") et copier la valeur de la colonne C associer (dans ce cas "1272550" ) sur une autre feuille?

Sample# Cycle # Time
1 1 1271650
2 1 1271800
3 1 1271950
4 1 1272100
5 1 1272250
6 2 1272450
7 2 1272550
8 2 1272700
9 2 1272900

Merci de vos réponses

A voir également:

6 réponses

bacus13 Messages postés 30 Statut Membre 8
 
Tout simplement avec des if :

For ligne = 0 to ....
If Range("A" & ligne).value = 7 And Range("B" & ligne).Value = 2 then
Range("C" & ligne).Copy
Sheets(..).Range(..).Select
ActiveSheet.Paste
End if
...
Next ligne
0
Qorcin
 
Merci pour votre réponse, mais voici la macro tel que vous me l'avez suggéréé :

Sub suppr()
For ligne = 0 To 63000
If Range("A" & ligne).Value = 7 And Range("C" & ligne).Value = 2 Then
Range("D" & ligne).Copy
Sheets(2).Range("A1").Select
ActiveSheet.Paste
End If
Next ligne
End Sub

et ca me mets error method range of object'_global failed?? pouvez vous m expliquer pourquoi?
desolé je suis novice
0
pilas31 Messages postés 1878 Statut Contributeur 647
 
Bonjour,

Il y a juste une petite erreur, il faut commencer à 1 et non pas à 0 ici :
For ligne = 1 To 63000

A+
0
bacus13 Messages postés 30 Statut Membre 8
 
à oui désolé :/
0
Qorcin
 
merci pilas!
mais mintenant j'ai une erreur au niveau de la ligne 5 (methode select range a échoué)?????

Sub suppr()
For ligne = 1 To 63000
If Range("A" & ligne).Value = 7 And Range("C" & ligne).Value = 2 Then
Range("D" & ligne).Copy
Sheets(2).Range("A1").Select
ActiveSheet.Paste
End If
Next ligne
End Sub
0
bacus13 Messages postés 30 Statut Membre 8
 
Sub suppr()
Dim ligne as long

With Sheets(1)
For ligne = 1 To 63000
If .Range("A" & ligne).Value = 7 And .Range("C" & ligne).Value = 2 Then
.Range("D" & ligne).Copy
Sheets(2).Select
Range("A1").Select
ActiveSheet.Paste
End If
Next ligne
End With

End Sub
0
Qorcin
 
Merci beaucoup!!!
tt marche nikel!!
0

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

Posez votre question
cousinhub29 Messages postés 1135 Date d'inscription   Statut Membre Dernière intervention   364
 
Bonjour,

Hiiiiiiiiii

Pourquoi continuer la boucle jusqu'à 63000.......??????

Euh, une méthode Find, plus FindNext????

Sub qorcin()
Dim FirstAddress As String
Dim C As Range
With Sheets("Feuil1").Columns(1)
    Set C = .Find(7, LookIn:=xlValues, LookAt:=xlWhole)
    If Not C Is Nothing Then
        FirstAddress = C.Address
        Do
            If C.Offset(, 1).Value = 2 Then
                C.Offset(, 2).Copy Sheets("Feuil2").Range("A1")
                Exit Do
            End If
            Set C = .FindNext(C)
        Loop While Not C Is Nothing And C.Address <> FirstAddress
    End If
End With
End Sub


Bonne journée
0
bacus13 Messages postés 30 Statut Membre 8
 
oui c'est vrai, ou alors mettre
ligne_max = Rows(63000).End(xlUp).row
For ligne = 1 to ligne_max ...
mais ça sert a rien de fair eun for jusqu'à 63000^^
0
cousinhub29 Messages postés 1135 Date d'inscription   Statut Membre Dernière intervention   364
 
Re-,

Effectivement, mais tu devrais sortir de la boucle, dès que tu as tes conditions de remplies...
Et également, évite les Select, cela fait gagner du temps....

Sub suppr()
Dim ligne as long

With Sheets(1)
    For ligne = 1 To [A65000].End(xlUp).Row
        If .Range("A" & ligne).Value = 7 And .Range("C" & ligne).Value = 2 Then
            .Range("D" & ligne).Copy Sheets(2).Range("A1")
            Exit For
        End If
    Next ligne
End With
End Sub


Bonne journée
0
bacus13 Messages postés 30 Statut Membre 8
 
au départ, je pensais qu'il voulait faire la copie pour toutes les lignes contenant...
Mais c'est vrai que s'il y a une seule cellule, il faut sortir de la boucle.
Je ne connaissais pas cette syntaxe pour le .Copy ! ^^
ou sinon on peut aussi faire (si il n'y a que la valeur qui nous interresse) :
Sheets(2).Range("A1").Value = .Range("D" & ligne).Value
0