Sélection de ligne avec condition

Résolu
Bonjour,

Je souhaite rentrer des données sur une ligne précise.
Concrètement il s'agit de faire une demande de gabarit.
Quand on clique sur 'valider la demande', les informations s'ajoutent sur la ligne du tableau correspondant au gabarit choisit.

Mon code doit donc chercher dans la colonne 'gabarit' la ligne ou se trouve le nom du gabarit sélectionné dans la demande et ajouter les information dans les colonnes de cette même ligne. Le beug se trouve à partir la ligne Range(Ligne, 4) = CaseQuantité.Value (ajouter l'information dans la colonne D de la ligne du gabarit sélectionné)

Mon code est le suivant :
Dim Rw As Range
Dim Ligne As Long
    
    For Each Cell In Sheets(Produit).Range("B5:B100")
        If Cell.Value = CaseGabarit.Value Then Ligne = Rw.Row
        
            Range(Ligne, 4) = CaseQuantité.Value
            Range(Ligne, 5) = CaseBesoin.Value
            Range(Ligne, 7) = CasePrio.Value
            Range(Ligne, 8) = CasePole.Value
            Range(Ligne, 9) = CaseDemandeur.Value
            Range(Ligne, 10) = CaseDate.Value
            Range(Ligne, 11) = CaseDélai.Value

            If CheckBoxUsure.Value = True Then
                Range(Ligne, 13) = CheckBoxUsure.Caption
            End If
        
            If CheckBoxCasse.Value = True Then
                Range(Ligne, 13) = CheckBoxCasse.Caption
            End If
        
            If CheckBoxQuantitéSup.Value = True Then
                Range(Ligne, 13) = CheckBoxQuantitéSup.Caption
            End If
        
            If CheckBoxNonConforme.Value = True Then
                Range(Ligne, 13) = CheckBoxNonConforme.Caption
            End If
    
            If CheckBoxEvolution.Value = True Then
                Range(Ligne, 13) = CheckBoxEvolution.Caption
            End If
        
            If CheckBoxAutreRaison = True Then
                Range(Ligne, 13) = CaseAutreRaison.Value
            End If
    Next


EDIT : Ajout des balises de code

Vous me seriez d'une grande aide !! Merci

8 réponses

  1. Cela marche nickel !!
    Merci Jordane pour ton aide.

    Bonne journée
    1. Modérateur
      Aucun souci avec ce code
       Dim Rw As Range
          Dim Ligne As Long
          
          For Each C In Sheets(Produit).Range("B5:B100")
              If C.Value = CaseGabarit.Value Then
                  Ligne = C.Row
              
                  Cells(Ligne, 4) = CaseQuantité.Value
                  Cells(Ligne, 5) = CaseBesoin.Value
                  Cells(Ligne, 7) = CasePrio.Value
                  Cells(Ligne, 8) = CasePole.Value
                  Cells(Ligne, 9) = CaseDemandeur.Value
                  Cells(Ligne, 10) = CaseDate.Value
                  Cells(Ligne, 11) = CaseDélai.Value
      
                  If CheckBoxUsure.Value = True Then
                      Cells(Ligne, 13) = CheckBoxUsure.Caption
                  End If
              
                  If CheckBoxCasse.Value = True Then
                      Cells(Ligne, 13) = CheckBoxCasse.Caption
                  End If
              
                  If CheckBoxQuantitéSup.Value = True Then
                      Cells(Ligne, 13) = CheckBoxQuantitéSup.Caption
                  End If
              
                  If CheckBoxNonConforme.Value = True Then
                      Cells(Ligne, 13) = CheckBoxNonConforme.Caption
                  End If
          
                  If CheckBoxEvolution.Value = True Then
                      Cells(Ligne, 13) = CheckBoxEvolution.Caption
                  End If
              
                  If CheckBoxAutreRaison = True Then
                      Cells(Ligne, 13) = CaseAutreRaison.Value
                  End If
              End If
          Next
          
      
      1. Ne faut-il pas définir "C" ? Comment VBA peut savoir qu'il s'agit ici de cellule ?
        1. Jordan,

          La premiere ligne avec Range :
          Range(Ligne, 4) = CaseQuantité.Value
          reste en erreur, je pensais qu'il fallait mett cells?

          Quand je modifie tout en cells c'est la 3eme ligne :
          Cells(Ligne, 7) = CasePrio.Value
          qui se met en erreur, je ne comprend pas pourquoi

          Vous n'utilisez pas le Rw après l'avoir mit en range, est-il utile de le mettre du coupe (1ere ligne)
          1. Modérateur
            Dim Rw As Range
            Dim Ligne As Long
                
                For Each C In Sheets(Produit).Range("B5:B100")
                    If C.Value = CaseGabarit.Value Then 
                        Ligne = C.Row
                    
                        Range(Ligne, 4) = CaseQuantité.Value
                        Range(Ligne, 5) = CaseBesoin.Value
                        Range(Ligne, 7) = CasePrio.Value
                        Range(Ligne, 8) = CasePole.Value
                        Range(Ligne, 9) = CaseDemandeur.Value
                        Range(Ligne, 10) = CaseDate.Value
                        Range(Ligne, 11) = CaseDélai.Value
            
                        If CheckBoxUsure.Value = True Then
                            Range(Ligne, 13) = CheckBoxUsure.Caption
                        End If
                    
                        If CheckBoxCasse.Value = True Then
                            Range(Ligne, 13) = CheckBoxCasse.Caption
                        End If
                    
                        If CheckBoxQuantitéSup.Value = True Then
                            Range(Ligne, 13) = CheckBoxQuantitéSup.Caption
                        End If
                    
                        If CheckBoxNonConforme.Value = True Then
                            Range(Ligne, 13) = CheckBoxNonConforme.Caption
                        End If
                
                        If CheckBoxEvolution.Value = True Then
                            Range(Ligne, 13) = CheckBoxEvolution.Caption
                        End If
                    
                        If CheckBoxAutreRaison = True Then
                            Range(Ligne, 13) = CaseAutreRaison.Value
                        End If
            
                  End if
                Next
            
            

            1. Modérateur
              Oh pardon
              J'ai repris ton code du forum désolé en effet il faut remplacer range par cells
            2. @jordane45Même en effectuant cette opération cela ne fonctionne pas. Ne faut il pas définir le "C" ?
          2. https://www.cjoint.com/c/JGukvKr8N7V

            Voici le fichier, il s'agit de la macro associée à l'Userform DemandeDeGabarit

            Merci
            1. Modérateur
              Bonjour,

              Ton souci.. c'est que tu as utilisé Range au lieu de Cells

              Cells(Ligne, 4)
              


              Par contre, dans ta boucle, éviter d'utiliser le mot "Cell" qui est proche de celui utilisé par Excel (Cells )pour cibler une cellule
              Remplace "Cell" par C dans la boucle
              For Each C In Sheets(Produit).Range("B5:B100")
                If C.Value = CaseGabarit.Value Then Ligne = Rw.Row