Macro VBA sur Excel, need help...

Résolu/Fermé
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 - 24 juin 2009 à 21:11
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 - 26 juin 2009 à 14:49
Bonjour,

Je souhaite trier des données dans un tableau Excel sur une seule colonne.
Cette colonne s’intitule « Domaine » et affiche 32 noms de domaines différents.
J’aimerais proposer un programme qui puisse demander à l’utilisateur s’il veut que la colonne soit triée selon un nom de domaine spécifique (que les autres noms de domaines ne s’affichent pas) ; que, si l’utilisateur répond « non » le programme se ferme et le tableau ne change pas ; que, si l’utilisateur répond « oui », le programme l’invite à entrer un nom de domaine (parmi une liste des 32 domaines existants).
J’ai une petite idée mais j’ai besoin d’aide :

Sub Tri_domaines

Dim Domaine As String

Domaine = InputBox (« Souhaitez-vous voir un domaine précis s’afficher ? »)
If Domaine = « Non »
Then (fermeture de la fenêtre)
If Domaine = « Oui »
Then InputBox (« Entrez le nom du domaine que vous souhaitez voir s’afficher »)





End If
End Sub

En fait je suis bloqué à partir de là, j’ai mes 32 domaines et par exemple je voudrais que si l’utilisateur tape le domaine existant « Agriculture », il n’y ait plus que les données de ce domaine présent dans le tableau. Faudrait-il que j’enregistre une macro avec un filtre automatique ou élaboré des données au préalable ?

Si vous avez une autre solution ou un moyen plus simple pour parvenir à mon résultat, n’hésitez pas !

Merci.
A voir également:

21 réponses

yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
24 juin 2009 à 21:21
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="Agriculture"
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
25 juin 2009 à 08:37
Ok merci, donc je dois faire ça pour chacun des 32 domaines?
Pourrais tu m'indiquer comment faire en sorte que le programme ferme la fenêtre si l'utilisateur répond non (cf. plus haut)?
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
25 juin 2009 à 10:18
J'ai l'impression que tu n'as jamais programmé. Je me trompe ?
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
25 juin 2009 à 10:19
Sinon tu utilise la fonction filtrer de Excel qui est pas mal pour ce que tu veux faire ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
25 juin 2009 à 11:33
En fait tu ne te trompes qu'à moitié yg_be parce que j'ai seulement suivi quelques cours de programmation pour des macros basiques.. désolé, si tu ne veux pas perdre ton temps à m'expliquer, laisse tomber
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
25 juin 2009 à 11:59
essaie ainsi :

option explicit
Sub Tri_domaines

Dim Domaine As String
dim queldomaine as string

Domaine = InputBox (« Souhaitez-vous voir un domaine précis s’afficher ? »)
If Domaine = « Non »
Then
(fermeture de la fenêtre)
else
queldomaine = InputBox (« Entrez le nom du domaine que vous souhaitez voir s’afficher »)
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=queldomaine

End If
End Sub
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
25 juin 2009 à 14:05
Merci de ta réponse; j'ai recopié le code et il y a un problème de syntaxe; au niveau du "Then" "erreur de compilation, attendu : numéro de ligne ou étiquette ou instruction ou fin d'instruction" s'affiche.
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
25 juin 2009 à 14:40
option explicit
Sub Tri_domaines

Dim Domaine As String
dim queldomaine as string

Domaine = InputBox (« Souhaitez-vous voir un domaine précis s’afficher ? »)
If Domaine = « Non » Then
' (fermeture de la fenêtre)
else
queldomaine = InputBox (« Entrez le nom du domaine que vous souhaitez voir s’afficher »)
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:=queldomaine

End If
End Sub
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
25 juin 2009 à 14:50
Ok, maintenant ' (fermeture de la fenêtre)
s'affiche en vert, mais :
Domaine = InputBox (« Souhaitez-vous voir un domaine précis s’afficher ? »)
If Domaine = « Non » Then

et

queldomaine = InputBox (« Entrez le nom du domaine que vous souhaitez voir s’afficher »)

