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 :

Macro sous condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut Macro sous condition
    Bonjour à tous,

    Mon soucis est le suivant (j'espère me faire bien comprendre)

    J'aimerais exécuter une macro sous condition

    Si la caption du bouton équivaut au donné de la colonne A de ma feuille1 alors elle effectuera mon premier code vba
    sinon elle effectuera mon deuxième code vba

    Exemple:
    en colonne A j'ai des familles (Bières, Limonade, café, etc.)
    dans les autres colonnes ses mes produits

    Si je clic sur le bouton ou sa caption est bière alors elle effectue mon premier code
    si la caption n'ai pas repris dans la colonne A alors elle effectue mon deuxième code

    du style:
    if commandbutton1.caption = Feuil1 Rang(A4:A10) alors premier code
    else deuxième code

    J'espère m'être fais bien comprendre

    En vous remerciant

  2. #2
    Membre Expert Avatar de mfoxy
    Homme Profil pro
    Automation VBA
    Inscrit en
    Février 2018
    Messages
    752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Automation VBA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2018
    Messages : 752
    Par défaut re
    Hello,

    Peut être en utilisant la fonction find de vba
    Si la caption du commandbutton1 est trouve dans Colonne À alors...
    Ajouter dans ton commandbutton et remplacer les msgbox par des appels à tes différentes macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Dim x As Range
    Dim sCriteria as String
     
    sCriteria= Commandbutton1.caption
     
    Set x = Range("A1:A100").Find(sCriteria, , xlValues, xlWhole, , , False)
      If Not x Is Nothing Then
        MsgBox "trouvé en " & x.Address 
      Else
       MsgBox "n'existe pas..."
      End If

  3. #3
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Essayes cette méthode par exemple si ton bouton est sur la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    With Sheets("Feuil1")
        If Application.IsNA(Application.Match(.CommandButton1.Caption, .Range("A:A"), 0)) Then
        ' deuxième code
        Else
        ' premier code
        End If
    End With

  4. #4
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour mfoxy et anasecu,

    Je tiens tous d’abord à vous remercier de votre temps pour mon souci.

    Anasecu, mon bouton ce trouve dans un userform

    Mfoxy, j’ai essayé ton code il ma l’aire de marché, mais je crois que je l’utilise mal. Le code ne marche que sur mon premier bouton et non sur les autres qui sont à la suite.

    Je me permets de mettre ci-joint un exemple, en vous remerciant encore

    https://www.cjoint.com/c/HDbs5XNAspy

  5. #5
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Citation Envoyé par _flori_ Voir le message
    Anasecu, mon bouton ce trouve dans un userform
    Il suffit d'adapter comme ceci par exemple.

    Cependant comme tu veux fonctionner avec de nombreux boutons, ce n'est pas la bonne formule.
    Il te faut gérer avec un module de classe et tu n'auras qu'un seul code qui fonctionnera sur tous tes boutons.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour Anasecu,

    J’ai changé en ce que tu me proposé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CommandButton2_Click()
    Dim x As Range
    Dim sCriteria As String
     
    sCriteria = CommandButton1.Caption
     
    Set x = Sheets("Familles").Range("A1:A100").Find(sCriteria, , xlValues, xlWhole, , , False)
      If Not x Is Nothing Then
        UserForm2.Show
      Else
       TextBox1.Value = "eau"
      End If
    End Sub

    Par :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton2_Click()
        If Application.IsNA(Application.Match(Me.CommandButton2.Caption, Sheets("Général").Range("A:A"), 0)) Then
            TextBox1.Value = "eau"
        Else
            UserForm2.Show
        End If
    End Sub

    Cependant, ça reste pareil

    Je deviens fou mais vais continuer à chercher

    Je te remercie

  7. #7
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour Anasecu,

    J'ai trouvé ce qu'il n'allais pas

    voila 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 CommandButton1_Click()
    Dim x As Range
    Dim sCriteria As String
    sCriteria = CommandButton1.Caption
    Set x = Sheets("Familles").Range("A1:A100").Find(sCriteria, , xlValues, xlWhole, , , False)
     
    If Not x Is Nothing Then
    UserForm1.Show
    Else
    TextBox1.Value = "Eau"
    End If
    End Sub
    Je devais juste changer le nom de la caption commandbutton dans scritera
    si bouton 1 alors sCriteria = CommandButton1.Caption
    si bouton 2 alors sCriteria = CommandButton2.Caption

    Est-ce que je peux abuser de ton temps

    comme tu peux voir:
    si la caption est dans l'onglet Familles, la macro ouvre un userform (pour ce code userform1)
    si la caption n'est pas dans l'onglet familles, la macro écrit "Eau" dans mon textbox1

    Ce que j'aimerais, si c'est possible
    c'est qu'au lieu d'ouvrir l'userform1, elle ouvre l'userform qui conviens

    Exemple
    si la caption est Bière alors elle m'ouvre mon userform Bière
    si la caption est Limonade alors elle m'ouvre mon userform Limonde
    est non à chaque fois mon userform1

    J'espère m'être fais bien comprendre

    Je te remercie encore

  8. #8
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Est-ce que je peux abuser de ton temps
    Comme je te le disais
    Cependant comme tu veux fonctionner avec de nombreux boutons, ce n'est pas la bonne formule.
    Il te faut gérer avec un module de classe et tu n'auras qu'un seul code qui fonctionnera sur tous tes boutons.
    je ne pense pas que tu partes dans la bonne direction, car avec un module de classe tu pourras réaliser ce que tu veux avec très peu de code et de façon plus efficace.

  9. #9
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour,

    Je suis désolé mais suis assez basique en vba

    A chaque fois que décortique tous les codes afin de les comprendres et c'est comme cela que j'avance

    Mais la ta façon ma l'aire superbe mais c'est du chinois pour moi

    Pourtant je passe des heures et des heures dans les forums et décortique pas mal de code

    Mais je comprend toujours pas

  10. #10
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Re,

    Excuse moi,

    J'ai oublié de te remercier de ton temps à mon soucis

    Pardon

  11. #11
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par _flori_ Voir le message
    Je suis désolé mais suis assez basique en vba
    A chaque fois que décortique tous les codes afin de les comprendre et c'est comme cela que j'avance
    Il ne faut surtout pas être désolé car l'on a tous appris un jour à marcher et je me suis aussi retrouvé avec du chinois en entendant module de classe.

    En fait, c'est bien plus simple que cela parait lorsque l'on a pratiqué un petit peu.

    Je te donne un lien qui m'a permis de comprendre le concept alors j'espère qu'il t'aidera
    http://www.commentcamarche.com/faq/1...objets?login=1

  12. #12
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Re,

    Je te remercie pour l'information, c'est vrai que le modules de classe me sera utile et je me documente ainsi que des recherches sur forum et autres.

    J'ai trouvé un code sur un forum et après quelques manipulation et changement, je crois que sais ce que je recherche.

    Le voici:

    1) Ce que je place dans mon modules de classe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public WithEvents Cmd As MSForms.CommandButton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Cmd_Click()
        'mettre ma macro
        MsgBox "Coucou"
    End Sub
    [/CODE]

    2) Ce que je place dans mon userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim TCmdCollection As Collection
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton5_Click()
    TextBox1.Value = "eau"
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
           Call Collection_Cmd
    End Sub
    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
    Private Sub Collection_Cmd()
        'creation collection pour classe Cls_cmd
        Dim Ctrl As MSForms.Control
        Dim objCmd As Cls_cmd
     
        Set TCmdCollection = New Collection
            For Each Ctrl In Me.Controls
                If TypeOf Ctrl Is MSForms.CommandButton Then
                    Set objCmd = New Cls_cmd
                    Set objCmd.Cmd = Ctrl
                    TCmdCollection.Add objCmd
                End If
            Next Ctrl
        Set obj = Nothing
        Set objCmd = Nothing
    End Sub
    Je constate que j'ai pas besoin de mettre à chaque fois le code dans tous mes boutons, ça marche.

    Cependant, j'aimerais que ça fonctionne sur tous mes boutons de ma multipage seulement et non sur tous mes boutons de mon userform

    Ma question est: Est-ce possible

    Si oui, pourrais-tu m'aider.

    En te remerciant

    Ps: voici une pièce-jointe
    https://www.cjoint.com/c/HDcwEFNRahy

  13. #13
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,

    Tu vois que tu te débrouilles comme un chef !
    Ainsi tu vas pouvoir gérer ton formulaire avec très peu de code et en conséquence aucune erreur de copie intempestive.
    Citation Envoyé par _flori_ Voir le message
    Cependant, j'aimerais que ça fonctionne sur tous mes boutons de ma multipage seulement et non sur tous mes boutons de mon userform
    Si je comprends ce que tu veux il te suffit de préciser ta page de ton multipage qui commence à zéro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            For Each Ctrl In Me.MultiPage1.Pages(0).Controls
    Si tu remplaces le "(0)" par "(1)" tu n'auras que la page2 en classe.
    Si tu codes ainsi ce sera ta page active qui sera concernée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            For Each Ctrl In Me.MultiPage1.Pages(Me.MultiPage1.Value).Controls
    Il te suffit de rajouter l’initialisation au changement de page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub MultiPage1_Change()
           Call Collection_Cmd
    End Sub
    Bonne journée et amuses toi à intégrer les classes qui sont plus simples que tu pensais. ;-)

  14. #14
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour,

    J'avance, j'avance très doucement mais sûrement

    Je te remercie pour le code, c'est exactement cela.

    Concernant Me.MultiPage1.Pages(0).Controls
    Je savais que 0 était première feuille
    que 1 était deuxième feuille
    etc

    Donc maintenant je sais lasquel des feuilles de ma multipage choisir pour mes boutons

    Si j'aimerais que ça sois toute les page de ma multipage est-ce possible?

    J'ai essayé:
    Me.MultiPage1.Controls
    Me.MultiPage1.Pages(0, 1).Controls

    Mais rien

    Voila mon petit soucis

    En te remerciant énormément

  15. #15
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par _flori_ Voir le message
    Si j'aimerais que ça sois toute les page de ma multipage est-ce possible?
    C'est vrai que pour vba c'est comme pour toute langue il faut avoir la syntaxe qui n'est pas la même selon les pays avec verbe avant ou après etc.

    Pour faire ce que tu veux faire tu peux utiliser
    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 Collection_Cmd()
        'creation collection pour classe Cls_cmd
        Dim Ctrl As MSForms.Control
        Dim objCmd As Cls_cmd
        Dim pag As Integer
        Set TCmdCollection = New Collection
            For pag = 0 To Me.MultiPage1.Pages.Count - 1
                For Each Ctrl In Me.MultiPage1.Pages(pag).Controls
                    If TypeOf Ctrl Is MSForms.CommandButton Then
                        Set objCmd = New Cls_cmd
                        Set objCmd.Cmd = Ctrl
                        TCmdCollection.Add objCmd
                    End If
                Next Ctrl
            Next pag
        Set obj = Nothing
        Set objCmd = Nothing
    End Sub
    Le n° de page commence à zéro comme tu sais mais le 'count' commence à 1 d'où le -1 ;-)

  16. #16
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonsoir,

    UN TRÈS TRÈS GRAND MERCI

    C'est exactement ça

  17. #17
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour anasecu,

    Est-ce que je pourrais me permettre une bête question stp.

    Tous marche superbe concernant l'aide pour le modules de classe

    J'avance bien, j'aimerais concernant le code pour le module qu'il m'affiche la caption du commandbutton dans mon textbox.

    en faisant:
    Caisse.TextBox1.Value = Caisse.CommandButton7.Caption
    Pour cela pas de soucis, il me marque la caption du bouton 7 pour tous mes boutons dans ma textboxt

    Mais comme chaque bouton à une caption différente j'aimerais en faire de même avec chaque bouton

    J'ai essayé ceci:
    Caisse.TextBox1.Value = Caisse.CommandButton.Caption
    Caisse.TextBox1.Value = Caisse.MultiPage1.CommandButton.Caption
    Caisse.TextBox1.Value = Caisse.CommandButton.Value

    Rien de tous ne marche

    Pourrais-tu m'aider

    Je te remercie encore

  18. #18
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour,
    Citation Envoyé par _flori_ Voir le message
    j'aimerais concernant le code pour le module qu'il m'affiche la caption du commandbutton dans mon textbox.
    Il faut utiliser le module de classe pour ce qu'il est fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caisse.TextBox1.Value  = Cmd.Caption
    Le Cmd qui est sollicité prend toutes les propriétés du bouton actif et tu peux t'en servir pour faire des fonctions spécifiques à un bouton particulier dans ton module de classe.

  19. #19
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour anasecu,

    Je te remercie de ta réponse, comme d'habitude ce que je cherché.

    C'est quand je vois des réponses comme cela, que je me dis, que j'ai encore beaucoup de travail en vba

    Un grand merci

  20. #20
    Membre confirmé
    Homme Profil pro
    independant
    Inscrit en
    Février 2018
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : independant

    Informations forums :
    Inscription : Février 2018
    Messages : 74
    Par défaut
    Bonjour anasecu,

    Je me documente pour ouvrir mon fichier directement au démarrage de mon ordi.

    J'ai trouvé plusieurs solutions, cependant je trouve très long l'étape pour y arriver.

    Je chercherais quelque chose comme une ouverture automatique sans les 2 3 min d'attendre.

    En réalité, j'aimerais ouvrir mon fichier comme si j'avais une vrai caisse. Allumage et programme direct.

    Car pour le moment l'ordi dois d'abord s'ouvrir puis ouvrir excel puis le fichier.

    Tous ça en voyant les étapes.

    Je vois sûrement grand. Mais j'aimerais arriver à :

    1. J'allume
    2. Mon fichier

    Et tous cela sans voir les étapes d'exécution.

    J'espère mettre fais bien comprendre

    Si t'aurais des idées ou m'orienté dans mes recherche.

    Je te remercie de ton temps

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Macros sous condition dans une autre macro
    Par vvl_5 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2013, 21h14
  2. [AC-2007] ERREUR 0 : Lancer une macro sous condition avec "ExecuterMacro"
    Par Octo LPO dans le forum Macros Access
    Réponses: 2
    Dernier message: 01/02/2013, 16h31
  3. exécution macro sous condition
    Par arthour973 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 11/12/2011, 11h37
  4. impossible de démarrer macro sous condition
    Par ric009 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 07/05/2011, 23h24
  5. [AC-97] Macro sous condition
    Par julio79 dans le forum IHM
    Réponses: 0
    Dernier message: 28/05/2009, 19h17

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