IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Macro excel liste déroulante [XL-2019]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Janvier 2023
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 17
    Par défaut Macro excel liste déroulante
    Bonjour à tous,

    Voilà, j'ai un gros fichier qui répertorie tous mes transporteurs et notamment leur " encours ". J'ai une manip à faire pour venir enregistrer celui-ci au format PDF afin de leur envoyer par la suite.

    J'aimerai automatiser cette procédure étant donné qu'une fusion de compte transporteurs est à venir et que j'en aurai + de 200 très prochainement. Faire la manip 15 fois était jusqu'alors acceptable, mais 200 fois...

    Le gros souci que je rencontre c'est que cette liste de transporteur est dans une cellule avec liste déroulante. En fait ça fonctionne comme ceci :
    Je viens sélectionner le numéro souhaité, puis je fais ma manip pour imprimer en PDF le résultat, puis je descend d'un numéro etc etc...

    En essayant un peu (je suis très novice sur le sujet) je suis parvenu à ça, ce qui pour l'instant me permet d'enregistrer le PDF du transporteur sélectionné.

    Sub Test2()


    '

    ' Test2 Macro
    '

    '
    Range("A325").Select


    Application.Goto Reference:="SUIVI10"
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users ".pdf", Quality:= _att
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=False
    Range("A325").Select
    Application.Goto Reference:="SUIVI10"
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=False



    End Sub


    Seulement voilà, j'aimerai que la macro puisse d'elle-même descendre dans ce menu déroulant jusqu'à la fin de celui-ci, et que ça m'imprime le PDF correspondant à chaque fois... je ne sais pas si je suis clair ?

    J'ai essayé pendant quelques heures de jouer avec la fonction Sendkeys, pour que la macro sélectionne à nouveau la cellule, puis fasse alt + bas pour ouvrir le menu déroulant de la cellule, puis bas pour descendre d'un cran puis entrée pour valider mais cela n'a pas l'air de marcher et je finis un peu par m'arracher les cheveux... J'ai essayé plein d'enregistrements aussi dans l'espoir qu'Excel me propose quelque chose lorsque je clic sur le menu déroulant mais rien n'y fait...

    Je sollicite votre aide et me tiens à votre disposition pour toutes questions si il manque des informations.

    Merci d'avance.

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    Bonjour
    Sans entrée dans la conception de ton dossier (je trouve bizarre début de mois et fin du mois et début mois +1 ....,) voir coté tableau croisé dynamique ou une colonne réservée pour les mois , une pour l'année et évidement une pour les chauffeurs ça te permet de faire toutes les comparaisons possibles avec une belle présentation...bref
    pour répondre à votre demande ; certainement la liste de validation fait référence à une colonne précise...donc on peux parcourir toutes les lignes de cette colonne et les enregistrés format PDF
    dans ce petit exemple le code imprime et enregistre pour chaque chauffeur son bon
    ce n'est qu'un début de réponse à développer et à adapter pour ton cas
    J'espère que ça t'aide à avancer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub factureAimprimer()
    Dim w1 As Worksheet
    Dim w2 As Worksheet
    Dim L As Long
    Set w1 = Worksheets("Liste")
    Set w2 = Worksheets("Bon")
     
    Application.ScreenUpdating = False
    L = w1.Range("A" & Rows.Count).End(xlUp).Row
     
    For i = 2 To L
            w2.Range("C2").Value = w1.Cells(i, "A")
            w2.PageSetup.PrintArea = ("B1:C10")
            w2.PrintOut
            w2.PageSetup.PrintArea = ""
     
    w2.Select
     
      '*************************Enregistrement Rapport Format PDF*******************
    Dim Ar(0) As String
        Ar(0) = Feuil1.Name
        Sheets(Ar).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & "BON  " & w2.Range("C2") _
            , Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _
            :=False, OpenAfterPublish:=False
      '********************************************************************************
     Next i
    Application.ScreenUpdating = True
    End Sub
    Fichiers attachés Fichiers attachés

  3. #3
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Janvier 2023
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 17
    Par défaut
    Bonjour,

    Tout d'abord, merci pour votre retour. A vous lire, c'est si simple !

    Effectivement ce fichier est assez complexe, il répertorie des mouvements par transporteur sur plus de 10 sites donc ce bon est un récap personnel regroupant tous leurs soldes.. Il faut définir la plage et faire un rappel de leur solde à M-1 ainsi que leur rappeler qu'ils ont 30 jours pour contester celui-ci. Pour des raisons de confidentialité je ne montrerai pas la complexité du fichier.

    Je ne suis pas à l'origine de celui-ci mais on m'a clairement dit qu'il fallait faire avec Pour ma part je débute sur excel, j'ai appris sur le tas à l'aide de vidéos youtube etc alors oui c'est possible que cela puisse paraître parfois aberrant au près de personnes qui s'y connaissent.

    J'ai essayé une bonne demi-heure là mais je n'arrive pas à intégrer cette notion de descendre dans le menu déroulant...

    Ou est-ce que je dois travailler svp ?

    Sub Test2()


    '

    ' Test2 Macro
    '

    For i = 1 To L
    w2.Range("A325").Value = w1.Cells(i, "A")
    w2.PageSetup.PrintArea = ("B322: U354")
    w2.PrintOut
    w2.PageSetup.PrintArea = ""
    Application.Goto Reference:="SUIVI10"
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\Users & ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=False
    Next i
    Application.ScreenUpdating = True

    End Sub

  4. #4
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Proposition
    Bonjour
    voici un petit fichier qui permettra de réaliser la tache demandée
    Fulerty.xlsm
    Il faut que la feuille ETAT soit la 1e du classeur

    Fonctionnement :
    dans la feuille ETAT, on met en C2 le mois souhaité puis on appuie sur le bouton latéral
    cela va générer sur le bureau un pdf de chaque fournisseur
    le nom sera du type "Nom du classeur" puis un - puis le nom du fournisseur et le mois entre ()
    ex : Fulerty.xlsm - A (Mois 01).pdf

    Pour le projet final, il faudra sans doute mettre un sous dossier sur le bureau pour ne pas avoir 200 fichiers dessus !

    Restant à dispo
    Fabien

  5. #5
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Janvier 2023
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 17
    Par défaut
    Bonjour,

    Merci pour votre retour. Je ne parviens cependant pas à l'appliquer à mon fichier, je vais devoir prendre des cours d'excel très prochainement

    Cette ligne là : Application.Goto Reference:="SUIVI10" me permet de choisir le mois et la zone d'impression en fait, et je n'arrive pas à modifier selon ton schéma... Ces mois sont tous côte à côte sur cette feuille et cliquer sur le suivi du mois en question permet de sélectionner le bon correspondant.

    En fait ma macro actuelle me permet de faire exactement ce dont j'ai besoin par rapport à mon fichier cependant je ne sais pas lui dire de répéter pour toutes les valeurs existantes dans le menu déroulante, existe-t-il un moyen de le faire ou alors il faut effectivement reprendre la macro de la base? Je pensais en faire une par mois pour pas trop complexifier la chose, car le menu déroulant se répète aussi à chaque mois, donc une requête pour janvier lui disant : toutes les options du menu déroulant de a30 par exemple à imprimer sur telle zone, une requête pour février sur les cellules de A60 etc...

    Merci pour votre temps et j'espère pouvoir rendre la pareille un jour.$

    EDIT : Suis-je sur la bonne voie ?

    Sub Test2()


    '

    ' Test2 Macro
    '

    '
    Dim cell As Range
    For Each cell In Range("A325")
    Range("A325").Value = cell.Value
    Application.Run ("impression_pdf")
    Next cell

    End Sub

    Sub impression_pdf()


    Application.Goto Reference:="SUIVI10"
    Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    C:\Users ".pdf", Quality:= _
    xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
    From:=1, To:=1, OpenAfterPublish:=False

    End Sub

  6. #6
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Aide
    Bonjour
    personnellement j'apprends beaucoup de choses sur le forum, notamment quand on nous demande des choses comme ce que vous demandez. Ca me fait progresser donc vous m'avez déjà rendu service.

    Votre problème ici est la définition de votre plage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim cell As Range
    For Each cell In Range("A325")
    à la place de A325, il devrait y avoir le listing de vos fournisseurs
    dans ma démo je les avais mis dans un tableau structuré "TBL_Fournisseurs" et du coup je lui ai demandé "pour chaque cellule dans la plage TBL_Fournisseurs"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each cell In Range("TBL_Fournisseurs")
    Il vous faut donc lister vos fournisseurs et nommer la plage afin de l'utiliser comme il faut.

    Pour moi, votre code Application.Goto Reference:="SUIVI10" ne sert à rien dans votre macro impression.
    Mon équivalent correspondait à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("qui_ETAT").Value = cell.Value
    Du coup, vous ce serait + un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Range("suivi10").Value = cell.Value

  7. #7
    Membre averti
    Homme Profil pro
    Responsable en conduite du changement
    Inscrit en
    Janvier 2023
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable en conduite du changement
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2023
    Messages : 17
    Par défaut
    Bonjour,

    J'ai donc essayé comme expliqué, j'ai répertorié mes transporteurs sur un autre onglet et j'ai demandé à ce qu'il vienne piocher là-dedans.


    EDIT : J'avais mis un s en trop à transporteurs mais là quand je l'ai lancé... dramatique ! Toutes mes valeurs ont disparues et il m'a affiché une erreur de syntaxe quant à l'enregistrement



    Le problème viendrait-il du cell.value?

  8. #8
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Aide
    Avez vous bien nommé une cellule "SUIVI10" ?
    Là j'ai l'impression que vous lui avez plutôt dit "prends ma plage SUIVI10 et mets la valeur du transporteur 1" d'où des 1 de partout

    De plus, de manière générale,
    Pour comprendre où ca merdouille, je conseille de lancer l'exécution de la macro en mode pas à pas (touche F8)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [excel] Liste déroulante: lien vers des valeurs
    Par Rémirem dans le forum Excel
    Réponses: 2
    Dernier message: 19/07/2007, 10h21
  2. [excel]liste déroulante fabrication
    Par guismoman33 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/02/2007, 11h01
  3. Excel - Liste déroulante petit soucis
    Par ricolarico dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/01/2007, 12h43
  4. [VBA-EXCEL] Liste déroulante
    Par cd090580 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 21/07/2006, 08h34
  5. [Débutant] VBA Excel : Liste déroulante
    Par ptitsoleil87 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/12/2005, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo