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 :

Proposer plusieurs répertoires d'enregistrement


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai

    Homme Profil pro
    Développeur
    Inscrit en
    Février 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2016
    Messages : 8
    Points : 12
    Points
    12
    Billets dans le blog
    1
    Par défaut Proposer plusieurs répertoires d'enregistrement
    Bonjour,
    Je suis débutant en VBA, voici ci-joint le code que j'ai réaliser qui permet d'exporter le fichier .xls au format .txt avec un nom bien précis.
    Mon code permet d'ouvrir une boite de dialogue pour choisir un répertoire d'enregistrement. Je voudrais changer mon code au lieu d'avoir une boîte de dialogue qui s'affiche. Je souhaiterais mettre en place une fenêtre avec plusieurs choix de répertoires, exemple:
    quand je clique sur mon bouton exporter fichier en .txt il m'affiche une fenêtre avec ces cases:
    ****************************************
    Sélectionner votre répertoire d’enregistrement :
    X - 1 dossier c:/dossier_admi
    - 2 dossier d:/dossier_admi2
    ****************************************
    Ensuite:
    + un message vous confirmez l'enregistrement de votre fichier dans votre dossier c:/dossier_admi oui ou non
    ****************************************
    une dernier message :
    votre fichier à bien été enregistrer dans c:/ ou d:/
    ****************************************
    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
    Sub Export()
     Dim linenumber As Integer
       Dim strFiles
       Dim Plage As Object, oL As Object, oC As Object, Tmp$, Sep$, i As String 'Déclaration des variable
    strFiles = Application.GetSaveAsFilename _
               (filefilter:="Fichiers txt (*.txt),*.txt", InitialFileName:="test", Title:="Sélectionnez les fichiers à ouvrir") 
    Set Plage = ActiveSheet.Range("O2:O" & ActiveSheet.Range("A65500").End(xlUp).Row) 
    Open strFiles For Output As #1   '
    'Initialisation d 'un compteur de ligne
    linenumber = 2
    For Each oL In Plage.Rows
    Tmp = ""
     
    For Each oC In oL.Cells
    'Si la cellule (F, line-number) est X
    If (Cells(linenumber, 6).Value = "X") Then
    Tmp = Tmp & CStr(oC.Text) & Sep
    'Sinon rien
    End If
    Next
    Print #1, Tmp
    'Incrémentation du compteur
    linenumber = linenumber + 1
    Next
    Close
    End Sub
    ************PAR AVANCE MERCI**********************************

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Si tu veux donner un choix restreint de dossiers où il serait possible d'enregistrer pour l'utilisateur, tu peux utiliser une Form avec une ListBox contenant les dossiers cibles choisis préalablement.

    Balise ton code (bouton # puis colle ton code entre les balises)

  3. #3
    Membre à l'essai

    Homme Profil pro
    Développeur
    Inscrit en
    Février 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2016
    Messages : 8
    Points : 12
    Points
    12
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Merci pour votre réponse, je schématise mes questions, j'ai un bouton "export" dans ma feuille xsl, le suivant: Nom : Capture.PNG
Affichages : 157
Taille : 2,8 Ko
    Je voudrais quand je clique sur export... me dirigera vers cette fenêtre :
    Nom : Captusre.PNG
Affichages : 126
Taille : 7,8 Ko
    Donc, chaque case est relié un chemin du répertoire donnée...dossier_photo et l'autre ...
    Quand je couche une case après l'enrgi je voudrais trouvé mon fichier dans le dossier adéquate.
    Merci,

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour,
    J'opterais personnellement pour flexibilité et évolutivité.
    A cette fin :
    - je réserverais une feuille nommée mesreps et y mettrais en colonne A, à partir de A1, mes chemins de dossiers (autant que nécessaires)
    - sur ma feuille : un bouton de commande nommé choix_dossier
    - une listbox nommée Listbox1 avec sa propriété visible à False
    et ce code tout bête :
    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
    Private Sub choix_dossier_Click()
     With ListBox1
       .Left = choix_dossier.Left
       .Top = choix_dossier.Top + choix_dossier.Height
       With Worksheets("mesreps")
         Large = .Range("A1").Width
         derl = .Range("A" & Rows.Count).End(xlUp).Row
       End With
       .ListFillRange = "mesreps!A1:A" & derl
       .Width = Large
       .Visible = True
     End With
    End Sub
    Private Sub ListBox1_Click()
      dossier_choisi = ListBox1.List(ListBox1.ListIndex)
      If MsgBox("confirmez-vous l'enregistrement dans " & dossier_choisi & "?", vbYesNo) = vbYes Then
        ' ici tes instructions d'enregistrement dans ce dossier
        MsgBox "enregistré dans " & dossier_choisi
      End If
      ListBox1.Visible = False
    End Sub
    toujours vrai et évolutif à volonté
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Donc, chaque case est relié un chemin du répertoire donnée...dossier_photo et l'autre ...
    Quand je couche une case après l'enrgi je voudrais trouvé mon fichier dans le dossier adéquate.
    Dans ce cas, il te faux utiliser non pas des CheckBox mais des OptionButton afin de ne pouvoir en choisir qu'un seul et dans ce cas, tu peux utiliser la propriété "Tag" de chaque OptionButton pour y stocker le chemin du dossier.
    En mode "Création", dans la propriété "Tag" (en bas à gauche) tu inscris le dossier correspondant et en exécution tu récupère la valeur de "Tag" :
    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
     
    Sub Export()
     
        Dim linenumber As Integer
        Dim strFiles
        Dim Plage As Object, oL As Object, oC As Object, Tmp$, Sep$, i As String 'Déclaration des variable
     
        'défini le dossier cible
        If OptionButton1.Value = True Then strFiles = OptionButton1.Tag
        If OptionButton2.Value = True Then strFiles = OptionButton2.Tag
     
        'si pas de choix effectué
        If strFiles = "" Then
     
            MsgBox "Vous devez choisir une des deux destinations !"
            Exit Sub
     
        End If
     
        'ici, le reste de ton code...
        '...
        '...
     
    End Sub

  6. #6
    Membre à l'essai

    Homme Profil pro
    Développeur
    Inscrit en
    Février 2016
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Février 2016
    Messages : 8
    Points : 12
    Points
    12
    Billets dans le blog
    1
    Par défaut
    Theze, unparia,
    Je vous remercie beaucoup. C'est vraiment très intéressant tout ça et va me donner matière pour évoluer mon code.
    Theze@ te serait-il possible de donner plus de détails, j'ai opté pour ta proposition mais j'ai encore un souci concernant le chemins d'enregistrement:
    1 : J'ai pas réussi à paramétrer la propriété "Tag" de chaque OptionButton pour y stocker le chemin du dossier.
    2: je re-schématise:
    > Je clique sur lance export
    > j'ai mon formulaire qui s'affiche
    > Choisir optionbutton 1 ça fonction le 2 non
    Nom : Capture.PNG
Affichages : 131
Taille : 19,0 Ko
    ---------------------------------voici le code associe au formulaire ------------
    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
    Private Sub OptionButton1_Click()
        retval = MsgBox("Etes-vous sûre d'enregistrer dans le repertoire" & _
                    vbNewLine & "d:\dossier_admi2 ?", vbYesNo, "ENREGISTREMENT FICHIER TXT")
        If retval = vbYes Then
            Call Export("d:\dossier_admi2\")
            Unload Me
        Else
            MsgBox "Changez de repertoire ou Sortez Sans enregistrer !!!"
        End If
    End Sub
     
    Private Sub OptionButton2_Click()
        retval = MsgBox("Etes-vous sûre d'enregistrer dans le repertoire" & _
                    vbNewLine & "c:\dossier_admi ?", vbYesNo, "ENREGISTREMENT FICHIER TXT")
        If retval = vbYes Then
            Call Export("d:\dossier_admi2\")
            Unload Me
        Else
            MsgBox "Changez de repertoire ou Sortez Sans enregistrer !!!"
        End If
    End Sub
    -------------------------------------------------------------------------module : ------------------------
    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
    30
    31
    Sub UF()
        UF_Rep_Enreg.Show
    End Sub
     
    Sub Export(Repertoire)
        Dim strFiles
        Dim Plage As Object, oL As Object, oC As Object, Tmp$, Sep$, i As String 'Déclaration des variables
     
        Repertoire = "C:\Users\Dell\Desktop\Nouveau dossier\_TXT\"
     
        strFiles = Repertoire & "test.txt"
        Set Plage = ActiveSheet.Range("O2:O" & ActiveSheet.Range("A65500").End(xlUp).Row)
        Open strFiles For Output As #1 '
            'Initialisation d 'un compteur de ligne
            Sep = "-"
            For Each oL In Plage.Rows
                LP = oL.Row
                Tmp = ""
                For Each oC In oL.Cells
                    'Si la cellule (F, line-number) est X
                    If (Cells(LP, 6) = "X") Then
                        Tmp = Tmp & CStr(oL) & Sep
                    End If
                Next oC
                If Tmp <> "" Then Print #1, Tmp
            Next oL
        Close
     
        MsgBox "Fichier enrgeistre dans repertoire " & Repertoire & " , Bye ...!!!!!!"
     
    End Sub
    Comme tu le constate dans le module y a un seul chemin.
    Je souhaiterais avoir 2:

    Un grand merci encore,

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    En mode création, tu sélectionnes une de tes deux OptionButton et ensuite, dans la fenêtre en bas à gauche tu cherches la propriété "Tag" (sous "TabStop") et là, tu cliques dans le champ vide à droite et tu entres ton chemin puis tu fais de même pour la seconde et enfin, tu adaptes le code que je t'ai posté plus haut.

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/04/2015, 16h23
  2. Thread: proposer plusieurs méthodes execute?
    Par Gaadek dans le forum Delphi
    Réponses: 6
    Dernier message: 15/03/2007, 23h16
  3. Comment proposer plusieurs designs aux visiteurs ?
    Par TheDoci dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 26/03/2006, 16h08
  4. [VBS] Tester plusieurs répertoire avec un seul If
    Par Edoxituz dans le forum VBScript
    Réponses: 38
    Dernier message: 25/02/2006, 20h18
  5. [MAVEN] Plusieurs répertoires source
    Par missllyss dans le forum Maven
    Réponses: 1
    Dernier message: 09/08/2005, 14h33

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