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 :

Cocher une case quand bouton activé [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil AMO BIM
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Conseil AMO BIM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Cocher une case quand bouton activé
    Bonjour,

    J'ai créé un bouton avec un code VBA pour ouvrir l'explorateur windows, sélectionner un ou des fichiers et les coller dans un autre dossier.
    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
    Sub Chauffage_Pompe_FT()
    Dim Fichier As Variant
    Dim NomFichier As String
    Dim I As Integer
    Dim RepEnfant As String
    RepEnfant = ThisWorkbook.Path & "\TEST"
     
    Fichier = Application.GetOpenFilename(Title:="Sélection multiple", MultiSelect:=True)
     
    If TypeName(Fichier) = "Boolean" Then
      Exit Sub
    Else
      For I = 1 To UBound(Fichier)
        NomFichier = Mid(Fichier(I), InStrRev(Fichier(I), "\") + 1)
        FileCopy Fichier(I), ThisWorkbook.Path & "\Docs\Chauffage\Pompe\Fiches_techniques" & "\" & NomFichier
      Next
    End If
    End Sub
    Cela fonctionne bien.

    Ce que j'aimerais ajouter, c'est qu'une case soit cochée quand l'action a été effectuée, mais qu'elle ne le soit pas si aucun document n'est sélectionné (lorsque l'on quitte l'explorateur sans avoir cliqué sur "ouvrir").
    Je vous remercie d'avance pour votre aide

    MP_TIPEE

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par MP_TIPEE Voir le message
    Bonjour,

    Dans ce cas, Fichier = False. C'est le résultat également de votre test dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If TypeName(Fichier) = "Boolean" Then
      Exit Sub
    Else
    Ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    If Fichier = False Then
      Exit Sub
    Else
    Donc votre case à cocher = Fichier.

  3. #3
    Candidat au Club
    Homme Profil pro
    Conseil AMO BIM
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Conseil AMO BIM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour et merci pour votre réponse rapide,

    Je galère un peu (j'ai commencer le VBA hier matin ) mais j'apprends vite, enfin j'espère.

    Pour l'instant j'ai utilisé des boutons de la partie "contrôle de formulaire", mais d'après ce que je lis à droite et à gauche c'est peut-être pas la meilleure idée.
    J'ai essayé d'insérer une case à cocher de la partie "Active X" que j'ai nommé CB1.

    Puis j'ai modifier le code en ajoutant une ligne pour mettre la valeur de cette cas à True avec le code de mon bouton.
    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
     
    Sub Chauffage_Pompe_FT()
    Dim Fichier As Variant
    Dim NomFichier As String
    Dim I As Integer
    Dim RepEnfant As String
    RepEnfant = ThisWorkbook.Path & "\TEST"
     
    Fichier = Application.GetOpenFilename(Title:="Sélection multiple", MultiSelect:=True)
     
    If TypeName(Fichier) = "Boolean" Then
      Exit Sub
    Else
      For I = 1 To UBound(Fichier)
        NomFichier = Mid(Fichier(I), InStrRev(Fichier(I), "\") + 1)
        FileCopy Fichier(I), ThisWorkbook.Path & "\Docs\Chauffage\Pompe\Fiches_techniques" & "\" & NomFichier
        ThisWorkbook.CB1.Value = True
      Next
    End If
    End Sub
    Ça ne bug pas mais rien ne se passe.

    Peut-être faut-il utiliser une case à cocher de la partie formulaire, mais je ne voit pas comment la nommer pour y faire appel dans le code du bouton.

    Je ne suis pas sûr que cela soit très clair, si ça n'est pas le cas dîtes-le moi, je préciserai mon problème.

    Tks

  4. #4
    Membre du Club Avatar de fuine0069
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juillet 2017
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2017
    Messages : 33
    Points : 42
    Points
    42
    Par défaut
    essaie de mettre l'action de cocher AVANT de faire le copy?

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ça ne bug pas mais rien ne se passe
    C'est très étonnant ce que tu écris car pour moi cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.CB1.Value = True
    doit déclencher une erreur
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre du Club Avatar de fuine0069
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Juillet 2017
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2017
    Messages : 33
    Points : 42
    Points
    42
    Par défaut
    si tu mets juste AVANT de faire le copy, ca devrait fonctionner

  7. #7
    Candidat au Club
    Homme Profil pro
    Conseil AMO BIM
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Conseil AMO BIM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    En fait, je viens de tester de mettre cette ligne avant le copy et ça me renvoie une erreur de compilation. Donc bonne nouvelle, ça bug

  8. #8
    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 Philippe Tulliez

    C'est très étonnant ce que tu écris car pour moi cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part

    ThisWorkbook.CB1.Value = True

    doit déclencher une erreur

    Sauf s'il est resté avec l'éditeur en mode erreur
    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.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Unparia,
    Sauf s'il est resté avec l'éditeur en mode erreur
    C'est ce que j'avais soupçonné mais devant cette affirmation "Ça ne bug pas mais rien ne se passe", je m'incline
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  10. #10
    Candidat au Club
    Homme Profil pro
    Conseil AMO BIM
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Conseil AMO BIM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Ok, je n'ai manifestement pas compris ce que m'indiquait Eric Kergresse.

    Peut-être que la macro doit être attachée à la case à cocher plutôt qu'au bouton.
    Quelle serait la bonne piste pour résoudre mon problème ?

    Merci d'avance

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ok, je n'ai manifestement pas compris ce que m'indiquait Eric Kergresse.
    Pourtant il me semble que le commentaire d'Eric que je salue au passage est extrèment clair et il suffisait de faire un copier/coller de son code pour se rendre compte que cela fonctionnait.

    Ce que tu souhaites faire en plus si j'ai bien compris c'est de cocher par programme le contrôle ActiveX si le fichier a été sélectionné
    Alors je ne sais pas où tu as été chercher cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.CB1.Value = True
    car un contrôle ActiveX appartient à une feuille et pas au classeur donc la ligne de code ci-dessous fonctionnera mieux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Feuil1").OLEObjects("CB1").Object.Value = True
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Feuil1").CB1.Object.Value = True
    ou encore, encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Feuil1").CB1.Value = True
    et encore plus court en utilisant le CodeName de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Feuil1.CB1.Value = True
    Mais il serait préférable de prévoir le passage à False si l'utilisateur clique sur Annuler
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If TypeName(Fichier) = "Boolean" Then
      Feuil1.CB1.Value = False: Exit Sub
     Else
      Feuil1.CB1.Value = True
      For I = 1 To UBound(Fichier)
        NomFichier = Mid(Fichier(I), InStrRev(Fichier(I), "\") + 1)
        FileCopy Fichier(I), ThisWorkbook.Path & "\Docs\Chauffage\Pompe\Fiches_techniques" & "\" & NomFichier
      Next
    End If
    Et personnellement je préfère VarType que TypeName et donc il est possible de tester le type booléen comme la ligne ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If VarType(Fichier) = vbBoolean Then
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  12. #12
    Candidat au Club
    Homme Profil pro
    Conseil AMO BIM
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Conseil AMO BIM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonsoir Philippe Tulliez,
    Citation Envoyé par Philippe Tulliez Voir le message
    Pourtant il me semble que le commentaire d'Eric que je salue au passage est extrèment clair et il suffisait de faire un copier/coller de son code pour se rendre compte que cela fonctionnait.
    Je ne voulais pas dire que cela n'était pas clair, seulement que je n'avais pas saisi.

    Le code que vous m'avez indiqué fonctionne parfaitement Je vous remercie pour votre aide ! Et oui, j'ai conscience que la formulation de mon problème était un peu candide, mais il faut bien commencer quelque part. En tout cas, le peu que j'ai réussi à faire en suivant des topics sur ce forum m'a motivé à me lancer dans le VBA pour excel !

    Encore merci et bon week-end à tous !

  13. #13
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 767
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Personnellement j'utiliserais une constante à placer en tête de procédure ou en tête de module contenant la valeur des sous-répertoires ("\Docs\Chauffage\Pompe\Fiches_techniques\") ou mieux encore dans une cellule d'une feuille paramètre. Cela facilite la maintenance.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  14. #14
    Candidat au Club
    Homme Profil pro
    Conseil AMO BIM
    Inscrit en
    Juillet 2017
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Conseil AMO BIM
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2017
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonjour Philippe Tulliez,

    Merci pour le conseil, je vais regarder ça parce qu'effectivement, j'ai beaucoup de répertoires différents et mon outil est appelé à évoluer dans les mois à venir.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/11/2007, 11h03
  2. peut on cocher, une case a cocher, automatiquement ?
    Par MCarole dans le forum Access
    Réponses: 19
    Dernier message: 17/07/2006, 14h25
  3. Cocher une case à cocher lorsque la feuille est protégée
    Par damsmut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/07/2006, 10h04
  4. cocher une case+affichage de dates
    Par Toff !!!!! dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 10h07
  5. Cocher une case avec affichage automatique
    Par Toff !!!!! dans le forum Access
    Réponses: 3
    Dernier message: 27/09/2005, 13h36

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