Macro VBA sur Excel, need help...

Résolu
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.
Configuration: Windows Vista
Firefox 3.0.10

21 réponses

  • Votes
  • Date
  • Date décroissante
  1. Merci Xav3601 mais au départ je n'avais pas de Userform, enfin, je vais suivre ton conseil, j'espère y arriver :)
    1. 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. 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"
        1. 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)
          1. Contributeur
            Pourquoi ne pas simplement déplacer la routine dans le module vide ?
            1. 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?
              1. Contributeur
                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...
                1. ç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.
                  1. Contributeur
                    Change le 1 en 5 dans la ligne suivante, c'est le numéro de la colonne à filtrer.
                    Selection.AutoFilter Field:=1, Criteria1:=queldomaine
                    1. 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..........
                      1. Non en fait c'est bon ça marche, c'était à cause des guillemets!
                        Merci!!!
                        1. 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")
                          1. Contributeur
                            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
                            1. 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.
                              1. Contributeur
                                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
                                1. 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
                                  1. Sinon tu utilise la fonction filtrer de Excel qui est pas mal pour ce que tu veux faire ^^
                                    1. Contributeur
                                      J'ai l'impression que tu n'as jamais programmé. Je me trompe ?
                                      1. 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)?
                                        • 1
                                        • 2