Remplissage automatique de champs suite séléction liste déroulante

Bonjour à tous,

Je souhaiterai pouvoir remplir automatiquement des champs suite à une saisie d'option (Oui/Non) dans une liste déroulante.

Lorsque je sélectionne "Oui" dans une de mes lignes en colonne E, est-il possible de répliquer ce choix sur toutes les lignes en colonne E du même client ?

D'avance merci pour votre aide (ça parait simple mais je pense qu'il faut passer par du VBA, et je n'ai aucune notion la dedans :/ )

Cordialement,

31test.xlsx (12.51 Ko)

Bonjour Opak, bonjour le forum,

La colonne E ne n'offre pas la possibilité Oui/Non. Veux-tu parler de la colonne D ? Dans quelle colonne répercuter le choix ?... C'est pas très clair !... Voire carrément Opak (si j'ose dire... Mais j'ose).

Bonjour,

C'est effectivement la colonne D (et non E... J'étais à l'ouest !)

Up !

Bonjour Opak, bonjour le forum,

Désolé j'avais zappé ! En pièce jointe ton fichier modifié avec une macro événementielle Change. En plus du Oui, si tu effaces une valeur dans la colonne D, le code efface aussi pour toutes les lignes de ce client. Si cela ne te convient pas il te suffira de supprimer les lignes repérées.

Le code :

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim CC As String 'déclare la variable CC (Code Client)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim I As Integer 'déclare la variable I (Incrément)

If Target.Column <> 4 Then Exit Sub 'si le changement a lieu ailleurs que dans la colonne 4, sort de la procédure
DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A
Select Case Target.Value 'agit en fonction de la valeur de la cellule modifiée
    Case "Oui" 'cas "Oui"
        Application.EnableEvents = False 'empêche les événementielle (pour ne pas tourner en boucle à chaque changement)
        CC = CStr(Target.Offset(0, -2).Value) 'définit le code client CC (converti en texte)
        For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
            'si la valeur de la cellule ligne I colonne 2 (convertie en texte) est égale au code client CC et si ce n'est pas ligne de la cellule modifiée, écrit "Oui" en colonne D
            If CStr(Cells(I, "B").Value) = CC And I <> Target.Row Then Cells(I, "D").Value = "Oui"
        Next I 'prochaine ligne de la boucle
        Application.EnableEvents = True 'autorise les événementielles

    '****************************************
    'partie à supprimer si ça ne convient pas
    Case "" 'cas où on efface la cellule
        Application.EnableEvents = False 'empêche les événementielle (pour ne pas tourner en boucle à chaque changement)
        CC = CStr(Target.Offset(0, -2).Value) 'définit le code client CC (converti en texte)
        For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
            'si la valeur de la cellule ligne I colonne 2 (convertie en texte) est égale au code client CC et si ce n'est pas ligne de la cellule modifiée, efface en colonne D
            If CStr(Cells(I, "B").Value) = CC And I <> Target.Row Then Cells(I, "D").Value = ""
        Next I 'prochaine ligne de la boucle
        Application.EnableEvents = True 'autorise les événementielles
    '****************************************

End Select 'fin de l'action en fonction de la valeur de la cellule modifiée
End Sub

Le fichier :

18opak-ep-v01.xlsm (19.93 Ko)

Bonjour,

Un grand merci pour ce retour rapide, cela réponds totalement à mes attentes.

Malheureusement j'ai un petit soucis, mon fichier original fait 190.000 lignes, et je pense qu'Excel n'est pas en mesure de prendre en compte cette macro avec autant de lignes, j'ai un message d'erreur indiquant une limite atteinte.

Cordialement,

Re,

On remplace partout dans le code Integer par Long. Mais, avec autant de lignes, la macro risque de prendre beaucoup de temps avant de finir son exécution...

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range) 'au changement dans l'onglet
Dim CC As String 'déclare la variable CC (Code Client)
Dim DL As Long 'déclare la variable DL (Dernière Ligne)
Dim I As Long 'déclare la variable I (Incrément)

If Target.Column <> 4 Then Exit Sub 'si le changement a lieu ailleurs que dans la colonne 4, sort de la procédure
DL = Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A
Select Case Target.Value 'agit en fonction de la valeur de la cellule modifiée
    Case "Oui" 'cas "Oui"
        Application.EnableEvents = False 'empêche les événementielle (pour ne pas tourner en boucle à chaque changement)
        CC = CStr(Target.Offset(0, -2).Value) 'définit le code client CC (converti en texte)
        For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
            'si la valeur de la cellule ligne I colonne 2 (convertie en texte) est égale au code client CC et si ce n'est pas ligne de la cellule modifiée, écrit "Oui" en colonne D
            If CStr(Cells(I, "B").Value) = CC And I <> Target.Row Then Cells(I, "D").Value = "Oui"
        Next I 'prochaine ligne de la boucle
        Application.EnableEvents = True 'autorise les événementielles

    '****************************************
    'partie à supprimer si ça ne convient pas
    Case "" 'cas où on efface la cellule
        Application.EnableEvents = False 'empêche les événementielle (pour ne pas tourner en boucle à chaque changement)
        CC = CStr(Target.Offset(0, -2).Value) 'définit le code client CC (converti en texte)
        For I = 2 To DL 'boucle sur toutes les lignes I de 2 à DL
            'si la valeur de la cellule ligne I colonne 2 (convertie en texte) est égale au code client CC et si ce n'est pas ligne de la cellule modifiée, efface en colonne D
            If CStr(Cells(I, "B").Value) = CC And I <> Target.Row Then Cells(I, "D").Value = ""
        Next I 'prochaine ligne de la boucle
        Application.EnableEvents = True 'autorise les événementielles
    '****************************************

End Select 'fin de l'action en fonction de la valeur de la cellule modifiée
End Sub
Rechercher des sujets similaires à "remplissage automatique champs suite selection liste deroulante"