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 :

deux boutons qui appellent la même procédure


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut deux boutons qui appellent la même procédure
    Hello!

    J'ai 2 boutons créé dans excel, voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Copier2_Click()
    Call Recuperer_Click(1)
    End Sub
     
    Private Sub Recuperer_Click(Optional j)
    instructions...
    if j = 1 then
    entree = Application.InputBox(prompt:="indiquer la date format jj.mm.aaaa", Title:="choisir la date", Type:=8)
    jourtravail = entree
    End If
    instructions...
    End Sub
    Quand je lance le code il met une erreur de compilation. Est-ce que c'est à cause du _Click? Est-il possible de mettre 2 boutons, avec 1 qui appelle le 2e sub? J'espère être assez clair... Merci!

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Pour réaliser cela, il faut mettre la procédure dans un module standard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    sub MaProcedure(j As Integer)
    instructions...
    if j = 1 then
    entree = Application.InputBox(prompt:="indiquer la date format jj.mm.aaaa", Title:="choisir la date", Type:=8)
    jourtravail = entree
    End If
    instructions...
    End Sub
    et ensuite dans le code des boutons on appelle cette procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Copier2_Click()
        MaProcedure(1)
    End Sub
     
    Private Sub Recuperer_Click()
        MaProcedure
    End Sub

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    A mon avis, il n'y a pas de pb à appeler une procédure évènementielle à partir d'une autre procédure.

    Mais dans to code, il y a des lignes "instructions..." qu'on ne voit pas.

    ET il y a probablement un pb avec ton argument 'Optional j' qui modifie explicitement la description de l'évènement 'onclick'.

    Je te conseille d'utiliser 2 procédures évènementielles, une pour chaque bouton, et une procédure publique que tu pourras appeler depuis les 2 évènementielles. La procédure publique pourra avoir j en paramètre.

    Attention quand même, à mon avis c'est plutôt 'as integer'.

    Bon courage,

    PGZ

    PS : désolé fring, tu fus plus rapide que moi.

  4. #4
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    pas de problème PGZ, au contraire, tu as donné des infos complémentaires (j'ai été fainéant )

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut
    Merci! Ca fonctionne maintenant! Si j'ose encore abuser... j'ai un problème de copier / coller, il faudrait que je colle uniquement les valeurs + formats, sans formules. J'ai essayé ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    'Copie de la plage de cellules sur la destination
    WSsource.Range(WSsource.Cells(starty, 73), WSsource.Cells(endy, 256)).Copy
    'WScible.Cells(destination, 1)
    WScible.Cells(destination, 1).Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    (Qui ne fonctionne pas...)
    Bonne journée!

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    753
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 753
    Par défaut
    Attention: ne pas confondre la méthode Activate et la méthode Select qui n'ont rien à voir. Sinon il n'y aurait qu'une seule méthode soyons logiques.

    La méthode Activate définit ton Range comme étant la "ActiveCell", tandis que Select définit ton Range comme étant la "Selection".

    Faire très attention à ça: c'est porteur à confusion.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Octobre 2008
    Messages : 37
    Par défaut
    Salut! Merci de la réponse!

    Justement, lorsque je fais un copier / coller j'ai un doute là-dessus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Set WBsource = Workbooks(nomfichiersource)
    Set WSsource = WBsource.Sheets(semainefeuille)
    Set WBcible = Workbooks(nomfichiercible)
    Set WScible = WBcible.Sheets("base")
    'Copie de la plage de cellules sur la destination
    WSsource.Range(WSsource.Cells(starty, 73), WSsource.Cells(endy, 256)).Select
    'WScible.Cells(destination, 1)
    Selection.Copy
    WScible.Range(WSsource.Cells(destination, 1)).Activate
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    Sur la ligne WScible.Range(WSsource.Cells(destination, 1)).Activate
    Il faut mettre à la place du .Activate un .Select? Que faut-il utiliser?

    Merci et bonne journée!

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

Discussions similaires

  1. [PHP 5.0] Deux boutons "submit" dans un même formulaire
    Par cyrilherve dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2009, 15h08
  2. Réponses: 2
    Dernier message: 24/09/2007, 17h06
  3. Réponses: 3
    Dernier message: 04/03/2007, 20h00
  4. [Javascript] bouton qui appele a une page php
    Par belakhdarbts dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 23/06/2006, 23h38
  5. Réponses: 10
    Dernier message: 10/06/2004, 17h20

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