Bonsoir à tous
Voila je cherche a mettre a jour un tableau avec des listes déroulantes ou liste de validation sachant que les données sont dans des feuilles différentes.
Même avec une macro je suis preneur
A l'avance merci
Phiphi
Bonsoir à tous
Voila je cherche a mettre a jour un tableau avec des listes déroulantes ou liste de validation sachant que les données sont dans des feuilles différentes.
Même avec une macro je suis preneur
A l'avance merci
Phiphi
Bonjour,
En remplaçant la combobox par une liste de validation tu pourrais utiliser la formule "indirect" couplet a un "rechercheH"
Code : Sélectionner tout - Visualiser dans une fenêtre à part =RECHERCHEH(B2;INDIRECT("'"&A3&"'!D2:F16");15;0)
Jérôme
Voici un code qui met à jour la liste de données d'un tableau Excel 2007 pour une liste de validation :
Comme l'évènement "_change" n'est pas très sélectif (pas du tout et il y a encore rien d'autre sous 2007), il faut tester avant d'agir.
ESVBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40 Private Sub Worksheet_Change(ByVal Target As Range) '--- Pour ajouter à la liste les noms Dim Rep As Integer If Target.Cells.Count > 1 Then Exit Sub 'Si plus d'une cellule sélectionnée If Target = "" Then Exit Sub 'Pour une cellule sélectionnée dans la colonne "M", colonne avec les validation If Not Application.Intersect(Target, Range("M:M")) Is Nothing And Target <> vbNullString Then 'Si le mot tapé n'est pas dans le te tableau 2007 des données et situé en B2:B6500 If Application.WorksheetFunction.CountIf(Range("B2:B6500"), Target) = 0 Then Application.EnableEvents = False 'Sécurité. 'Demande ce qu'il faut faire Rep = MsgBox("Le nom " & Chr$(34) & Target & Chr$(34) & _ " ne fait pas partie de la liste." & Chr$(13) & "Voulez-vous l'ajouter à la liste ?", _ vbYesNoCancel + vbQuestion, "Mot non reconnu") If Rep = vbCancel Then 'Si annulé, replace le texte original dans la cellule de validation Target = strOriginalEntry ElseIf Rep = vbNo Then 'Ne pas ajouter à la liste => ne fait rien Else 'Ajout le mot à la liste nommée "TabMateriel" Call AjouteLigneTableau(Target.Value) End If End If End If Application.EnableEvents = True End Sub Sub AjouteLigneTableau(Contenu As String) '>>>>>>>>>> Procédure de la FAQ modifiée <<<<<<<<<<<<<<<<<<<< Dim ListObj As ListObject 'Définit le tableau dans la feuille de calcul Set ListObj = Worksheets("LstMaterielDisponible").ListObjects("TabMateriel") 'Ajoute une ligne en premier ListObj.ListRows.Add 'Ajoute la valeur (ici une colonne) ListObj.Range(ListObj.ListRows.Count + 1, 1).Value = Contenu End Sub
Le fichier simple sans macro pour éviter les virus de macro et le code à ajouter dans la feuille VBA (Feuil3) ou "Saisie dans la liste de validation" :
Ca convient ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 Option Explicit Dim strValeurDOrigine As String Private Sub Worksheet_Change(ByVal Target As Range) '--- Pour ajouter à la liste les noms Dim Rep As Integer If Target.Cells.Count > 1 Then Exit Sub If Target = "" Then Exit Sub If Not Application.Intersect(Target, Range("M:M")) Is Nothing And Target <> vbNullString Then ' Cellule avec validation change If Application.WorksheetFunction.CountIf(Sheets("LstObjets").Range("B3:B6500"), Target) = 0 Then 'Nom nouveau Application.EnableEvents = False 'Sécurité 'Demande ce qu'il faut faire Rep = MsgBox("Le nom " & Chr$(34) & Target & Chr$(34) & _ " ne fait pas partie de la liste." & Chr$(13) & "Voulez-vous l'ajouter à la liste ?", _ vbYesNoCancel + vbQuestion, "Mot non reconnu") If Rep = vbCancel Then 'Si annulation de la saisie Target = strValeurDOrigine ElseIf Rep = vbNo Then 'Si on laisse tel quel => ne fait rien Else 'Ajout d'une nouvelle ligne au tableau Call AjouteLigneTableau(Target.Value) End If End If End If Application.EnableEvents = True 'Allow Events End Sub Sub AjouteLigneTableau(Contenu As String) Dim ListObj As ListObject 'Définit le tableau dans la feuille de calcul ATTENTION ECRIT EN DUR ICI PAS PASSE EN PARAMETRE Set ListObj = Worksheets("LstObjets").ListObjects("TabNoms") 'Ajoute une ligne ListObj.ListRows.Add 'Ajoute dans la dernière ligne. ListObj.Range(ListObj.ListRows.Count + 1, 1).Value = Contenu End Sub
ESVBA
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager