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 :

Appliquer une condition à plusieurs Label


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Appliquer une condition à plusieurs Label
    Bonjour à tous,
    Voilà ma question :
    Dans une userform j'ai plusieur Label qui doivent apparaitre ou non en fonction d'une condition. Si la cellule B2=1, alors les label de Label1 à Label100 ne doivent pas apparaitre.
    Jusque là j'ai utilisé un IF qui est relativement lourd puisque cela donne cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Sheets("Feuil1").Range("B2") = 1 Then
    Label1.Visible = False
    Label2.Visible = False
    Label3.Visible = False
    Label4.Visible = False
    ETC... jusqu'à 100, ce qui alourdit considérablement mon code. Néanmoins ça marche.

    J'aimerais savoir si il est possible d'obtenir un truc du style :

    si B2=1
    Alors, les Label de 1 à 100 = False

    Ce qui ferait beaucoup moins de lignes de code, même en employant autre chose que la condition If

    Merci par avance à ceux qui se pencheront sur mon probleme.

    Laurent

  2. #2
    Expert éminent sénior

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 421
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 421
    Points : 16 265
    Points
    16 265
    Par défaut
    Bonjour

    si tous tes labels ont le même type de nom

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Ccontrol As Control
    If Sheets("Feuil1").Range("B2") = 1 then
        For Each Ccontrol In UserForm1.Controls
            If Left(Ccontrol.Name, 5) = "Label" Then
                If CInt(Mid(Ccontrol.Name, 6, 2)) >= 1 And CInt(Mid(Ccontrol.Name, 6, 2)) <= 100 Then
                    Ccontrol.Visible = False
                End If
            End If
        Next Ccontrol
    End If
    Chris
    PowerQuery existe depuis plus de 13 ans, est totalement intégré à Excel 2016 &+. Utilisez-le !

    Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson.
    Confucius

    ----------------------------------------------------------------------------------------------
    En cas de résolution, n'hésitez pas cliquer sur c'est toujours apprécié...

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Merci beaucoup
    Tout d'abord merci Chris pour avoir pris le temps de me répondre
    Je m'appercois que je me suis vraiment mal expliqué
    En fait, si la cellule B2=1, je voudrais que les Label de 2 à 100 soient invisible mais que le Label 1 reste visible
    Par répétition, que si B2=2, les Label de 3 à 100 soient invisible et que les Label 1 et Label 2 soient visible, etc...

    Je suis vraiment désolé, j'me suis expliqué comme un ane -))

    Si tu as un peu de temps à m'accorder pour m'expliquer ça, je suis preneur. merci par avance

  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
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En apportant une modification au code proposé par Chris.
    J'ai mis en rouge ce qui a été ajouté ou modifié. En espérant ne rien avoir oublié.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Number As Byte
    Dim Ccontrol As Control
     If IsNumeric(Sheets("Feuil1").Range("B2")) Then
      Number = Worksheets("Feuil1").Range("B2") + 1
      For Each Ccontrol In UserForm1.Controls
       If Left(Ccontrol.Name, 5) = "Label" Then
        If CInt(Mid(Ccontrol.Name, 6, 2)) >= Number And CInt(Mid(Ccontrol.Name, 6, 2)) <= 100 Then
         Ccontrol.Visible = False
        End If
       End If
      Next Ccontrol
     End If
    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
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut
    Merci beaucoup Philippe de m'apporter tes lumières

    Avec ton code, une erreur de compilation "Variable non définie" m'apparait dans la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ccontrol In UserForm1.Controls
    mais j'ai compris pourquoi. Ma Userform s'appelle "RLT1JC" donc j'ai modifié en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each Ccontrol In RLT1JC.Controls
    Là je maitrise et l'erreur disparait
    Par contre, après je me chope une
    Erreur de compilation '13' :Incompatibilité de type
    pour la ligne de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If CInt(Mid(Ccontrol.Name, 6, 2)) >= Number And CInt(Mid(Ccontrol.Name, 6, 2)) <= 100 Then
    et je ne m'explique pas pourquoi paske honnetement je ne pige vraiment rien à ce code -))
    Aurais-tu une idée du pourquoi stp?
    Encore merci. Laurent

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne comprend pas non plus.
    J'ai testé le programme et n'ai aucun soucis mais évidemment je ne me suis pas tapé la création des 100 labels.
    J'ai vérifié en donnant un nom alphanumérique au label mais je n'arrive pas à recréer l'erreur;
    Vérifie au pas à pas avec la touche F9 pour voir quand l'erreur se produit, ou bien ajoute l'instruction Debug.Assert <> nn avant cette ligne qui se met en erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Debug.Assert CInt(Mid(Ccontrol.Name, 6)) <> 10
    If CInt(Mid(Ccontrol.Name, 6)) >= Number And CInt(Mid(Ccontrol.Name, 6)) <= 100 Then
    Cette instruction va interrompre le programme lorsque ce sera le Label10 ensuite tu essaies jusque 50 et ainsi de suite. Cela te permettra de vérifier où se situe le problème.
    Sinon, tu peux publier ton classeur s'il n'y a pas de données confidentielles. Pour que l'on puisse vérifier
    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

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Voici le fichier
    Non Philippe il n'y a pas de données confidentielles dedans et quand bien même, c'est déja gentil de ta part de te pencher sur mon probleme.
    Je te joins le fichier.
    J'ai essayé avec ton code DEBUG mais ça me génère aussi une erreur -))
    J'esai F9 mais si tu peux regarder et me dire ce que tu en penses. Le code se trouve dans la userform RLT1JC
    Encore merci

  8. #8
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Points : 3 974
    Points
    3 974
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CInt(Mid(Ccontrol.Name, 6, 2))
    effectue la conversion en nombre entier du numéro d’ordre de tes labels.
    Exemple pour Label25, l’expression retourne 2 caractères du texte "Label25" à partir du 6ème caractère, c'est-à-dire "25".
    Cela implique donc que ces labels aient un nom de type Label1, Label2, Label3, et ainsi de suite jusqu’à Label99.
    Si un label a un nom qui ressemble à LabelNomLigne1, tu obtiens une erreur de compilation '13' puisque la conversion va retourner "No" qui ne peut pas être converti en nombre entier.

    Cordialement.

  9. #9
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    C'est bien ce que j'avais pensé mais je n'avais pas réussi à reproduire le problème, c'est curieux.
    Le problème provient du fait que d'autres contrôles Label, ont un nom commençant également par Label et ont des caractères alphanumériques qui mettent en erreur la fonction de conversion Cint.
    Tu peux enlever la ligne qui contient le Debug.Assert et ajouter les lignes colorées en rouge.
    C'est une rustine car Il y a tellement de UserForm et de contrôles que je n'ai pas le temps d'aller plus loin.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For Each Ccontrol In RLT1JC.Controls
       If Len(Ccontrol.Name) < 8 Then
        If Left(Ccontrol.Name, 5) = "Label" Then
        ' Debug.Assert CInt(Mid(Ccontrol.Name, 6)) <> 10
         If CInt(Mid(Ccontrol.Name, 6, 2)) >= Number And CInt(Mid(Ccontrol.Name, 6, 2)) <= 100 Then
          Ccontrol.Visible = False
         End If
        End If
       End If
     Next Ccontrol
    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

  10. #10
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Merci à tous
    Celà ne fonctionne pas encore à 100% (le programme ne maitrise pas encore complètement les cellule à afficher ou non, c'est un peu au hasard) mais j'avance grace à vous

    Merci à Chris, à Philippe et également à gFZT82 grace à qui j'ai compris la ligne qui va chercher le numéro du Label à partir du 5eme caractère

    C'est vraiment sympa de votre part. Je n'ai plus qu'à me creuser la tête pour que celà soit cohérent -))

    Bonne continuation à vous tous

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Bonjour à tous,

    Liloo14, je pense, si je peux me permettre, qu'il faut être clair dans la requête à poser.

    Effectivement, il y a de nombreux Labels. Bien plus de 100 ainsi que d'autres Labels nommés LabelNomLigne1 à 33.

    Sont-ce réellement les labels1 à 100, ou les labels numérotés par ligne :
    par ex. : Label6 puis Label 39, 72, 105, 138, 171, 204 et 237 ainsi que le LabelNomLigne4 si Range("B2") = 5.

    cordialement.

    [EDIT] corrigé, si Range("B2") = 5

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Citation Envoyé par Liloo14 Voir le message
    Celà ne fonctionne pas encore à 100% (le programme ne maitrise pas encore complètement les cellule à afficher ou non, c'est un peu au hasard) mais j'avance grace à vous Merci à Chris, à Philippe et également à gFZT82 grace à qui j'ai compris la ligne qui va chercher le numéro du Label à partir du 5eme caractère C'est vraiment sympa de votre part. Je n'ai plus qu'à me creuser la tête pour que celà soit cohérent -)) Bonne continuation à vous tous
    A ne pas prendre au premier degré mais Ce n'est pas le programme qui ne maitrise pas ...., il ne fait qu'exécuter bêtement ce qu'on lui demande de faire
    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

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Bonjour à tous,

    Si le fonctionnement correspond au Post #11, alors mettre ce qui suit dessous en lieu et place.
    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
    Dim Number As Integer
    Dim i As Byte, j As Byte
     
    If IsNumeric(Sheets("Feuil1").Range("B2")) Then
        Number = Worksheets("Feuil1").Range("B2") - 1
        For i = 1 To 33
            If i >= Number Then
                Controls("LabelNomLigne" & i).Visible = False
                Controls("Label" & i + 2).Visible = False
                For j = 1 To 7
                    Controls("Label" & i + 2 + j * 33).Visible = False
                Next
            Else
                Controls("LabelNomLigne" & i) = True
                Controls("Label" & i + 2).Visible = True
                For j = 1 To 7
                    Controls("Label" & i + 2 + j * 33).Visible = True
                Next
           End If
        Next
    End If
    Faire des essais. Par contre, j'ai relevé des anomalies dans les labels, a priori, la numérotation ne suit pas la logique du départ. Regarder sur mardi Ligne11.

    Cordialement.

    Bonjour,

    Pour éviter que la procédure ne devienne une usine à gaz en fonction du N° du Label qui défierait toute logique, il serait bon de vérifier, voire de corriger pour que la numérotation suive une logique : pourquoi pas celle du départ.
    A savoir + 33 pour chaque Label suivant le 1er de chaque ligne.

    Avez-vous essayer la méthode proposée au post #13 ?

    De plus, une amélioration sur la partie suivante de cette procédure, concernant l'identification du LabelNomligne1.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Number = Sheets("Feuil1").Range("A12")
    LabelNomLigne1 = Sheets("feuil1").Range("E1").Offset(Number, 0)
    Faire une aide sur l'instruction Offset, pour mieux appréhender cette modification.

    cordialement.

  14. #14
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut
    Aprés avoir tenté de comprendre toutes ces explications bien utiles, j'en suis arrivé au code suivant qui fonctionne aprés avoir renommées tous mes labels dans selon une logique par ligne.
    Comme il y a 9 label par ligne à rendre invisible, j'ai modifié la cellule de référence. Je fais maintenant référence à la cellule C2 qui est égale à la B2 multipliée par 9.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     Dim Number As Byte
    Dim Ccontrol As Control
     If IsNumeric(Sheets("Feuil1").Range("C2")) Then
      Number = Worksheets("Feuil1").Range("C2") + 1
      For Each Ccontrol In RLT1JC.Controls
      If Len(Ccontrol.Name) < 8 Then
       If Left(Ccontrol.Name, 5) = "Label" Then
        If CInt(Mid(Ccontrol.Name, 6, 2)) >= Number And CInt(Mid(Ccontrol.Name, 6, 2)) <= 100 Then
         Ccontrol.Visible = False
        End If
       End If
    End If
      Next Ccontrol
     End If
    Mon probleme c'est que ça fonctionne jusqu'au label 100. Au delà, les labels restent affichés.

    dans la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If CInt(Mid(Ccontrol.Name, 6, 2)) >= Number And CInt(Mid(Ccontrol.Name, 6, 2)) <= 100 Then
    j'ai remplacé le 100 par 300 mais rien n'y fait
    J'ai bien peur de ne pas comprendre cette ligne de code.
    Quelqu'un peut-il m'aider please? je sens que je touche au but
    je joins le fichier

  15. #15
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    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 : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    C'est normal, cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CInt(Mid(Ccontrol.Name, 6, 2))
    convertit en entier les 2 caractères après le 6ème donc au-delà de 99, cela ne fonctionne plus comme on le souhaiterait
    Ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CInt(Mid(Ccontrol.Name, 6))
    prend en compte tous les chiffres au-delà du 6ème. Voir la fonction mid pour comprendre.
    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

  16. #16
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    L'instruction Mid(Ccontrol.Name, 6, 2) ne prend que les 2 termes à partir du 6ème caractère.
    Ce qui fait qu'à partir de 99, on arrête. Le "Label100" sera considéré comme étant égal à 10.
    Il faut modifier cette instruction par Mid(Ccontrol.Name, 6), sans préciser le nombre de caractères.

    Se référer à l'aide Mid.

    Sinon, avez-vous essayer le post #13 ?
    Bien évidemment dans la version précédente de votre fichier (sans renommer les labels). Le problème que vous soulevez est inhibé par le post précité.

    [EDIT] - Désolé, Je viens de répéter ce qu'a dit Philippe, pris de vitesse.

  17. #17
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Presque
    Hé bien j'étais persuadé d'avoir compris grace à vos explications mais je suis désolé ça ne fonctionne pas. Les Label au-delà de 99 ne disparraissent pas Voici le code que j'écris maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Number As Byte
    Dim Ccontrol As Control
     If IsNumeric(Sheets("Feuil1").Range("C2")) Then
      Number = Worksheets("Feuil1").Range("C2") + 1
      For Each Ccontrol In RLT1JC.Controls
      If Len(Ccontrol.Name) < 8 Then
       If Left(Ccontrol.Name, 5) = "Label" Then
        If CInt(Mid(Ccontrol.Name, 6)) >= Number And CInt(Mid(Ccontrol.Name, 6)) <= 100 Then
         Ccontrol.Visible = False
        End If
       End If
    End If
      Next Ccontrol
     End If
    Pouvez-vous me dire ce que j'écris mal là-dedans svp paske là je patauge. Pourtant vos explications sont bien claires, je pense avoir compris la subtilité et néanmoins au bout du compte les labels au-delà de 99 apparaissent toujours. Mystère.

    Pour le poste #13 avec mon ancienne version de fichier je fais le test demain et vous promet de poster la réponse, ne serait-ce que par égard à tout ce que vous faîtes pour moi. Merci encore

  18. #18
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2011
    Messages : 181
    Points : 377
    Points
    377
    Par défaut
    Bonjour à tous,

    On n'a pas fait attention, mais il y a 2 conditions qui évitaient d'aller au-delà du Label99, la seconde étant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(Ccontrol.Name) < 8 Then
    Il faut la remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Len(Ccontrol.Name) < 9 Then
    Se référer à l'aide de Len.

    Cordialement.

  19. #19
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut EUREKA
    Bonjour à tous
    Ca y est, ça fonctionne
    Je me penche maintenant sur l'aide de LEN et de MID histoire de bien assimiler leur fonctionnement
    Grace à vous tous j'en ai déja compris une bonne partie
    Encore merci
    Laurent

  20. #20
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 143
    Points : 93
    Points
    93
    Par défaut Encore une tite question svp
    Rebonjour à tous
    C'est le chieur de service -))
    Encore une petite question
    J'ai maintenant ce code qui fonctionne parfaitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dim Number As Byte
    Dim Ccontrol As Control
     If IsNumeric(Sheets("Feuil1").Range("C2")) Then
      Number = Worksheets("Feuil1").Range("C2") + 1
      For Each Ccontrol In RLT1JC.Controls
      If Len(Ccontrol.Name) < 9 Then
       If Left(Ccontrol.Name, 5) = "Label" Then
        If CInt(Mid(Ccontrol.Name, 6)) >= Number And CInt(Mid(Ccontrol.Name, 6)) <= 297 Then
         Ccontrol.Visible = False
        End If
       End If
    End If
      Next Ccontrol
     End If
    J'ai 33 lignes de 9 labels chacune. Lorsque la valeur de C2 est comprise en 9 et 252 (c'est à dire jusqu'à Label252, dernier label de la ligne 28) tout va bien. A partir de la ligne 29, j'ai une
    Erreur'6' Dépassement de capacité
    Quelqu'un a-t-il une idée?
    J'ai regardé sur les forums, il s'agit d'une histoire de capacité de calcul maximum qui je l'avoue me dépasse, une fois n'est pas coutume -)), et ça m'ennuie d'échouer si pret du but
    Merci par avance

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

Discussions similaires

  1. [PHP 5.0] Appliquer une fonction à plusieurs valeurs par référence
    Par gui80 dans le forum Langage
    Réponses: 12
    Dernier message: 09/03/2010, 13h42
  2. appliquer une macro à plusieurs cellules
    Par litium dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 09/02/2009, 21h53
  3. comment appliquer une condition where sur une datagridview
    Par moha1984 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 07/08/2008, 20h02
  4. Appliquer une fonction à plusieurs dossiers.
    Par MegaBigBoss dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/04/2008, 15h07
  5. [Etat] appliquer une condition sur une somme
    Par Oluha dans le forum IHM
    Réponses: 5
    Dernier message: 13/02/2006, 13h34

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