Code VBA pour modifier des listes deroulantes

15book1.xlsx (15.28 Ko)

Bonjour a tous,

Premierement desole pour le manque d'accent dans mes messages, mais je n'ai pas de clavier francais a m disposition...

Je n'ai decouvert le VBA que tres recement, et je galere donc sur des choses qui peuvent sembler basique^^'

Mon probleme est le suivant :

J'ai sur des feuilles differentes (Atelier 1,2,3) des listes deroulantes reliees a des valeurs sur la feuille "Liste Produit". Dans ma feuille "Global" je cree un UserForm et le but est de modifier les valeurs des listes deroulantes suivant celle selectionnee dans ce UserForm (exemple : je selectionne S1 avec le UserForm, toutes les listes deroulantes se mettent a jour pour donner la valeur S1).

Cependant, j'ai besoin qu'il soit toujours possible de selectionner les valeurs directement dans ces listes deroulantes lorsque l'on retourne sur ces feuilles...

Je joins l'excel. Merci pour votre aide !

Bonjour

Votre fichier en retour pour test

j'ai remplacé le bouton sur votre feuille Global et supprimé les espaces dans le nom des feuilles.

...Evitez toujours les espaces dans le nom des feuilles qui peuvent provoquer un souci en VBA.

12book2.xlsm (24.45 Ko)

Cordialement

Ah merci beaucoup !

Pour un soucis de comprehension, est-il preferable de declarer ses macros dans un module ou dans une worksheet directement ?

J'ai juste du mal a comprendre votre variable dlg :

dlg = .Range("F" & .Rows.Count).End(xlUp).Row ComboBox1.List = .Range("F4:F" & dlg).Value

Et est-ce que l'expression :

Private Sub ComboBox1_Change() For i = 1 To Sheets.Count If Left(Sheets(i).Name, 7) = "Atelier" Then Sheets(i).Range("B1") = ComboBox1.Value Next i End Sub

Serait equivalent a (pour le chargement des valeurs dans la ComboBox) :

Private Sub UserForm_Initialize() For i = 4 To 9 ComboBox_Product.AddItem Sheets("Liste Produit").Cells(i, 6) Next End Sub

Merci !

PS : Je n'arrive pas a inserer un fichier .xlsm dans mon message.

Bonjour

Pour un soucis de comprehension, est-il preferable de declarer ses macros dans un module ou dans une worksheet directement ?

Vous pouvez mettre les codes dans votre feuille ou dans un module. Pour ma part je préfère mettre le strict nécessaire dans les feuilles et mettre les macros dans un module. Cela évite les redondances de code dans certaines applications (exemple faire un tri ou une couleur) et surtout de perdre le code si par exemple vous supprimez une feuille. Dans le module il sera toujours présent et cela est plus facile à gérer.

J'ai juste du mal a comprendre votre variable dlg :

J'ai utilisé la variable dlg pour repérer la dernière ligne dans la colonne F. Si vous rajoutez des données elles seront directement prises en compte dans la combo.

Le code que vous donnez "for i = 4 to 9 ...." est effectivement équivalent à ce que je vous ai proposé pour le chargement de la combo.

Notez que l'on est pas obligé d'utiliser une variable c'est juste que le code est plus lisible.

Et est-ce que l'expression :

Private Sub ComboBox1_Change()

Serait equivalent a (pour le chargement des valeurs dans la ComboBox)

Non ce code sert juste à mettre à jour les feuilles selon le choix ou changement effectué dans la combo.

Si questions ou que je ne suis pas assez explicite n'hésitez pas

Cordialement

Merci beaucoup pour vos explications ! Pour etre bien sur, la boucle With permet de ne pas reecrire Sheets("Liste Produit"), qui sera alors appellee via le point en debut de Range, c'est bien ca ?

J'aurais aussi une autre problematique : pour chacun des produits, il existe une valeur Time dans chacune des Feuilles excel. Serait-il possible via VBA de lancer tous les choix des listes deroulantes et de stocker les resultats ? Je ne sais pas si c'est tres clair

Ici les donnees sont simplifiees et proviennent d'un tableau cree pour ce cas, je souhaiterais me baser sur les donnees Time des Feuilles excel.

10test1.xlsx (16.95 Ko)

Merci pour votre temps !

Re

Merci beaucoup pour vos explications ! Pour etre bien sur, la boucle With permet de ne pas reecrire Sheets("Liste Produit"), qui sera alors appellee via le point en debut de Range, c'est bien ca ?

Exact. Par le passé on disait que cela permettait aussi au code de s'exécuter plus rapidement. Bon cela reste à voir aujourd'hui puis à vérifier.

J'aurais aussi une autre problematique : pour chacun des produits, il existe une valeur Time dans chacune des Feuilles excel. Serait-il possible via VBA de lancer tous les choix des listes deroulantes et de stocker les resultats ?

Oui mais en fonction de quelle valeur ? La valeur B1 qui se trouve dans chaque feuille et / ou la valeur en A1 de la feuille Global?