s'affichent en rouge ("erreur de syntaxe")
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
25 juin 2009 à 14:53
Non en fait c'est bon ça marche, c'était à cause des guillemets!
Merci!!!
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
25 juin 2009 à 15:00
Bon en fait le programme ne fonctionne pas jusqu'au bout, mais je pense savoir pourquoi :
mon tableau Excel est en fait un glossaire, la colonne domaine se situe colonne E ligne 5, il faut sans doute que le programme cherche uniquement dans cette colonne, mais là encore je ne sais pas..........
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
25 juin 2009 à 17:02
Change le 1 en 5 dans la ligne suivante, c'est le numéro de la colonne à filtrer.
Selection.AutoFilter Field:=1, Criteria1:=queldomaine
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
26 juin 2009 à 10:01
ça a marché, cool merci.
J'aimerais aussi que mon programme s'affiche directement à l'ouverture d'Excel (l'utilisateur doit pouvoir choisir s'il veut que tous les domaines s'affichent --> "non" ou s'il veut consulter un domaine particulier --> "oui")
Pour cela j'ai mis : Sub auto_open() comme titre

Dim Domaine As String
Dim queldomaine As String

Domaine = InputBox("Souhaitez-vous voir un domaine précis s’afficher ?")
If Domaine = "Oui" Then
queldomaine = InputBox("Entrez le nom du domaine que vous souhaitez voir s’afficher")
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=5, Criteria1:=queldomaine
ElseIf Domaine = "oui" Then
queldomaine = InputBox("Entrez le nom du domaine que vous souhaitez voir s’afficher")
Cells.Select
Selection.AutoFilter
Range("E4").Select
Selection.AutoFilter Field:=5, Criteria1:=queldomaine
Else
Range("E4").Select
Selection.AutoFilter Field:=5


End If
End Sub

Mais ça ne marche pas, je rouvre mon classeur et rien ne s'affiche.
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
26 juin 2009 à 11:23
Où se trouve la sub auto_open ?
Je pense qu'elle doit se trouver dans un module, pas dans le code associé à un sheet ou au workbook ou à une forme...
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
26 juin 2009 à 11:47
Elle n'est pas dans un module (il n'y en a qu'un, vide) ni dans le workbook ni dans une autre feuille.
Mais ça ne peut pas fonctionner si je la rajoute dans le workbook?
0
yg_be Messages postés 23392 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 décembre 2024 Ambassadeur 1 556
26 juin 2009 à 13:15
Pourquoi ne pas simplement déplacer la routine dans le module vide ?
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
26 juin 2009 à 13:38
Bonjour,

Dans un module (module1 par exemple), copie colle ton code. Tu peux garder Sub auto_open() si tu veux.

Dans le module ThisWorkbook, choisir "Workbook" dans la liste déroulante (Général) à gauche de la liste (déclaration). Tu vas avoir ceci :
Private Sub Workbook_Open()

End Sub


Colle ça dans la procédure : Module1.auto_open

tu dois avoir ça :
Private Sub Workbook_Open()
     Module1.auto_open
End Sub


Sauvegarde ton fichier et relance le.

;o)
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
26 juin 2009 à 13:42
Ok je vais essayer, merci!
0
morigann Messages postés 64 Date d'inscription mercredi 24 juin 2009 Statut Membre Dernière intervention 10 mai 2011 17
26 juin 2009 à 14:09
J'ai suivi tes indications Polux31 mais à l'exécution de
Private Sub Workbook_Open()
Module1.auto_open
End Sub

.auto_open est surligné et un message d'erreur s'affiche : "Erreur de compilation : Membre de méthode ou de données introuvable"
0
xav3601 Messages postés 3288 Date d'inscription lundi 10 novembre 2008 Statut Membre Dernière intervention 2 mars 2016 311
26 juin 2009 à 14:25
Private Sub Workbook_Open()
Form1.Show
End Sub

Fais comme ca!
en mettant le nom de la userform que tu veux appeler a l'ouverture ;)
0