Menu déroulant à l'ouverture d'Excel
freygeo
Messages postés
24
Statut
Membre
-
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 13513 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai un classeur Excel avec 2 colonnes :
(colonneA) (colonneB)
Entreprise Date_miseajour
ent_1 24/03/2010
ent_2 21/06/2009
ent_2 18/04/2010
ent_3 24/08/2010
Je souhaiterai qu'à l'ouverture du classeur Excel, un menu déroulant, que l'utilisateur doit obligatoirement compléter, apparaisse avec comme choix "ent_1", "ent_2" et ent_3 (il n'y a pas de possibilité d'ajouter de nouvelles entreprises, elles sont toutes fixes)
Si l'utilisateur choisit la modalité "ent_2", une macro devra supprimer toute les entreprises de la colonne A qui ne sont pas égal à"ent_2".
Le résultat sera donc :
(colonneA) (colonneB)
Entreprise Date_miseajour
ent_2 21/06/2009
ent_2 18/04/2010
merci d'avance :)
J'ai un classeur Excel avec 2 colonnes :
(colonneA) (colonneB)
Entreprise Date_miseajour
ent_1 24/03/2010
ent_2 21/06/2009
ent_2 18/04/2010
ent_3 24/08/2010
Je souhaiterai qu'à l'ouverture du classeur Excel, un menu déroulant, que l'utilisateur doit obligatoirement compléter, apparaisse avec comme choix "ent_1", "ent_2" et ent_3 (il n'y a pas de possibilité d'ajouter de nouvelles entreprises, elles sont toutes fixes)
Si l'utilisateur choisit la modalité "ent_2", une macro devra supprimer toute les entreprises de la colonne A qui ne sont pas égal à"ent_2".
Le résultat sera donc :
(colonneA) (colonneB)
Entreprise Date_miseajour
ent_2 21/06/2009
ent_2 18/04/2010
merci d'avance :)
A voir également:
- Menu déroulant à l'ouverture d'Excel
- Menu déroulant excel - Guide
- Excel menu déroulant en cascade - Guide
- Word et excel gratuit - Guide
- Menu déroulant google sheet - Accueil - Guide bureautique
- Si ou excel - Guide
3 réponses
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.
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
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...
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...
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
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
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 (..)
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...
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