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 :

Sélectionner des fichiers contenus dans un dossier [XL-2016]


Sujet :

Macros et VBA Excel

  1. #21
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    bon apres test avec le sleep on est au meme niveau que le vrai getopenfilename

    vrai getopenfilename

    Nom : demo3.gif
Affichages : 230
Taille : 534,9 Ko

    faux geopenfilname

    Nom : demo2.gif
Affichages : 223
Taille : 388,9 Ko
    le vrai getopenfilname mange 1% de memoire en plus visiblement mais c'est occillant pour le procc c'est sensiblement pareil

    sachant que le test c'est fait avec licecap pour enregistrer les captures on est tranquille
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #22
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    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
    C'est de la température du processeur, que l'on parle, pas du reste.
    Et cette température a des incidences (certaines immédiates et d'autres à longue échéance) sur beaucoup de choses, à commencer par la longévité du processeur, mais également sur des ralentissements provoqués par le système pour tenter de ne pas trop surchauffer.
    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.

  3. #23
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bref oui doevents peut augmenter la charge procc mais sans lui ou un timer il y a beaucoup de chose que l'on pourrait pas faire en vba avec sleep je fait bien dormier le proc

    un timer ok faut il encore que l'utilisateur sache deboguer et surtout l'arreter j'ai pas de soucis avec lui mais c'est pas le cas de tout le monde

    @unparia
    si c'est la temperature alors il faudrait s'inquiéter aussi avec le vrai Getopenfilename les graphique animés de la fenetre des taches le montre

    je travaille sur une version sans doevents et sans timer et oui c'est possible!!!!! j'ai seulement besoins de temps pour reflechir a la possibilité de ce nouveau principe utilisant la particularité d'une variable a 2 type et pour le 2d type 2 etat
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #24
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    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
    les graphique animés de la fenetre des taches le montre
    En aucun cas. Ces graphiques animés ne montrent absolument pas la température du processeur.
    Ce que je peux te dire, c'est que sur ma machine (par exemple), je peux (sans aucun programme de relevé de température) entendre le ventilateur du processeur s'accélérer. Et si je laisse longtemps (en m'absentant, par exemple, suffisamment longtemps) la boucle de doevents, ce n'est plus une simple accélération, mais un véritable "énervement", que l'on finit par percevoir à "oreille nue".
    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. #25
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    re
    oui j'ai compris mais comment explique tu cette chauffe parce que aparement avec les sleep le procc dodo

    ensuite
    un premier jet sur le userform se comportant comme la boite de dialog sans doevents sans timer

    le seul travail du procc c'est d'afficher le userform
    le principe est simple en soi
    lancer la sub d'appel test10 et la stoper avant le test .count
    elle apelle la la fonction getopenfilenameX qui ne fait rien d'autre qu'afficher le userform et remplir la listbox avec dir en boucle et elle termine

    dans le userform les bouton ouvrir et annuler mettent la variable "ok" a true
    le bouton annuler ferme le userform avec le message d'annulation
    le bouton ouvrir ferme si il y a rien de selectionné ou rapelle la sub test10 ela fait reprendre juste pres ou elle a été stopée
    pas de gestion d'atente de quelque maniere que se soit

    c'est une puré d'entourloupepette

    code userform avec les meme controls que les versions precedentes

    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
    Private Sub CommandButton1_Click()
        ok = True
        Dim i, a
        With liste
            For i = 0 To .ListCount - 1:
                If .selected(i) = True Then a = a + 1: listefichier.selected(a) = .list(i): listefichier.count = a
            Next
        End With
        If a > 0 Then test10 Else MsgBox " aucun fichier selectionné": ok = False
     Unload Me
    End Sub
    Private Sub CommandButton2_Click()
       ok = False: MsgBox "vous avez anuller": Unload Me
    End Sub
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        ok = True: listefichier.count = 0
        test10
    End Sub
    code module standard

    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
    Public Type ch
        count As Long
        selected(1000) As String
    End Type
    Public ok As Boolean
    Public listefichier As ch
    Private Function GetopenFileNameX(dossier As String) As ch
        Dim fich
        fich = Dir(dossier & "*.*")
        Do: UserForm2.liste.AddItem fich: fich = Dir: Loop While fich <> ""
        UserForm2.Show 0
    End Function
    Public Sub test10()
        If ok = True Then GoTo passe
           ChDir "C:\Users\polux\Desktop\"
        listefichier = GetopenFileNameX(CurDir & "\"): ok = False: Exit Sub
    passe:
        If listefichier.count > 0 Then
            For i = 1 To listefichier.count
                Debug.Print CurDir & "\" & listefichier.selected(i)
            Next
        End If
    ok = False
    End Sub
    lancer la sub test10
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #26
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    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
    Oui, bon ...
    J'arrête maintenant là ma participation, hein ...
    Tout cela pour en arriver à ce qui aurait tout simplement suffi de mettre en place d'emblée : une listbox et un bouton de commande.
    Nul besoin d'une boucle Do .. loop une fois abondée la listbox.
    Et aucun besoin d' "imiter" une autre boîte de dialogue (dans quel but et avec quel bénéfice ?).
    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.

  7. #27
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 524
    Points
    14 524
    Par défaut
    Bonjour,

    J'ajoute un lien sur un tutoriel pour créer des formulaires "boites de dialogue" :
    https://arkham46.developpez.com/arti...serformdialog/

    On peut s'en sortir sans boucle d'attente.

  8. #28
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    RE
    respect arkham je viens de tester
    je l'ignorais que l'on pouvais appeler le userform comme ca "=new userform"
    et oui a partir de ce moment tant que le unload n'a pas eu lieu c'est bloqué du moins pour ce que j'en ai compris
    je vais potasser la question
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  9. #29
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bon c'est ok
    j'ai compris le principe du hide et le fait que le userform se decharge du fait meme de la creation d'une instance de lui meme dans la fonction et qu'il est en mode modal
    il se decharge donc en fin de fonction
    j'ai tout bon ?
    a ben.. si j'avais su

    puré je sens des belles boites de dialog perso moi fini les hta dynamique
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  10. #30
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    je depose le modele avec ce principe au cas ou

    code userform avec les meme controls que les version precedente a savoir
    un label un testebox,une listbos 2 bouton (ouvrir/Annuler)

    code userform
    Option Explicit

    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
    Public DiagOK As Boolean ' Flag pour validation
     
    ' Sur clic sur Valider
    Private Sub btnOK_Click()
    DiagOK = True ' Flag OK
    Me.Hide ' Masque le UserForm
    End Sub
     
    ' Sur clic sur Annuler
    Private Sub btnCancel_Click()
    Me.Hide ' Masque le UserForm
    End Sub
     
    ' Sur demande de fermeture
    Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
        Me.Hide ' Masque le UserForm
        Cancel = True ' Annule la fermeture
    End Sub
    code dans un module standard
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    Public Type ch: list() As String: Count As Long: End Type 'propriété de fichiers
    Dim t As ch
    Sub test11()
        Dim fichiers As ch
        ChDir Environ("userprofile") & "\DeskTop"
        fichiers = GetOpenFileNameX(CurDir)
        If fichiers.Count > 0 Then
     
            For Each fich In fichiers.list
            Debug.Print fich
            Next
            'ou boucle ""for "" sur le lbound/ubound ou meme le fichiers.count puisque je l'ai mis et dispo
           ' For i = 0 To UBound(fichiers.list)
                'Debug.Print fichiers.list(i)
           ' Next
        Else
            MsgBox "pas de fichier selectionné"
        End If
    End Sub
    Function GetOpenFileNameX(dossier) As ch
        Dim a, i
        ' Création du UserForm
        With New frmDiagInput2
            .Caption = "choisir un /des fichier(s)"    ' Titre de la fenêtre
            .chemin.Text = dossier    ' chemin  dans l'étiquette du dossier
            'liste les fichier du dossier en parametre dans la listbox de l'useform
            fich = Dir(dossier & "\*.*"): Do: .listefichier.AddItem fich: fich = Dir: Loop While fich <> ""
            .Show   ' Rend visible le UserForm en mode modal(modal important) l'attente est basé dessus
            a = 0
            ' Test bouton Ouvrir ou Annuler si flag DiagOK on a la liste ou il reste vide (count=0)
            If .DiagOK Then
                For i = 0 To .listefichier.ListCount - 1
                    If .listefichier.Selected(i) Then
                        ReDim Preserve t.list(0 To a)
                        t.list(a) = dossier & "\" & .listefichier.list(i): a = a + 1:
                        t.Count = a
                    End If
                Next
                GetOpenFileNameX = t
            End If
        End With
    End Function
    absolument nickel ca va plaire au Pc de unparia ca

    curt si tu repasse par la prends cette version elle definitivement plus clean
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #31
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    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
    ca va plaire au Pc de unparia ca
    Oh .. Tu sais (ou ne sais pas encore) : mon PC est comme moi -->> il aime la sobriété et n'aime pas tout ce qui alourdit inutilement.
    D'autant que l'on ne sait même pas encore (jamais dit depuis le début de cette discussion) si :
    je cherche à ouvrir une sélection de fichier
    se fait ou non depuis déjà un userform (auquel cas mon PC "aimera" un simple Frame et son caption (genre "sélectionner vos fichiers") avec une listbox - alimentée par Dir - multiselect et deux boutons de commande - Le frame et ses contrôles, invisibles au départ, ne devenant visible et au premier plan que lorsque le code le voudra et redevenant invisible dès le clic de l'un des deux boutons "Exécuter" et/ou "annuler").
    Ni mon PC ni moi ne "gourmanderons" une autre présentation inutilement gourmande.
    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.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 6
    Dernier message: 26/03/2014, 15h20
  2. Réponses: 21
    Dernier message: 27/04/2013, 17h27
  3. exécuter des jars contenus dans un dossier
    Par Balbuzard dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 05/09/2008, 11h07
  4. Lister des fichiers contenus dans un répertoire
    Par mithrendil dans le forum Langage
    Réponses: 5
    Dernier message: 01/05/2007, 09h27
  5. Réponses: 9
    Dernier message: 27/10/2005, 22h38

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