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 :

Double Click avec des conditions


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
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2018
    Messages : 12
    Par défaut Double Click avec des conditions
    Bonjour,

    J'ai une difficulté qui me bloque pour finaliser mon support et sollicite des compétences que je n'ai pas.

    Le principe de mon support est le suivant :
    lorsque je sélectionne un processus (A, B ouC) (cf colonne C3 dans le fichier ci-joint), le nom des boutons de commande apparaissent selon le processus sélectionné. Exemple : si je sélectionne le processus A, les boutons "Fichier courrier" et "Fiche inscription" vont apparaître respectivement dans les cellules C9 et C11. Mon objectif ensuite est que le fichier (spécifique à la cellule) puisse s'ouvrir lorsque l'utilisateur double clique sur la cellule correspondante. Les fichiers se trouvent dans un répertoire F:\
    Il n'y aurait aucune action sur la cellule E9 et C13 sachant que ces cellules correspondent à un autre processus.

    Il faut que la macro intégre également les conditions si je sélectionne le processus B, C.

    Je souhaiterai que la cellule G9 apparaissent tout le temps quelque soit le processus sélectionné car je considère que ce document concerné tout le monde.

    J'espère avoir été le plus précis possible pour vous faire part de ma difficulté et vous remercie par avance pour votre aide.

    Cédric
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 511
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 511
    Par défaut
    Salut,

    Premier point, ayons un vocabulaire précis, ce sont des cellules que tu manipules et non des boutons (ce ne sont pas les mêmes objets, ils n'ont pas le même comportement).

    Ensuite (et le message d'erreur est très clair !!!) la propriété Adress n'existe pas, c'est la propriété Address que tu veux.
    L'auto-complétions aurait dû te l'indiquer.
    L'explorateur d'objets te l'indique également (Menu: Affichage ==> Explorateur d'objets, ou raccourcis clavier: F2).

    Utilise des références explicites et non implicites.

    Enfin, annule l'evennement (paramètre Cancel), histoire de ne pas entrer en mode édition de cellule.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je n'ouvre jamais les classeurs joints car je privilégie une bonne explication avec illustrations éventuelles, ce qui permet à chaque lecteur de pouvoir comprendre ce que l'initiateur de la discussion veut.

    Cependant à la lecture de la réponse de deedolith, que je salue au passage, je comprends que vous voulez utiliser le double clic dans une ou plusieurs cellules d'une feuille en vue d'invoquer une procédure Sub ou Function

    Il y a plusieurs possibilités pour obtenir ce que vous souhaitez.
    1. utiliser une procédure événementielle suite à un double clic, un clic droit dans une cellule ou tout autre événement lié à cet objet.
    2. utiliser un bouton "Formulaire" qui permet de renvoyer à une procédure Sub (appelé également macro)
    3. utiliser un bouton ActiveX qui réagit également à une procédure événementielle
    4. utiliser une forme qui permet également d'être assignée à une procédure


    Si vous utiliser le cas
    1. vous devez dans la procédure événementielle utiliser une structure décisionnelle comme par exemple If..Then..Else, Select Case, etc.
    2. vous devez affecter une procédure à ce bouton
    3. vous devez programmer une action dans la procédure événementielle de ce bouton
    4. vous pouvez affecter une macro à une forme


    C'est le dernier cas que je privilégierais si comme je l'ai compris vous compter utiliser plusieurs boutons.

    En effet, l'avantage d'utiliser une forme vous permet de renvoyer le clic de l'ensemble des boutons vers la même procédure et dans celle-ci détecter sur quel bouton on a cliqué et ainsi effectuer également un test;
    Plus simple pour la maintenance. Quand on ajoute une forme, on va simplement ajouter une ligne dans la procédure en question pour effectuer une opération quelconque
    Autre avantage, on peut faire appel à notre créativité pour dessiner un beau bouton.

    Dans le scénario que je vous propose chaque process doit avoir sa propre procédure que j'ai nommée ici DestructionFichier et AjoutProduit et dans lesquelles j'ai simplement placé l'instruction MsgBox

    Code des deux procédures en question insérées dans un module nommé mOnAction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub DestructionFichier()
      MsgBox "Vous avez activé la procédure Destruction de fichier"
    End Sub
     
    Sub AjoutProduit()
      MsgBox "Vous avez activé la procédure Ajout produit"
    End Sub
    Exemple pour le cas 1 (voir la première illustration pour comprendre les adresses $B$3 et $D$$3)

    Attention pour cet exemple les cellules en question ne peuvent être fusionnées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
       Cancel = True
       Select Case Target.Address
         Case "$B$3": mOnAction.AjoutProduit
         Case "$D$3": mOnAction.DestructionFichier
         CAjoutProduitase Else
           Cancel = False
       End Select
    End Sub
    Pour le cas 2 (voir la première illustration)
    On fait simplement un clic droit sur le bouton et on sélectionne la procédure (ici AjoutProduit)

    Illustration 1

    Nom : 230104 dvp Button and Range to Process.png
Affichages : 119
Taille : 22,2 Ko

    Pour le cas n° 4
    En ce qui concerne la forme
    1. on dessine une forme quelconque
    2. on la renomme explicitement dans la zone des noms avec en plus idéalement un préfixe (ici btn) voir flèche dans l'illustration 2)
    3. on affecte la procédure à la forme (dans l'exemple


    Dans la procédure DispatchProcess
    On utilisera l'instruction Application.Caller qui permettra de dispatcher vers la procédure adéquate.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub DispatchProcess()
      Dim b As String
      b = Application.Caller  ' Renvoie le nom de la forme sélectionnée
      Select Case b
        Case "btnAjoutProduit"
          AjoutProduit
        Case Else
          MsgBox "Pas encore de procédure assignée à la forme nommée : " & b
      End Select
    End Sub
    Illustration N° 2

    Nom : 230104 dvp Form Process.png
Affichages : 124
Taille : 27,9 Ko
    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

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Pourquoi ne pas utiliser le formule Lien_Hypertexte ?
    Dans tes cellules "boutons", tu modifies tes formules dans ce gout là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI($C$3="PROCESSUS C";LIEN_HYPERTEXTE("F:\Documentations\Controle_Interne\FICHE R.pdf";"Fichier R");"")
    Avec cette méthode, tu peux même limiter ton nombre de bouton en imbriquant des conditions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI($C$3="PROCESSUS A";LIEN_HYPERTEXTE("F:\Documentations\Controle_Interne\Fichier Courrier.pdf";"Fichier Courrier");SI($C$3="PROCESSUS B";LIEN_HYPERTEXTE("F:\Documentations\Controle_Interne\Fichier Gestion.pdf";"Fichier Gestion");SI($C$3="PROCESSUS C";LIEN_HYPERTEXTE("F:\Documentations\Controle_Interne\Fichier R.pdf";"Fichier R");"")))
    Il serait possible d'améliorer la chose pour la rendre plus facilement maintenable et créant un tableau regroupant quels boutons pour quel choix de procesus.
    Ensuite dans la formule du "bouton", tu vas chercher le chemin du fichier (et le nom friendly) dans le tableau via une rechercheX (ou un index + equiv en fonction de ta version).


    [Edit]
    ça pourrait donner ça
    Nom : 2023-01-04_21h18_57.png
Affichages : 114
Taille : 69,1 Ko

    Les formules des bouton 1 é deux seraient les suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    =SIERREUR(LIEN_HYPERTEXTE(INDEX(Tableau1[URL Fichier1];EQUIV($C$3;Tableau1[Processus];0));INDEX(Tableau1[Label1];EQUIV($C$3;Tableau1[Processus];0)));"")
     
    =SIERREUR(SI(INDEX(Tableau1[URL Fichier2];EQUIV($C$3;Tableau1[Processus];0))<>0;LIEN_HYPERTEXTE(INDEX(Tableau1[URL Fichier2];EQUIV($C$3;Tableau1[Processus];0));INDEX(Tableau1[Label2];EQUIV($C$3;Tableau1[Processus];0)));"");"")
    La liste de la validation est prise directement sur la 1ère colonne du tableau structuré

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message

    Exemple pour le cas 1 (voir la première illustration pour comprendre les adresses $B$3 et $D$$3)

    Attention pour cet exemple les cellules en question ne peuvent être fusionnées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
       Cancel = True
       Select Case Target.Address
         Case "$B$3": mOnAction.AjoutProduit
         Case "$D$3": mOnAction.DestructionFichier
         CAjoutProduitase Else
           Cancel = False
       End Select
    End Sub

    Bonjour,

    en utilisant la propriété Cells() de target, on peut travailler sur la cellule fusionnée non ?
    (même si je proscris toujours la fusion)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Target.Cells(1, 1).Address

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour Joe,
    en utilisant la propriété Cells() de target, on peut travailler sur la cellule fusionnée non ?
    (même si je proscris toujours la fusion)
    Bien entendu, tu as tout à fait raison
    J'ai ajouté la phrase en indiquant bien que c'était par rapport à mon exemple qui n'utilisait pas cette propriété mais je suppose que ce n'était pas suffisamment explicite.
    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

  7. #7
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je voulais également m'assurer que je ne passais pas à côté d'une subtilité non prévue avec Cells()

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

Discussions similaires

  1. Paginate avec des conditions sur les clés etrangères.
    Par CeDRiC08 dans le forum Ruby on Rails
    Réponses: 3
    Dernier message: 03/07/2007, 09h49
  2. Réponses: 3
    Dernier message: 08/05/2007, 17h32
  3. Makefile avec des conditions
    Par meufeu dans le forum Linux
    Réponses: 2
    Dernier message: 04/08/2006, 11h46
  4. Réponses: 1
    Dernier message: 30/06/2006, 16h01
  5. [ASE][T-SQL] Appel d'une sous-proc avec des conditions
    Par metheorn dans le forum Sybase
    Réponses: 1
    Dernier message: 19/05/2006, 18h38

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