Macro VBA sur Excel, need help...
Résolu
morigann
Messages postés
60
Date d'inscription
Statut
Membre
Dernière intervention
-
morigann Messages postés 60 Date d'inscription Statut Membre Dernière intervention -
morigann Messages postés 60 Date d'inscription Statut Membre Dernière intervention -
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.
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.
Configuration: Windows Vista Firefox 3.0.10
21 réponses
- 1
- 2
Suivant
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
Cells.Select
Selection.AutoFilter
Selection.AutoFilter Field:=1, Criteria1:="Agriculture" -
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)? -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
J'ai l'impression que tu n'as jamais programmé. Je me trompe ? -
Sinon tu utilise la fonction filtrer de Excel qui est pas mal pour ce que tu veux faire ^^
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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 -
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.
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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 -
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") -
Non en fait c'est bon ça marche, c'était à cause des guillemets!
Merci!!! -
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.......... -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
Change le 1 en 5 dans la ligne suivante, c'est le numéro de la colonne à filtrer.
Selection.AutoFilter Field:=1, Criteria1:=queldomaine -
ç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. -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
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... -
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? -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
Pourquoi ne pas simplement déplacer la routine dans le module vide ? -
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)
-
Ok je vais essayer, merci!
-
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" -
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 ;)
- 1
- 2
Suivant