Choix liste déroulante -Saisie automatique dans tableau

Bonjour,

Je suis un peu perdue.. j'ai fait plusieurs listes déroulantes avec saisie semi-automatique (tableau vert dans la feuille "Comparaison") et lorsque je vais indiquer un résultat dans chacune des lignes, j'aimerais que ce résultat soit automatiquement recopié dans la colonne correspondante (feuille "Tableau"). Par exemple, si dans la liste déroulante je choisis acétamipride, le résultat indiqué sera directement réécrit dans la colonne acétamipride de la feuille "tableau". Si je choisis autre chose, le résultat sera indiqué dans une autre colonne.

Je vous envoie le fichier en zip pour que ce soit plus simple

Merci beaucoup !

33pesticides2.zip (219.77 Ko)

Bonjour Mimilendo, bonjour le forum,

Il faut que tu évites absolument les Select qui ne font que ralentir l'exécution du code. Prend aussi l'habitude d'utiliser des variables, de les déclarer et de les définir. Cela semble être plus long à coder mais tu n'imagines pas après le temps que tu gagnes par la suite.

je te propose le code ci-dessous qui fait tout au bouton Enregistrer. Pense à sélectionner les bonnes valeurs dans les différentes listes déroulante et à écrire le résultat avant de cliquer ...

Le code commenté :

Sub Copiercoller()
Dim C As Worksheet 'déclare la variable C (onglet Comparaison)
Dim T As Worksheet 'déclare la variable T (onglet Tableau)
Dim DEST As Range 'déclare la variable DEST (cellule de DESTination)
Dim LI As Integer 'déclare la variable LI (LIgne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim I As Byte 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim COL As Integer 'déclare la variable COL (COLonne)

Set C = Sheets("Comparaison") 'définit l'onglet C
Set T = Sheets("Tableau") 'définit l'onglet T
Set DEST = T.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0) 'définit la cellule de destination DEST
LI = DEST.Row 'définit la ligne LI
C.Range("E2:E9").Copy 'copie la plage E2:E9
DEST.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=True 'renvoie dans DEST la plage transposée
TV = C.Range("D10:E25") 'définit le tableau des valeurs TV
For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
    If TV(I, 2) <> "" Then 'condition : si la valeur ligne I colonne 2 de TV n'est pas vide
        Set R = T.Rows(1).Find(TV(I, 1), , xlValues, xlWhole) 'définit la recherche R (recherche dans la ligne 1 de l'onglet T la valeur entière de la donnée ligne I colonne 1 de TV)
        If Not R Is Nothing Then COL = R.Column ''si il existe au moins une occurrence trouvée, définit la colonne COL de la première occurrence trouvée
        T.Cells(LI, COL).Value = TV(I, 2) 'renvoie dans la cellule ligne LI colonne COL de l'onglet T la valeur de la donnée ligne I colonne 2 de TV
    End If 'fin de la condition
Next I 'prochaine ligne de la boucle
End Sub

Merci (encore une fois), je prends note pour ces conseils

Rechercher des sujets similaires à "choix liste deroulante saisie automatique tableau"