Il faudrait peut être avoir un fichier plus complet pour mieux analyser car ici on ne voit qu'un seul résultat en ligne 4.

Cordialement

Au final j'ai reussit a trouver en modifiant votre code pour pouvoir afficher toutes les valeurs Time de chaque Atelier :

Sub collection() Dim dlg As Integer With Sheets("Liste_Produit") dlg = .Range("F" & .Rows.Count).End(xlUp).Row For i = 4 To dlg For j = 1 To Sheets.Count If Left(Sheets(j).Name, 7) = "Atelier" Then Sheets(j).Range("B1") = .Range("F" & i).Value Sheets("Global").Cells(5 + i, 3 + j) = Sheets(j).Range("C2").Value Next j Next i End With End Sub

Cependant pour le stockage des donnees obtenues, c'est loin d'etre optimal , si possible j'aimerais les stocke dans une PivotTable.

Les Valeurs recherchees sont dans les cellule C2 de chaque Feuille Atelier.

12test1.xlsx (17.29 Ko)

Bonjour

Possible d'avoir le fichier avec les macros ?? là il est avec extension xlsx donc sans les macros.

Attention avec votre macro que vous appelez Collection. Ce nom fait partie des instructions VBA excel et vous aurez un souci si on utilise cette instruction. Mon conseil est que vous choisissez un autre nom.

Crdlt

Bonjour,

Desole du retards, je n'avais pas mon ordi avec moi... Je ne peux pas joindre un fichier .xlsm, cela me met 'Erreur HTTP'... C'est pour cela que je copie les codes.

Merci en outre pour l'indication sur le nom Collection

Re

Ok bizarre votre souci ou alors votre fichier est trop lourd...

Mettez le sur www.cjoint.com puis mettez ici le lien qui vous sera donné.

Cordialement

Bon j'espere que ca va marcher ce coups-ci !

Le lien cijoint :

Merci pour votre aide

Bonjour

Ok pour le fichier (30 k). Je ne vois pas pourquoi vous ne pouviez pas le poster ici...

Sinon je vois que le code Collect_data rapatrie des données dans la feuille globale (vous avez modifié ce que je vous avait donné), pourquoi mettez vous ces données dans cette feuille ?

Si je comprends on doit avoir en ligne 4, les time (colonne B à D) de chaque feuille ? Juste ou pas ?

Autre question : pourquoi la valeur en A1 dans cette feuille globale ?

En fait j'ai besoin que ces donnees soient collectees sur cette feuille Global.

Le but est effectivement d'avoir les time de chaque feuille en ligne 4. Cependant entre temps j'ai reussit a le faire, mais il me faudrait un tableau recapitulative de tous les times pour chaque product et chaque atelier... C'est ce que j'essaye d'obtenir avec la procedure collect_data.

Re

Le but est effectivement d'avoir les time de chaque feuille en ligne 4. Cependant entre temps j'ai reussit a le faire, mais il me faudrait un tableau recapitulative de tous les times pour chaque product et chaque atelier...

En ligne 4 vous voulez avoir les times de chaque feuille sur base de quoi ? La cellule A1 de la feuille Global

Votre tableau sur la feuille global en D9 est identique à celui de la feuille List produits. Quel est l'interet et pourquoi le mettre à cet endroit de la feuille ?

Désolé de mes questions mais je ne comprends pas trop la finalité

En realite le fichier sur lequel je travaille est beaucoup plus gros, les donnees du tableau de la feuille List produits n'existe pas normalement ^^' elles sont juste la pour la construction du modele du petit fichier Test 1

Re

Ah évidemment si on n'a pas le vrai fichier cela n'aide pas du tout et ce, d'autant que vous ne donnez pas réponse à ma question.

Puis je ne comprends pas non plus pourquoi vous choisissez de mettre une valeur avec la combobox de l'USF et dans votre code collect_Data vous changez les valeurs de la liste déroulante pour récupérer un tableau en feuille global.

Mais au vu de ce que vous venez d'écrire, votre code Collecta-data est ce que vous cherchez comme résultat non ?

Désolé mais faute d'explications et d'un vrai fichier je ne vois pas comment vous aider

Bonjour

Au final la procedure Collect_data me donne ce que je veux, mais j'aimerais que cela s'affiche dans une Pivot Table, (avec en-tete, etc), pour avoir quelque chose d'un peu plus beau

En fait c'est juste une question de mise en forme

Re,

Alors faites la macro en reprenant aussi les valeurs S1, Se1, ... pour avoir un tableau comme dans la feuille liste des produits, puis faites votre TCD avec les outils excel (donc sans macro). Il suffira que la macro mette à jour la feuille global et le TCD existant pourra être mis à jour

Crdlt

Oui effectivement ce sera plus simple de faire le TCD directement dans la feuille

Merci en tout cas !

Rechercher des sujets similaires à "code vba modifier listes deroulantes"