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 :

affichage variable dans listebox


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 affichage variable dans listebox
    Bonjour à tous,
    J'ai une userform de 33 label maxi l'un au dessus de l'autre.
    Chaque label affiche un nom.
    Les noms proviennent de 33 cellule d'une feuille excel.
    Le nombre de lignes de label qui s'affichent dépend de la valeur insérée par l'utilisateur dans une cellule (entre 1 et 33).
    Donc si l'utilisateur affiche 25, il n'y a que les 25 premiers label qui s'affichent.
    Je voudrais que chaque semaine, les noms contenus dans les label remontent d'un cran. Exemple :
    S1
    A
    B
    C,

    S2
    B
    C
    A

    Etc...
    De plus, il faut que cette exercice s'adapte au au nombre de label qui s'affichent
    Si il y a 25 lignes, que lors de la seconde semaine, le nom qui était en 1 s'affiche dans la ligne 25. Si il y 8 lignes, que ce soient en 8. Etc...
    Et je ne sais pas vers qui m'orienter et en profiter ainsi pour apprendre de nouvelles fonctions
    Quelqu'un peut-il me dire vers quoi m'orienter?

    Je peux joindre mon fichier si besoin
    merci par avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Tu parles de Label (étiquettes) et ton titre parle de ListBox, quel composant est le vrai

    Philippe

  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 remarque judicieuse
    Bonjour Philippe et à tous En effet Philippe ta remarque est judicieuse. Je me suis trompé dans le titre. Il s'agit bien de Label. Je ne vois tellement pas comment aborder le problème que j'ai eu du mal à expliquer ce que je cherche à faire et je m'appercois que le post n'est pas aisé à comprendre. Si j'avais seulement une idée de vers quoi me diriger comme fonction je pourrais commencer à chercher.J'ai une solution en enchainant les IF mais ça va faire une usine à gaz et un nombre incroyable de lignes de code. Je crois que je n'ai plus qu'à replonger dans mon bouquin et à chercher vers quelle fonction m'orienter. Cordialement

  4. #4
    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 Sujet intéressant
    Bonjour à tous,

    Vite fait, mais à essayer et à adapter.
    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
    Private Sub UserForm_Initialize()
    Dim NewSem As Boolean
    Dim Masque As Byte
    Dim Tampon As String
    Dim i  As Byte
     
    If Weekday(Date, 2) = 1 Then NewSem = True Else NewSem = False
    If Not NewSem And ThisWorkbook.Sheets("Feuil1").Range("A1") Then ThisWorkbook.Sheets("Feuil1").Range("A1") = NewSem
    If NewSem And ThisWorkbook.Sheets("Feuil1").Range("A1") <> True Then
        For i = 1 To 33
            If Not Controls("Label" & i).Visible Then
                Masque = i
                Exit For
            End If
        Next
        Masque = i - 1
     
        Tampon = Label1.Caption
        For i = 1 To Masque - 1
            Controls("Label" & i).Caption = Controls("Label" & i + 1).Caption
        Next
        Controls("Label" & Masque).Caption = Tampon
        ThisWorkbook.Sheets("Feuil1").Range("A1") = NewSem
    End If
    End Sub
    Ce code est à mettre en tout dernier dans cette Sub, c'est-à-dire après avoir mis les Labels voulus en invisible et fixer la propriété Caption des autres.

    Tout cela en supposant que :
    - Les labels ont un Name égal à Label1 à Label33 ;
    - Le changement de semaine est le lundi ;
    - Le fichier derra être ouvert au moins une fois le lundi.

    Il est nécessaire de mémoriser en dur le changement effectué lors du 1er roulement du lundi ; sinon aux appels suivants de cet UserForm, de nouveau le roulement se fera une fois de plus.
    Ici, en A1 de la feuille 1 ; à adapter

    [EDIT] Modifier la ligne 10

  5. #5
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Une proposition (assez tordue):

    Renomme tes labels (Label1, Label2... Label33)

    Les noms sont inscrits dans la colonne A de la feuille Feuil1 à partir de la cellule A4 (pour Nb=33, on aura A4:A36)

    La date de démarrage (première semaine) est inscrite en B1

    Le nombre de noms est inscrit en B2

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub UserForm_Initialize()
    Dim Nb As Byte, i As Byte
    Dim Sem As Integer
    Dim DteDeb As Date
    Dim Tb
     
    With Worksheets("Feuil1")
        DteDeb = .Range("B1")
        Nb = Val(.Range("B2"))
        If Nb > 1 Then
            Tb = .Range("A4").Resize(Nb, 1).Value
     
            Sem = DateDiff("ww", DteDeb, Date, vbMonday)
            Organise Tb, Sem
            For i = 1 To Nb
                Me.Controls("Label" & i).Caption = Tb(i, 1)
            Next i
        Else
            Me.Label1.Caption = .Range("A4")
        End If
    End With
    End Sub
     
    Private Sub Organise(ByRef Tb, ByVal S As Integer)
    Dim Nb As Byte, i As Byte
    Dim Str As String
    Dim T As Integer
    Dim Tmp, Tablo
     
    Nb = UBound(Tb, 1)
    ReDim Tmp(1 To Nb)
    T = S Mod Nb
    If T > 0 Then
        For i = 1 To Nb
            Tmp(i) = IIf(i = T + 1, "@", "") & Tb(i, 1)
        Next i
     
        Str = Join(Tmp, "|")
        Tablo = Split(Str, "|@")
        Str = Tablo(1) & "|" & Tablo(0)
        Tablo = Split(Str, "|")
     
        For i = 1 To Nb
            Tb(i, 1) = Tablo(i - 1)
        Next i
    End If
    End Sub

  6. #6
    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 Mes labels ne se nomment pas de 1 à 33
    Merci à HopHopHop et à Mercatog Je vais plutôt chercher dans la direction du post de Mercatog car l'utilisation ne peut pas imposer d'être ouvert chaque lundi. De plus, je ne peux pas renommer mes labels de 1 à 33 car la userform en comporte un grand nombre et je les ai nommés par ligne de manière à pouvoir utiliser une fonction qui affiche ou non les labels. Donc les labels concernés sont disposés en colonne et se nomment successivement Label2, Label11, Label20, Label29, etc... jusqu'à Label290. Je me dis que je pourrais créer une userform que je n'afficherais pas avec des labels nommés de 1 à 33 et faire un renvoie dans leurs homologes qui eux seront dans la userform visible en utilisant une formule genre "Label2 = Renvoi.Label1 pour la première. J'essai ça et je vous dis si ça tient En tout cas merci pour vos conseils

  7. #7
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Droit vers une usine à gaz.
    Quelle est la logique avec laquelle tu as nommé tes 33 labels?
    Tu peux toujours les nommer Toto1, Toto2....Toto33

  8. #8
    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 Ben ouais mais non
    Ben oui, effectivement, changer le noms des labels j'y ai pensé, sauf que ma userform contient 306 Labels allignés et numéroté par ligne. chaque ligne contient 9 Labels. Ligne 1 = L1 , L2, L3, L4, L5, L6, L7, L8, L9. Ligne 2 = L10, L11, etc... et je leur applique la fonction suivante pour faire apparaitre le nombre de lignes désirées en fonction de la demande de l'utilisateur saisie en C2.
    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 UserForm_Activate()
    Dim Number As Integer
    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
    End Sub
    Comme tu le vois dans le code, elle ne s'applique qu'aux 297 premiers Labels.Les 33 Labels dont je veux pouvoir faire varier le contenu en fonction de la semaine sont compris dans ces 297. ce sont ceux de la seconde colonne (Label2, Label11, Label20, etc... Donc si je les renomme, le code ci-dessus ne fonctionnera plus. Je te joins un fichier allégé pour que éclairer mes explications.

  9. #9
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Tes labels sont Label2, Label11, Label20... leur suffixes suivent l'équation y=9x-7

    Il faudra changer les lignes 15 à 17 par celles ci (seule la ligne 16 a été changée)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            For i = 1 To Nb
                Me.Controls("Label" & 9 * i - 7).Caption = Tb(i, 1)
            Next i
    Il reste à adapter le code, dommage que ta feuille Feuil1 sur le fichier est vide


    PS. Vu ton fichier, il serait préférable de se pencher vers la création dynamique des labels.

  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 avec la feuille 1
    Je patauge un peu
    Je te joins le fichier avec la feuille 1 remplie
    Si tu peux m'éclairer...

  11. #11
    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 Résolu
    Ca y est j'ai fais les changements nécessaires et ça fonctionne.
    Merci beaucoup à toi. je n'ai plus qu'à me pencher sur le code pour tout comprendre.
    Mille merci

  12. #12
    Expert éminent sénior 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
    Points : 31 877
    Points
    31 877
    Par défaut
    Tu as où ta date de référence (date de départ de calcul du nombre de semaines)?

    Il faudra aussi faire l'effort d'expliquer ton fichier, il est trop mal conçu

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

Discussions similaires

  1. [PHP 5.3] affichage variable dans cookie
    Par greatzoulou dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2012, 15h19
  2. Affichage variable dans un champ texte et espaces
    Par bonuxis dans le forum Langage
    Réponses: 2
    Dernier message: 04/03/2010, 11h01
  3. Affichage d'une variable dans un label
    Par Rydley dans le forum Windows Forms
    Réponses: 5
    Dernier message: 14/03/2007, 20h14
  4. Affichage contenu d'une variable dans JS
    Par tangjuncn dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 18/05/2006, 14h38
  5. Affichage variable dans une fenêtre d'alerte
    Par undercrash dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/03/2006, 22h35

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