Bonjour à toutes et à tous,
Question simple, réponse simple ?
En VBA je commence petit à petit à saisir la chose mais je n'ai pas encore la faciliter de comprendre mes erreurs.
Arriveriez vous à me guider pour que mon code soit fonctionnel ?
(Tout ceci est visible sur l'image 1 ci-jointe)
Le projet consiste à partir du bouton à cliquer "Ouverture base de données" sur l'Excel "Fiche coût construction.xls" apparaissent le "Userform1" que j'ai crée avec deux menus déroulants et un bouton à cliquer.
Le "combobox1" permet de choisir le type d'ouvrage disponible sur la plage M2 à O2
Le "combobox2" permet de choisir la région selon la disponibilité de la combobox1 qui choisira la plage M3 à M9 , N3 à N9 ou O3 à O9
Une fois les deux menus déroulants choisi, cliquer sur le bouton "Valider et fermer" qui permet de fermer le "Userform1" et ...*
(Tout ceci est visible sur l'image 2 ci-jointe)
...* d'ouvrir l'Excel "base données.xls" pour y chercher sur le bon onglet, la bonne plage de cellules contenant des liens à ouvrir.
Exemple pratique :
Je sélectionne sur la combobox1 --> "logements neufs" (disponible sur cellule M2)
Je sélectionne sur la combobox2 --> "IDF" (disponible sur cellule M3)
Je clique sur le bouton valider et fermer
Automatiquement la base de données s'ouvre et va sélectionner la plage B3 à Z3 afin d'y ouvrir chaque lien s'y trouvant.
A ce jour,
le "Userform1" s'ouvre mais rien n'est disponible dans aucune des deux "combobox" et le bouton "valider et fermer" ne fonctionne pas
la "base de données" s'ouvre mais les liens ne s'ouvrent pas
Merci pour toutes aides et/ou réponses que vous pourriez m'apporter
Ci-bas le code que j'ai fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Sub ouvrebasedetous() 'permet d'ouvrir la base de données en second plan Workbooks.Open ("C:\Users\User\Desktop\00 Economie de la construction interne Nomade\test\00 base de données (version 1).xlsx") Workbooks("Fiche coût construction 3.0.xslm").Sheets("1").Activate UserForm1.Show 'permet d'ouvrir le UserForm1 à deux menus déroulants ainsi qu'un bouton valider/fermer End Sub
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 Private Sub UserForm1_Initialize() 'permet d'incrémenter le UserForm1 'déclaration des variables Dim colonne As Integer Dim i As Integer, j As Integer colonne = 14 'affectation du numéro de colonne à 14 car première données en colonne M Worksheets("Fiche coût construction 3.0.xslm").Sheets("1").Range ("M2: P2") 'sur cet Excel à cette page dans les cellules choisies ci-trouve la liste du premier menu déroulant Do While Cells(14, colonne).Value <> "" 'on réalise une boucle qui va charger les noms de cette première liste déroulante et tant qu'il y a des valeurs dans la ligne 2, on charge les nouveaux noms UserForm1.ComboBox1.AddItem Cells(2, colonne).Value colonne = colonne + 1 'on incrémente le numéro de colonne afin de passer à la colonne de droite Loop End Sub
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 Private Sub ComboBox1_Change() ' permet de choisir ce qui apparaitra dans les menus déroulants 'initialisation des variables i = 14 UserForm1.ComboBox2.Clear 'On vide la liste déroulante de la ComboBox2 afin de ne pas cumuler les enregistrements Worksheets("Fiche coût construction 3.0.xslm").Sheets("1").Range ("M2: P2") 'sur cet Excel à cette page dans les cellules choisies ci-trouve la liste du premier menu déroulant Do While Cells(14, i).Value <> "" 'On boucle pour récupérer chaque choix du ComboBox2 selon la ComboBox1 'On teste que le nom de la ComboBox1 dans la liste déroulante soit identique à la cellule active If Cells(14, i).Value = ComboBox1.Value Then 'Si oui Cells(14, i).Select 'on selection la cellule de la ComboBox1 colonne = ActiveCell.Column 'On récupère son positionnement par le n° de colonne End If i = i + 1 'on incrémente le numéro de colonne Loop j = 3 'On initialise à 3 le numéro de ligne, le premier choix de la ComboBox2 se trouve en ligne 3 Do While Cells(j, colonne).Value <> "" 'On récupère les lignes pour récupérer les noms de la ComboBox2 UserForm1.ComboBox2.AddItem Cells(j, colonne) 'On charge la liste déroulant de la ComboBox2 avec les noms de la ComboBox2 j = j + 1 'On incrémente le numéro de ligne Loop ComboBox1.ListIndex = 0 'On affiche la première valeur par défaut End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Private Sub Valideretfermer() Activate.Sub afficheratio() 'Une fois les choix de menu déroulant fait on clique sur le bouton à clicker "valideretfermer" qui lance la macro "Sub afficheratio" Unload Me 'Le userform1 se ferme End Sub
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 Sub afficheratio() 'Doit permettre (une fois "valideretfermer" clicker) selon les choix du menu déroulant d'ouvrir les fiches ratios accessible depuis worksheet(base de données.xls).sheets(?).range(?) 'Si une fois après avoir cliquer sur valideretfermer les combobox ont choisi "Logements neufs" et "IDF" Alors on ouvrent les liens ce trouvant sur le fichier base de données.xls de l'onglet "A" sur les cellules "B3 à Z3" If ComboBox1.Value = "Logements neufs" And ComboBox2.Value = "IDF" Then Worksheets("base de données.xls").Sheets("A").Range("B3:Z3").Hyperlinks.Follow = True If ComboBox1.Value = "Logements neufs" And ComboBox2.Value = "Bretagne" Then Worksheets("base de données.xls").Sheets("A").Range("B49:Z49").Hyperlinks.Follow = True If ComboBox1.Value = "Logements neufs" And ComboBox2.Value = "PACA" Then Worksheets("base de données.xls").Sheets("A").Range("B95:Z95").Hyperlinks.Follow = True 'If ComboBox1.Value =... Workbooks("Fiche coût construction 3.0.xslm").Sheets("1").Activate Private Sub Typeouvrage_Click() End Sub
Partager