Menu déroulant à l'ouverture d'Excel
Fermé
freygeo
Messages postés
20
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
14 mars 2013
-
26 oct. 2010 à 11:08
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 3 nov. 2010 à 12:46
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 3 nov. 2010 à 12:46
A voir également:
- Menu déroulant à l'ouverture d'Excel
- Menu déroulant excel - Guide
- Excel menu déroulant en cascade - Guide
- Aller à la ligne excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
3 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
26 oct. 2010 à 13:12
26 oct. 2010 à 13:12
Bonjour,
Ce que tu demandes n'est pas très compliqué. Attention toutefois, es tu sur de vouloir SUPPRIMER toutes les lignes ne correspondants pas au choix de l'utilisateur? Pour info, une suppression par macro ne peux pas être annulée par : Editions/Annuler...
Je te conseille de penser à "Masquer" les lignes correspondantes, plutôt que supprimer...
Pour l'instant, je te propose de commencer ton travail par la création d'un petit UserForm qui te permettra cela.
1- Ouvre ton classeur Excel,
2- Tape ALT+F11, une fenêtre Visual Basic s'ouvre alors,
3- Insertion/Userform
3 bis - Sur la gauche de l'écran, tu dois avoir 2 "sous-fenêtres" : "Projet" & "Propriétés". S'il en manque une des deux voir dans Affichage (Explorateur de projet et fenêtre propriétés)
3 ter- Si la "Boîte à outils" ne s'ouvre pas par défaut : Affichage/Boîte à outils
4- Mise en forme de l'UserForm :
Tu peux en régler la taille avec la souris, pour le reste : la couleur de fond etc... c'est dans la fenêtre "propriétés" :
- Name (attention propriété importante... Il s'agit du nom que tu utiliseras dans les macros)
- backcolor
- caption (titre)
- etc...
5- dessines dans ton userform une Combobox : Boîte à outils "contrôles" Zone de liste modifiable.
6- Double clic dans le fond de l'UserForm, apparait alors ce code (dans une nouvelle fenêtre) :
7- En haut de cette fenêtre : 2 menus déroulants. Dans celui de droite choisir : Initialize. Apparait alors :
8- Sous la ligne : Private Sub UserForm_Initialize() et au dessus de "End Sub", écrire ce code :
Tu obtiens alors :
9- Vers le haut à gauche de l'écran, fenêtre "projet", double clic sur "This WorkBook", une nouvelle fenêtre s'ouvre,
10- En haut de fenêtre, Menu déroulant de gauche (Général), choisir : Workbook, dans celui de droite (Déclarations) choisir "Open" si ce n'est pas fait par défaut... On obtient :
11- Entre ces deux lignes écrire : (attention, si tu as changé la propriété "name" de l'userform, il faut remplacer UserForm1 par le nom choisit)
On obtient alors :
12- fermer la fenêtre Visual Basic, Enregistrer le classeur (sous un autre nom pour ne pas "abimer" l'original) , fermer puis ouvrir à nouveau.
Ce que tu demandes n'est pas très compliqué. Attention toutefois, es tu sur de vouloir SUPPRIMER toutes les lignes ne correspondants pas au choix de l'utilisateur? Pour info, une suppression par macro ne peux pas être annulée par : Editions/Annuler...
Je te conseille de penser à "Masquer" les lignes correspondantes, plutôt que supprimer...
Pour l'instant, je te propose de commencer ton travail par la création d'un petit UserForm qui te permettra cela.
1- Ouvre ton classeur Excel,
2- Tape ALT+F11, une fenêtre Visual Basic s'ouvre alors,
3- Insertion/Userform
3 bis - Sur la gauche de l'écran, tu dois avoir 2 "sous-fenêtres" : "Projet" & "Propriétés". S'il en manque une des deux voir dans Affichage (Explorateur de projet et fenêtre propriétés)
3 ter- Si la "Boîte à outils" ne s'ouvre pas par défaut : Affichage/Boîte à outils
4- Mise en forme de l'UserForm :
Tu peux en régler la taille avec la souris, pour le reste : la couleur de fond etc... c'est dans la fenêtre "propriétés" :
- Name (attention propriété importante... Il s'agit du nom que tu utiliseras dans les macros)
- backcolor
- caption (titre)
- etc...
5- dessines dans ton userform une Combobox : Boîte à outils "contrôles" Zone de liste modifiable.
6- Double clic dans le fond de l'UserForm, apparait alors ce code (dans une nouvelle fenêtre) :
Private Sub UserForm_Click() End Sub
7- En haut de cette fenêtre : 2 menus déroulants. Dans celui de droite choisir : Initialize. Apparait alors :
Private Sub UserForm_Click() End Sub _________________________________________ Private Sub UserForm_Initialize() End Sub
8- Sous la ligne : Private Sub UserForm_Initialize() et au dessus de "End Sub", écrire ce code :
ComboBox1.AddItem "Ent_1" ComboBox1.AddItem "Ent_2" ComboBox1.AddItem "Ent_3"
Tu obtiens alors :
Private Sub UserForm_Click() End Sub __________________________________________ Private Sub UserForm_Initialize() ComboBox1.AddItem "Ent_1" ComboBox1.AddItem "Ent_2" ComboBox1.AddItem "Ent_3" End Sub
9- Vers le haut à gauche de l'écran, fenêtre "projet", double clic sur "This WorkBook", une nouvelle fenêtre s'ouvre,
10- En haut de fenêtre, Menu déroulant de gauche (Général), choisir : Workbook, dans celui de droite (Déclarations) choisir "Open" si ce n'est pas fait par défaut... On obtient :
Private Sub Workbook_Open() End Sub
11- Entre ces deux lignes écrire : (attention, si tu as changé la propriété "name" de l'userform, il faut remplacer UserForm1 par le nom choisit)
Load UserForm1 UserForm1.Show
On obtient alors :
Private Sub Workbook_Open() Load UserForm1 UserForm1.Show End Sub
12- fermer la fenêtre Visual Basic, Enregistrer le classeur (sous un autre nom pour ne pas "abimer" l'original) , fermer puis ouvrir à nouveau.
freygeo
Messages postés
20
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
14 mars 2013
26 oct. 2010 à 15:17
26 oct. 2010 à 15:17
Merci beaucoup pour cette réponse, la fenêtre s'ouvre bien à l'ouverture du classeur avec la liste déroulante. :)
Maintenant si tu connais une solution, il faut juste que quand je clique sur une entreprise dans la liste déroulante, exemple ent_2, je dois masquer ou supprimer les lignes des entreprises 1 et 3.
Après je pense pouvoir m'en sortir seul
D'avance merci
Maintenant si tu connais une solution, il faut juste que quand je clique sur une entreprise dans la liste déroulante, exemple ent_2, je dois masquer ou supprimer les lignes des entreprises 1 et 3.
Après je pense pouvoir m'en sortir seul
D'avance merci
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
Modifié par pijaku le 26/10/2010 à 15:49
Modifié par pijaku le 26/10/2010 à 15:49
Alors "Masquer" ou "Supprimer"?
Bon choisissons "masquer"...
1- Tu ouvres à nouveau ton classeur, en activant les macros. Fermes l'userform avec la croix.
2- tape ALT + F11 et affiches à nouveau ton UserForm (fenêtre projet, cliques sur Feuilles puis double clic sur le nom de ton userform)
3- Dessines un Commandbutton dans ton userform : boite à outils "Bouton de commande"
3 bis- dans la propriété "caption" du bouton remplace : CommandButton1 par : VALIDER
4- Double clic sur le bouton VALIDER, tu vois :
5- Entre les lignes Private Sub CommandButton1_Click() et End Sub copie / colle ce code :
6- Une petite modification, pour éviter des fausses manipulations... Dans le code du : WorkBook_Open (double clic fenêtre projet sur "ThisWorkBook") :
7- Fermes Visual Basic, enregistre et ferme ton classeur et teste en ouvrant à nouveau...
Bon choisissons "masquer"...
1- Tu ouvres à nouveau ton classeur, en activant les macros. Fermes l'userform avec la croix.
2- tape ALT + F11 et affiches à nouveau ton UserForm (fenêtre projet, cliques sur Feuilles puis double clic sur le nom de ton userform)
3- Dessines un Commandbutton dans ton userform : boite à outils "Bouton de commande"
3 bis- dans la propriété "caption" du bouton remplace : CommandButton1 par : VALIDER
4- Double clic sur le bouton VALIDER, tu vois :
Private Sub CommandButton1_Click() End Sub ________________________________________ Private Sub UserForm_Click() End Sub _________________________________________ Private Sub UserForm_Initialize() ComboBox1.AddItem "Ent_1" ComboBox1.AddItem "Ent_2" ComboBox1.AddItem "Ent_3" End Sub
5- Entre les lignes Private Sub CommandButton1_Click() et End Sub copie / colle ce code :
Private Sub CommandButton1_Click() Dim ValeurChoisie As String Dim DerniereLigne As Integer, lign As Integer, Col As Integer If ComboBox1.Value = "" Then MsgBox "Merci de sélectionner une entreprise" Exit Sub End If Col = 1 'ici place le numéro de la colonne contenant les "Ent_1" "Ent_2" 1= A, 2=B etc... ValeurChoisie = ComboBox1.Value With Sheets("Feuil1").Columns(Col) 'adapter le nom de la feuille, ici "Feuil1" DerniereLigne = .Cells(65536, Col).End(xlUp).Row For lign = 2 To DerniereLigne If .Cells(lign, Col).Value <> ValeurChoisie Then .Cells(lign, Col).EntireRow.Hidden = True End If Next End With Unload UserForm1 UserForm1.Hide End Sub
6- Une petite modification, pour éviter des fausses manipulations... Dans le code du : WorkBook_Open (double clic fenêtre projet sur "ThisWorkBook") :
Private Sub Workbook_Open() With Sheets("Feuil1") ' adapter le nom de la feuille .Range("A1:A10000")..EntireRow.Hidden = False 'adapter le numéro de dernière ligne 10000 End With Load UserForm1 UserForm1.Show End Sub
7- Fermes Visual Basic, enregistre et ferme ton classeur et teste en ouvrant à nouveau...
freygeo
Messages postés
20
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
14 mars 2013
26 oct. 2010 à 16:42
26 oct. 2010 à 16:42
Ok ça fonctionne nickel je te remercie :)
J'ai essayé naïvement de changer le Hidden en Delete afin de cette fois supprimer les lignes dont je ne veux pas.
Mais ça ne fonctionne pas...
J'ai essayé naïvement de changer le Hidden en Delete afin de cette fois supprimer les lignes dont je ne veux pas.
Mais ça ne fonctionne pas...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
26 oct. 2010 à 16:45
26 oct. 2010 à 16:45
Je viens de voir une erreur..; Il y a un double point (..) au lieu d'un seul(.) ici :
Pour supprimer :
Remplacer dans le code du CommandButton :
par :
Private Sub Workbook_Open() With Sheets("Feuil1") ' adapter le nom de la feuille .Range("A1:A10000")..EntireRow.Hidden = False 'adapter le numéro de dernière ligne 10000 End With Load UserForm1 UserForm1.Show End Sub
Pour supprimer :
Remplacer dans le code du CommandButton :
For lign = 2 To DerniereLigne If .Cells(lign, Col).Value <> ValeurChoisie Then .Cells(lign, Col).EntireRow.Hidden = True End If Next
par :
For lign = 2 To DerniereLigne If .Cells(lign, Col).Value <> ValeurChoisie Then .Cells(lign, Col).EntireRow.Delete End If Next
freygeo
Messages postés
20
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
14 mars 2013
27 oct. 2010 à 10:54
27 oct. 2010 à 10:54
Bonjour,
La suppression des lignes ne fonctionne pas. Le programme conserve bien les lignes souhaitées mais ne supprime qu'une partie des mauvaises lignes.
Autre soucis, dans thisworkbook où se trouve les instructions suivantes :
Private Sub Workbook_Open()
With Sheets("PSST") ' adapter le nom de la feuille
.Range("A1:A65536")..EntireRow.Hidden = False 'adapter le numéro de dernière ligne 10000
End With
Load liste
liste.Show
End Sub
La zone en gras apparait en rouge et la fenêtre suivante apparait :
Erreur de compilation :
Erreur de syntaxe
Si tu as besoin d'y voir plus clair, je peux te transmettre le fichier par mail
D'avance merci et bonne journée
La suppression des lignes ne fonctionne pas. Le programme conserve bien les lignes souhaitées mais ne supprime qu'une partie des mauvaises lignes.
Autre soucis, dans thisworkbook où se trouve les instructions suivantes :
Private Sub Workbook_Open()
With Sheets("PSST") ' adapter le nom de la feuille
.Range("A1:A65536")..EntireRow.Hidden = False 'adapter le numéro de dernière ligne 10000
End With
Load liste
liste.Show
End Sub
La zone en gras apparait en rouge et la fenêtre suivante apparait :
Erreur de compilation :
Erreur de syntaxe
Si tu as besoin d'y voir plus clair, je peux te transmettre le fichier par mail
D'avance merci et bonne journée
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
27 oct. 2010 à 11:10
27 oct. 2010 à 11:10
La zone apparait en rouge???
Ben oui, je te l'ai dit juste au dessus il y a une erreur dans cette ligne... Change :
Par :
Un seul point (.), pas deux (..)
Ben oui, je te l'ai dit juste au dessus il y a une erreur dans cette ligne... Change :
.Range("A1:A65536")..EntireRow.Hidden = False 'adapter le numéro de dernière ligne 10000
Par :
.Range("A1:A65536").EntireRow.Hidden = False 'adapter le numéro de dernière ligne 10000
Un seul point (.), pas deux (..)
freygeo
Messages postés
20
Date d'inscription
mardi 26 octobre 2010
Statut
Membre
Dernière intervention
14 mars 2013
27 oct. 2010 à 11:28
27 oct. 2010 à 11:28
Ok pour le thisworkbook ,
Mais le programme n'efface toujours qu'une partie des lignes que je souhaite supprimées.
Le programme est le suivant :
Private Sub bouton1_Click()
Dim ValeurChoisie As String
Dim DerniereLigne As Integer, lign As Integer, Col As Integer
If ComboBox1.Value = "" Then
MsgBox "Merci de sélectionner une entreprise"
Exit Sub
End If
Col = 1 'ici place le numéro de la colonne contenant les "terrain1" "terrain2" 1= A, 2=B etc...
ValeurChoisie = ComboBox1.Value
With Sheets("PSST").Columns(Col) 'adapter le nom de la feuille, ici "PSST"
DerniereLigne = .Cells(65536, Col).End(xlUp).Row
For lign = 4 To DerniereLigne
If .Cells(lign, Col).Value <> ValeurChoisie Then
.Cells(lign, Col).EntireRow.Delete
End If
Next
End With
Unload liste
liste.Hide
End Sub
sachant qu'il semble bien comprendre ValeurChoisie car il la conserve systématiquement...
Mais le programme n'efface toujours qu'une partie des lignes que je souhaite supprimées.
Le programme est le suivant :
Private Sub bouton1_Click()
Dim ValeurChoisie As String
Dim DerniereLigne As Integer, lign As Integer, Col As Integer
If ComboBox1.Value = "" Then
MsgBox "Merci de sélectionner une entreprise"
Exit Sub
End If
Col = 1 'ici place le numéro de la colonne contenant les "terrain1" "terrain2" 1= A, 2=B etc...
ValeurChoisie = ComboBox1.Value
With Sheets("PSST").Columns(Col) 'adapter le nom de la feuille, ici "PSST"
DerniereLigne = .Cells(65536, Col).End(xlUp).Row
For lign = 4 To DerniereLigne
If .Cells(lign, Col).Value <> ValeurChoisie Then
.Cells(lign, Col).EntireRow.Delete
End If
Next
End With
Unload liste
liste.Hide
End Sub
sachant qu'il semble bien comprendre ValeurChoisie car il la conserve systématiquement...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
27 oct. 2010 à 11:36
27 oct. 2010 à 11:36
yesss!!!!!
Quel cruche ce "Pijaku"...
Effectivement, je t'avais donnée un code pour "masquer" les lignes, pour les "deleter" je n'ai pas réfléchit...
Lorsque l'on supprime des lignes, il faut toujours commencer par la dernière et remonter... Pourquoi? Parce que lorsque tu supprimes la ligne 6 par exemple, la 7ème remonte et devient donc la ligne 6 qui ne sera plus testée...
Donc remplace :
Quel cruche ce "Pijaku"...
Effectivement, je t'avais donnée un code pour "masquer" les lignes, pour les "deleter" je n'ai pas réfléchit...
Lorsque l'on supprime des lignes, il faut toujours commencer par la dernière et remonter... Pourquoi? Parce que lorsque tu supprimes la ligne 6 par exemple, la 7ème remonte et devient donc la ligne 6 qui ne sera plus testée...
Donc remplace :
For lign = 4 To DerniereLignepar :
For lign = DerniereLigne To 4 Step -1