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

  • 1
  • 2
  1. 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"
    0
  2. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  3. 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 ?
    0
  4. xav3601 Messages postés 3390 Statut Membre 312
     
    Sinon tu utilise la fonction filtrer de Excel qui est pas mal pour ce que tu veux faire ^^
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  7. 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
    0
  8. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  9. 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
    0
  10. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  11. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    Non en fait c'est bon ça marche, c'était à cause des guillemets!
    Merci!!!
    0
  12. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  13. 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
    0
  14. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    ç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
  15. 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...
    0
  16. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  17. 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 ?
    0
  18. Polux31 Messages postés 7219 Statut Membre 1 204
     
    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
  19. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    Ok je vais essayer, merci!
    0
  20. morigann Messages postés 60 Date d'inscription   Statut Membre Dernière intervention   17
     
    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
  21. xav3601 Messages postés 3390 Statut Membre 312
     
    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
  • 1
  • 2