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 :

Effacer commandbouttons dans userform [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut Effacer commandbouttons dans userform
    Bonjour a toutes et tous, forum

    je souhaiterai effacer par vba des commandbouttons qui se trouve dans

    un UserForm1 et aussi dans un Frame1

    Mais pas effacer forcément tous les commandbuttons, juste une sélection par

    Ex: le N°2,N°8,N°24 etc etc

    Les commandbuttons on étés placer par codes vba

    Merci a vous et de votre temps

    Bon W-end

    Ray

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Si les boutons créés dynamiquement avec Set c(i) = Controls.Add("Forms.CommandButton.1")et
    stocké dans le tableau c() pour les retirer dynamiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Me.Controls.Remove (c(i).Name)
    set c(i) = Nothing

  3. #3
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Bonjour a toutes et tous, forum

    Bonjour BlueMonkey

    Merci pour ta réponse c'est sympa, je suis de loin un virtuose du Vba, et je n'ai

    pas trop bien compris ton code, je pensais qu'une petite macro ferait l'affaire.

    je te joint le code si tu veux bien, qui dessine les commandButtons.

    je te souhaite un agréable Dimanche

    Cdlt Raymond

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    Si tu connais le nom des boutons à supprimer tu peux t'inspirer de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         Dim i As Integer
     
        For i = Controls.Count - 1 To 0 Step -1
            If Controls.Item(i).Name = "<le nom d'un bouton à supprimer>" Then
               Controls.Remove (Controls.Item(i).Name)
            End If
        Next i

  5. #5
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Re salut

    Merci pour le code mais petit soucis

    il me mets erreur de compilation - variable non définie pour ( controls )

    j'ai essayer de mettre un Dim mais non

    Merci a plus tard

    Raymond

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Re.

    Controls fait partie des Propriétés existantes des UserForm.
    Si tu souhaites ajouter le code en dehors de la Userform (ce que je déconseille), il faut précéder Controls du nom de la UserForm.

    Si la fonction qui supprime les boutons doit être appelée en dehors de la Controls, le mieux est de mettre une fonction
    publique dans cette UserForm.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    je n'est pas tester mais pour moi ca serait plutot ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim i As long
     dim ctrl as object
     
     
    For each ctrl in me.controls
     
            If ctrl (i).Name = "<le nom d'un bouton à supprimer>" Then
               ctrl (i).remove
            End If
        Next
    mais encore une fois je n'est pas tester!
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  8. #8
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Qu'est ce que tu racontes Patrick
    Parfois, faudra s'abstenir d'écrire des ambiguïtés qui induiront le demandeur en erreur.
    C'est quoi ton i dans le code? c'est quoi ctrl(i) alors que ctrl est déclaré comme objet.

  9. #9
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonjour,

    D'expérience, je prends un soin particulier à éviter l'utilisation des itérateurs sur une liste créé par for each,
    dans les cas où je souhaite supprimer des éléments contenus dans cette liste.
    A partir du moment où un élément est retirer de cette liste, l'itérateur créé précédemment devient généralement invalide.

    Pour tester facilement le code posté en #4, je vous pose de copier/coller le code ci-dessous dans une UserForm contenant 2 boutons ajouté depuis l'éditeur VBE.

    Le premier bouton ajoutera 10 boutons dynamiquement, et affichera un numéro comme label.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton1_Click()
        Dim i As Integer
     
        For i = 1 To 10
            With Controls.Add("Forms.CommandButton.1")
                .Caption = i
                .Top = (i - 1) * 20
            End With
        Next i
    End Sub
    Le second bouton ne supprimera que les CommandButton ayant un nombre comme label.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub CommandButton2_Click()
        Dim i As Integer
     
        For i = Controls.Count - 1 To 0 Step -1
            With Controls.Item(i)
                 If (TypeName(Controls.Item(i)) = "CommandButton") And IsNumeric(.Caption) Then
                    Controls.Remove (.Name)
                 End If
            End With
        Next i
    End Sub
    A noter la boucle décroissante, toujours pour conserver la validité des itérations.
    Et si on remplace la ligne 7 Controls.Remove (.Name) par .Remove, on déclenche une exception. "Propriété ou Méthode non géré"

    Le .Remove peu paraît plus simple / logique, mais ne fonctionne pas (au moins dans ma version XLS2003).

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonjour mercatog


    tu a raison j'ai repris son code un peu vite
    effectivement le "(i) "n'est plus necessaire puisque je boucle avec "for each" les comprends tous

    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
     
    'on ajoute 5 boutons
    Sub ajoute()
    For i = 0 To 5
    Set bouton = Me.Controls.Add("Forms.CommandButton.1")
        With bouton
            .Name = "Bouton" & i
            .Caption = i
            .Left = 10
            .Top = (20 * i)
            .Width = 100
            .Height = 18
        End With
    Next
    End Sub
     
    on supprime les 5 boutons
    Sub efface()
        Dim i As Long
     Dim ctrl As Object
        For Each ctrl In Me.Controls
            With ctrl
                 If (TypeName(ctrl) = "CommandButton") And IsNumeric(.Caption) Then
                    Controls.Remove (ctrl.Name)
                 End If
            End With
        Next
    End Sub
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11
    Membre éclairé
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2008
    Messages
    704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2008
    Messages : 704
    Par défaut
    Bonjour a tous

    Merci de votre aide avec tous les codes j'ai réussi a faire ce que je souhaitai

    j'ai bricoler mais ça a l'air d'être bon,on verra bien.

    Encore pour l'aide que vous m'avez apporter

    Bonne semaine a tous

    Cdlt Raymond

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

Discussions similaires

  1. Effacer valeur dans userform bloque archivage
    Par gestiondestocks dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/12/2011, 22h38
  2. effacer texte dans un JTextField
    Par Invité dans le forum Composants
    Réponses: 15
    Dernier message: 01/10/2006, 17h02
  3. effacer enregistrements dans une autre table
    Par milielf dans le forum Access
    Réponses: 6
    Dernier message: 03/08/2006, 12h17
  4. (VBA-E) Problème combobox dans userform
    Par gringo69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/06/2006, 18h28
  5. Effacer requête dans un fichier de sortie
    Par solp dans le forum Oracle
    Réponses: 4
    Dernier message: 03/06/2006, 16h38

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