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
    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. 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. Cela marche nickel !!
              Merci Jordane pour ton aide.

              Bonne journée