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. 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. 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
      


      1. https://www.cjoint.com/c/JGukvKr8N7V

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

        Merci
        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. 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. Ne faut-il pas définir "C" ? Comment VBA peut savoir qu'il s'agit ici de cellule ?
            1. Cela marche nickel !!
              Merci Jordane pour ton aide.

              Bonne journée