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 :

[VBA-E] Effacement de cellules et fonction sur un CommandButton crée dynamiquement


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 16
    Points
    16
    Par défaut [VBA-E] Effacement de cellules et fonction sur un CommandButton crée dynamiquement
    Bonjour,
    J'aurais 2 petites questions en VB-E
    1) Comment faire pour effacer le contenu d'une "zone" de cases sur une feuille Exel ?
    Avec cells(8,"C")="" j'arrive à effacer la case 8-C mais je n'arrive pas a effacer une zone ( un rectangle par exemple) de cases a cause de la lettre, parce que sinon deux boucles for imbriquées suffiraient...
    2) Je creer "dynamiquement" un Commandbouton via le code:
    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
    Set Pge = Me.MultiPage1.Pages(1) '2eme page du multipage
    For j = 1 To x 'boucle pour créer les frames
        Set Frme = Pge.Controls.Add("Forms.Frame.1", "test" & j)
        '[...]
        'creer les boutons commande
        Set CmdA = Frme.Add("forms.CommandButton.1")
        With CmdA
            .Caption = "valider"
            .Left = 170
            .Top = 14
            .Width = 50
            .Height = 18
        End With
        '[...]
    next j
    Comment executer une fonction lors de l'appui sur ce bouton ?

    merci bien

  2. #2
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    1. Voir range... , Range("A1:B4")..... ou range(Cells(1,1),Cells(2,2)..
    2. ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    merci pour la réponse à la question 1. Je connais VB6 mais la, c'est mon premier programme avec Excel, il me faut un ptit temps d'adaptation aux nouvelles "fonctions".

    En ce qui concerne le "...", réponse à la question 2 ; Le "..." veus dire que la réponse est "bête" et que j'ai mal cherché ? ou que toi, "expert confirmé " :p tu cale aussi ?

  4. #4
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    ben pour le 2... déjà la phrase
    Citation Envoyé par clochardevobsy
    Comment executer une fonction lors de l'appui sur ce bouton ?
    n'est pas claire ..? ( C'. ensuite je ne m'amuse pas souvent à créer dynamiquement des contrôles... essai quand même d'être un peu plus clair sur la nature des fonctions à exécuter .... existent-elle avant la création du bouton ...? etc...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Oui, la fonction existe avant la création du bouton.
    C'est une fonction que j'utilise plusieurs fois dans mon programme sur différent boutons/événements, elle permet de vérifier le contenu d'une textbox.
    j'aimerais l'executer lors de l'appui sur ce bouton.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour

    si la question fait suite à tes fils de discussions précédents , tu ne pourras pas procéder de la meme maniere . l'UserForm devra prealablement etre fermé pour que les boutons et les macros créés dynamiquement soient opérationnels



    un exemple pour ajouter un bouton dans un UserForm


    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
     
    Dim USF As vbcomponent
    Dim Ctrl As CommandButton
    Dim Code As String
     
    Set USF = ThisWorkbook.VBProject.VBComponents("UserForm1")
    'Créer le nouveau bouton
    Set Ctrl = USF.Designer.Controls.Add("forms.CommandButton.1")
    With Ctrl
    .Name = "leBouton"
    .Caption = "OK"
    End With
     
    Code = "Private Sub leBouton_Click()" & vbCrLf
    Code = Code & "MsgBox ""Coucou """ & vbCrLf
    Code = Code & "End Sub"
     
    With USF.CodeModule
    .InsertLines .CountOfLines + 1, Code
    End With
    'Affiche l'USF
    VBA.UserForms.Add(USF.Name).Show
     
    'Supprime le bouton créé dynamiquement
    USF.Designer.Controls.Remove "leBouton"
     
    'suppression macro : à adapter
    'With USF.CodeModule
    '.deleteLines 2, 4
    'End With


    bonne journée
    michel

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    je venais justement de trouver un code qui ressemble au tiens Silky et je le testait...
    Erreur automation:
    L'objet invoqué s'est déconnecté de ses clients"

    J'image que c'est du a:
    l'UserForm devra prealablement etre fermé pour que les boutons et les macros créés dynamiquement soient opérationnels
    Le probléme c'est que je n'ai qu'une seule Userform dans mon apply si je doit la quitter pour sa, sa va pas être super

    bon, v réfléchir a table ^^

  8. #8
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    tiens pour la digestion si cela peu t'aider :

    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 WithEvents MonBouton As CommandButton
    Private Sub CommandButton1_Click()
    Set MonBouton = Controls.Add("forms.CommandButton.1", "MonButton")
        With MonBouton
            .Caption = "valider"
            .Left = 170
            .Top = 14
            .Width = 50
            .Height = 18
            .Name = "MonBouton"
        End With
    End Sub
    Private Sub MonBouton_Click()
     MsgBox "hello"
    End Sub

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Oui, c'est exactement ce que j'ai fait pour d'autres "contrôles".

    Mais dans le cas de mes CommandButton, je ne sais pas le nombre qu'il y en auras dans la page, c'est a l'utilisateur de choisir...
    Changer le nom lors de la création du bouton est simple (.name="mon_bouton_" & j par exemple)

    mais je ne peut pas creer une fonction pour chaque bouton de cette manière.

    enfin bref, j'ai tout de même eu les réponses que j'attendait, merci a tous les deux Bbil et Silky. J'ai décidé de changer le principe de saisie de l'utilisateur, je ne m'embêterai plus avec la création de contrôles dynamiquement

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonsoir

    pour ma culture générale (meme si le sujet est résolu) , peux tu préciser quels types de fonctions tu souhaitais déclencher depuis les boutons créés dynamiquement ...



    bonne soiree
    michel

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 22
    Points : 16
    Points
    16
    Par défaut
    Sans entrer dans les détails,
    Je devait vérifier la saisie d'une textbox, vérifier si le nombre entré dans la textbox situé a côté
    du bouton était "compatible" avec les autres données saisies auparavant...

    If TextBox4 = "" Or Not IsNumeric(TextBox4) Or TextBox4.Value < 0 Then Exit Sub
    ' puis une série de calculs ...
    ' actualiser l'affichage etc...

    J'ai réussis a refaire tous mon travail sans avoir recours a la création dynamique de contrôle. j'ai
    creer seulement 2 frames dans lesquels je changent les valeurs en fonction du scroll.value. J'arrive
    ainsi a simuler les X frames nécessaires.

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

Discussions similaires

  1. [XL-2010] Effacer des cellules en fonction de la valeur d'un autre cellule
    Par aalex85 dans le forum Excel
    Réponses: 9
    Dernier message: 02/02/2015, 08h42
  2. Récupérer la valeur d'une cellule avec fonction sur une autre feuille
    Par rogerlette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/09/2010, 12h38
  3. Effacer des cellules en fonction de la date
    Par jarault dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 16/04/2008, 12h08
  4. Action sur des boutons crées dynamiquement
    Par barthelus76 dans le forum SWT/JFace
    Réponses: 13
    Dernier message: 28/06/2007, 20h32
  5. Centrer un texte sur une image créée dynamiquement
    Par rigolman dans le forum Langage
    Réponses: 7
    Dernier message: 11/10/2005, 17h22

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