Excel/VBA - Créer un "UserForm" dynamique
Résolu/Fermé
A voir également:
- Excel/VBA - Créer un "UserForm" dynamique
- Tableau croisé dynamique - Guide
- Créer un compte google - Guide
- Créer un compte gmail - Guide
- Comment créer un groupe whatsapp - Guide
- Créer liste déroulante excel - Guide
4 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 753
Modifié par pijaku le 14/09/2010 à 08:39
Modifié par pijaku le 14/09/2010 à 08:39
Salut,
Voici les codes VBA te permettant de réaliser cela. Je les ai commenté pour plus de compréhension.
Ce code est à adapter, bien sur le nom de la feuille, des colonnes etc...
Et en prime un fichier exemple
Cordialement,
-- Il n'y a rien de tel qu'une question idiote, seulement une réponse idiote. A.Einstein --
Voici les codes VBA te permettant de réaliser cela. Je les ai commenté pour plus de compréhension.
'Cette procédure s'exécute lorsque s'initialise l'UserForm Private Sub UserForm_Initialize() 'Remplir la ComboBox1 sans doublons 'sources : 'http://www.excel-downloads.com/forum/83545-vba-remplir-une-combobox-sans-doublon.html Dim i As Integer For i = 1 To Sheets("Feuil1").Range("A65536").End(xlUp).Row ComboBox1 = Sheets("Feuil1").Range("A" & i) If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("Feuil1").Range("A" & i) Next i 'mise à zéro des contrôles ComboBox1 = "" ComboBox2.Clear Label1.Caption = "" Label2.Caption = "" End Sub 'Cette procédure s'exécute lorsque la valeur de Combobox1 change Private Sub ComboBox1_Change() 'remplir la ComboBox2 'Ici le test dit que si la donnée en colonne A = valeur combobox1 'Alors on insère la valeur contenue colonne B dans combobox2 'Et comme la Combobox1, on enlève les doublons... ComboBox2.Clear For i = 1 To Sheets("Feuil1").Range("B65536").End(xlUp).Row If Sheets("Feuil1").Range("A" & i) = ComboBox1.Value Then ComboBox2 = Sheets("Feuil1").Range("B" & i) If ComboBox2.ListIndex = -1 Then ComboBox2.AddItem Sheets("Feuil1").Range("B" & i) End If Next i ComboBox2 = "" Label1.Caption = "" Label2.Caption = "" End Sub 'Cette procédure s'exécute lorsque la valeur de Combobox2 change Private Sub ComboBox2_Change() Dim i As Integer For i = 1 To Sheets("Feuil1").Range("A65536").End(xlUp).Row 'Si le contenu de la col A est égal à Combobox1 If Sheets("Feuil1").Range("A" & i) = ComboBox1.Value Then 'Et si le contenu de la colonne B est égal à combobox2 If Sheets("Feuil1").Range("B" & i) = ComboBox2.Value Then Label1.Caption = Sheets("Feuil1").Range("C" & i).Value Label2.Caption = Sheets("Feuil1").Range("D" & i).Value End If End If Next i End Sub
Ce code est à adapter, bien sur le nom de la feuille, des colonnes etc...
Et en prime un fichier exemple
Cordialement,
-- Il n'y a rien de tel qu'une question idiote, seulement une réponse idiote. A.Einstein --
eriiic
Messages postés
24603
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
15 décembre 2024
7 250
14 sept. 2010 à 08:10
14 sept. 2010 à 08:10
Bonjour,
rapidement car je pars ou boulot.
Nomme une feuille 'Listes' et celle des données 'Datas'
Avec Listes!A1 qui contient l'article tu peux te fabriquer une liste des modèles avec :
Ensuite en te servant de l'index de sélection tu récupères (ou calcule, selon le choix fait) ton n° de ligne tu peux récupérer une donnée avec :
nom_de_la_feuille.cells(n°ligne,4) pour le prix par exemple
eric
rapidement car je pars ou boulot.
Nomme une feuille 'Listes' et celle des données 'Datas'
Avec Listes!A1 qui contient l'article tu peux te fabriquer une liste des modèles avec :
Sub fabListe() Dim shDatas As Worksheet, shListes As Worksheet, i As Long Set shDatas = Worksheets("Datas") Set shListes = Worksheets("listes") shListes.Range("2:65536").EntireRow.Delete For i = 2 To shDatas.[A65536].End(xlUp).Row If shDatas.Cells(i, 1) = shListes.[A1] Then 'soit inscription du n° de ligne dans datas 'shListes.[A65536].End(xlUp).Offset(1, 0) = i 'soit copie du modèle 'shDatas.Cells(i, 2).Copy Destination:=shListes.[A65536].End(xlUp).Offset(1, 0) 'soit copie de la ligne shDatas.Rows(i).EntireRow.Copy Destination:=shListes.[A65536].End(xlUp).Offset(1, 0) End If Next i End Sub
Ensuite en te servant de l'index de sélection tu récupères (ou calcule, selon le choix fait) ton n° de ligne tu peux récupérer une donnée avec :
nom_de_la_feuille.cells(n°ligne,4) pour le prix par exemple
eric
Merci bcp, Je pense que cela va bcp m'aider... j'ai essayer rapidement et ca repond a ce que je veux faire.
Merci ... merci... & merci
Merci ... merci... & merci
Bonjour,
Je recherche depuis plusieurs jours la solution VBA (novice) pour mon TCD.
Base externe de donnée qui se met à jour en cliquant sur Actualiser.
J'ai tout d'abord fait 2 TCD d'échéances sur le meme onglet : un Client l'autre Fournisseur. J'ai filtré à la semaine afin que l'on puisse suivre les règlements à réaliser ou à encaisser.
Je souhaiterai que les lignes de chacun des TCD dont les montants :
Somme de MontantDev=Somme de MontantRglDev (donc soldée) soient masquées.
J'ai trouvé beaucoup de forum pour masquer une cellule à 0 mais moi au contraire se sont celles que je veux conserver.
Exemple de mes TCD (qui ont tous les deux les mêmes champs
A B C
DateEchéance - Somme de MontantDev - Somme de MontantRglDev
15/07/2014
4118012000 122.74 € 122.74 € [LIGNE A MASQUER]
(Compte client ou Fournisseur) suivi des montants dû et réglé
16/07/2014 523 € - €
17/07/2014 1 300 € 500 €
Merci pour votre aide.
Je recherche depuis plusieurs jours la solution VBA (novice) pour mon TCD.
Base externe de donnée qui se met à jour en cliquant sur Actualiser.
J'ai tout d'abord fait 2 TCD d'échéances sur le meme onglet : un Client l'autre Fournisseur. J'ai filtré à la semaine afin que l'on puisse suivre les règlements à réaliser ou à encaisser.
Je souhaiterai que les lignes de chacun des TCD dont les montants :
Somme de MontantDev=Somme de MontantRglDev (donc soldée) soient masquées.
J'ai trouvé beaucoup de forum pour masquer une cellule à 0 mais moi au contraire se sont celles que je veux conserver.
Exemple de mes TCD (qui ont tous les deux les mêmes champs
A B C
DateEchéance - Somme de MontantDev - Somme de MontantRglDev
15/07/2014
4118012000 122.74 € 122.74 € [LIGNE A MASQUER]
(Compte client ou Fournisseur) suivi des montants dû et réglé
16/07/2014 523 € - €
17/07/2014 1 300 € 500 €
Merci pour votre aide.