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

6 réponses

  1. 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
    1. 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
    2. pilas31 Messages postés 1878 Statut Contributeur 648
       
      Bonjour,

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

      A+
      0
    3. bacus13 Messages postés 30 Statut Membre 8
       
      à oui désolé :/
      0
  2. 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
  3. 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
  4. Qorcin
     
    Merci beaucoup!!!
    tt marche nikel!!
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   383
     
    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
    1. 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
  7. cousinhub29 Messages postés 1114 Date d'inscription   Statut Membre Dernière intervention   383
     
    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
    1. 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