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
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 :)


A voir également:

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
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) :
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.
2
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
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
0
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
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 :
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...
0
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
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...
0
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
Je viens de voir une erreur..; Il y a un double point (..) au lieu d'un seul(.) ici :
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
0
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
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
0
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
La zone apparait en rouge???


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 (..)
0
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
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...
0
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
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 :

For lign = 4 To DerniereLigne
par :

For lign = DerniereLigne To 4 Step -1 
0