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 :

boucle sur controls MSFORMS [XL-MAC 2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 306
    Par défaut boucle sur controls MSFORMS
    bonjour,

    Le problème: pourquoi dans mon code ci-dessous, le if ne filtre pas correctement mes controls ?
    Le but: lorsque le togglebutton3 n'est pas enfoncé décoche toutes les checkbox du frame1 sinon coche tous les checkbox du frame1

    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
    Private Sub toggleButton3_click()
    Dim ctrl As Object
    Dim NumeroLabel As String
     
        For Each ctrl In Me.Frame1.Controls 'Boucle sur tout les contrôles de l'userform
                If TypeOf ctrl Is MSForms.CheckBox Then
                NumeroLabel = Mid(ctrl.Name, 9, Len(ctrl.Name) - 8)
                    If ToggleButton3.Value = True Then
                    Me.Frame1.Controls("CheckBox" & NumeroLabel).Value = True
                    Else
                    Me.Frame1.Controls("CheckBox" & NumeroLabel).Value = False
                    End If
                End If
        Next ctrl
    End Sub
    Ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If TypeOf ctrl Is MSForms.CheckBox Then
    j'ai du toggleButton qui passe alors que cela ne devrait pas

    qqun serait m'expliquer et résoudre mon pb SVP ?
    Merci

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2002
    Messages
    993
    Détails du profil
    Informations forums :
    Inscription : Décembre 2002
    Messages : 993
    Par défaut
    Salut, essaie avec cette légère modif. On vérifie si le nom du contrôle contient bien la chaîne "CheckBox" avant de le traiter. Cela pourrait empêcher le traitement de contrôles indésirables.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each ctrl In Me.Frame1.Controls 'Boucle sur tout les contrôles de l'userform
        If TypeOf ctrl Is MSForms.CheckBox And InStr(1, ctrl.Name, "CheckBox") > 0 Then
            NumeroLabel = Mid(ctrl.Name, 9, Len(ctrl.Name) - 8)
            If ToggleButton3.Value = True Then
                ctrl.Value = True
            Else
                ctrl.Value = False
            End If
        End If
    Next ctrl

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    peut-être utiliser If TypeName(ctrl) = "CheckBox" Then"

  4. #4
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce n'est bien entendu pas la réponse à votre question mais je me permets une petite remarque sur ce genre de ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     If ToggleButton3.Value = True Then
                    Me.Frame1.Controls("CheckBox" & NumeroLabel).Value = True
    Il est plus simple et plus rapide d'écrire et sans If et cela vous évite le Else
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Frame1.Controls("CheckBox" & NumeroLabel).Value =ToggleButton3.Value
    A lire éventuellement mon billet sur ce sujet VBA - De la mauvaise utilisation d'un If...Then...Else pour modifier une propriété Booléenne

    Si c'est l'inverse que vous voulez, il suffit d'ajouter le Not

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.Frame1.Controls("CheckBox" & NumeroLabel).Value = Not ToggleButton3.Value
    [EDIT]
    Voir cette discussion avec comme objet boucle sur les controles dans un frame pour parcourir les contrôles d'un Frame et en testant avec TypeName
    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

  5. #5
    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 171
    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 171
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce code fonctionne. Attention que j'ai changé le nom de certains contrôles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub toggleButton1_click()
      Dim ctrl As Object
      Dim NumeroLabel As String
      For Each ctrl In Me.Frame1.Controls 'Boucle sur tout les contrôles de l'userform
          If TypeName(ctrl) = "CheckBox" Then
             ctrl.Value = ToggleButton1.Value
          End If
      Next ctrl
    End Sub
    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

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Juin 2016
    Messages
    306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Juin 2016
    Messages : 306
    Par défaut
    Bonjour Franc, umfred, Philippe Tulliez,

    Déjà merci pour vos interventions.

    @umfred + Philippe: La méthode TypeName(ctrl) est plus favorable et fonctionne mieux que typeof ctrl Is MSForms.checkbox
    => je suis débutant et je ne sais pas pourquoi TypeName fonctionne ou est plus approprié que MSForms, mais bon le principal c'est que ça fonctionne avec TypeName

    @Franc => je pars donc sur du TypeName c'est mieux

    @Philippe, ok avec
    Me.Frame1.Controls("CheckBox" & NumeroLabel).Value =ToggleButton3.Value je ne l'avais pas perçu. Donc cela élimine effectivement un if et 3 lignes de code, c'est toujours bon à prendre.

    Mon problème est résolut. Merci encore

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

Discussions similaires

  1. Boucle sur Control : Ordre des controls dans la Liste
    Par juanpa dans le forum Général VBA
    Réponses: 5
    Dernier message: 05/02/2015, 00h16
  2. Boucle sur controles et .tag associé
    Par pleskyd dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 14/10/2011, 17h13
  3. [AC-2003] boucle sur le nom de controles
    Par piere42 dans le forum IHM
    Réponses: 1
    Dernier message: 01/04/2009, 12h17
  4. [C#] Boucle sur les controles
    Par stailer dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/05/2006, 08h48
  5. [JSP/WebSphere] Boucle de controle sur un FTP
    Par benben13 dans le forum Websphere
    Réponses: 10
    Dernier message: 30/08/2005, 16h18

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