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] masquer une combo lorsqu'elle est vide


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut [VBA-E] masquer une combo lorsqu'elle est vide
    Bonjour,


    comment masquer une combobox lorsqu'elle est vide et la faire réapparaitre dans le cas contraire.

    merci

    a+
    A star is dead

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    En testant la plage de cellules qui renseigne ton combo... Pas évident, car très lent pour le nbre de combos que tu as.
    Peut-être en comparant la plage elle-même avec une plage identique d'une colonne vide. Visible = ColCombo = ColTest. Pas testé.
    Bon, comme maintenant j'ai cette question dans la tête...
    C'est vrai, quoi, vous posez un tas de questions et après, nous, comment on fait si on sait pas
    A+

  3. #3
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    ben si tu dis que tu te poses la question, que tu réfléchis
    imagine pour moi
    A star is dead

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Pour masquer une combo vide, donc, tu peux vérifier la présence de données dans la colonne, de la ligne 2 à la dernière ligne. Dès qu'est trouvée une donnée -> sorie du test.
    Pour ça tu modifies InitCombo(...) en ajoutant la ligne bleue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub InitCombo(NoLigne, NoColonne)
    Dim NomCombo As String
    Dim Plage As String
    Sheets("Bd").Activate
        Plage = Range(Cells(2, NoColonne), Cells(NoLigne, NoColonne)).Address
        Call TesterPlageVide(NoLigne, NoColonne
        NomCombo = "cbox" & NoColonne
        With ATESTER.Controls(NomCombo)
            .Value = Cells(1, NoColonne)
            .RowSource = Plage
        End With
    End Sub
    ... et tu ajoutes la macro qui va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub TesterPlageVide(NoLigne, NoCol)
    Dim C1 As Range, LaCell As Range
    Dim Ok As Boolean
        Set C1 = Range(Cells(2, NoCol), Cells(NoLigne, NoCol))
        For Each LaCell In C1
                Ok = LaCell <> ""
                If Ok Then Exit For
        Next
        ATESTER.Controls("cbox" & NoCol).Visible = Ok
    End Sub
    Si jamais tu avais dans ton esprit pervers l'idée d'afficher tous tes combox quand tu veux, j'ai la solution mais là, je te laisserai chercher
    A+

  5. #5
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    bonsoir,
    j'ai recopié ton code mais aucune réaction

    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
    Sub InitCombo(NoLigne, NoColonne)
    Dim NomCombo As String
    Dim Plage As String
    Sheets("Bd").Activate
        Plage = Range(Cells(2, NoColonne), Cells(NoLigne, NoColonne)).Address
         Call TesterPlageVide(NoLigne, NoColonne)
        NomCombo = "cbox" & NoColonne
        With ATESTER.Controls(NomCombo)
            .Value = Cells(1, NoColonne)
            .RowSource = Plage
        End With
    End Sub
     
     
     
    Sub TesterPlageVide(NoLigne, NoColonne)
    Dim C1 As Range, LaCell As Range
    Dim Ok As Boolean
        Set C1 = Range(Cells(2, NoColonne), Cells(NoLigne, NoColonne))
        For Each LaCell In C1
                Ok = LaCell <> ""
                If Ok Then Exit For
        Next
        ATESTER.Controls("cbox" & NoColonne).Visible = Ok
    End Sub
    merci a+
    A star is dead

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as vidé une colonne de la seconde ligne à la dernière ?
    Tu as ajouter ) à la fin de ma ligne rouge ?

  7. #7
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    h non j'avais pas fait ca, ca ok ca marche pas de pb mais dans mon cas lorsque le materiel est sorti est bien j'ai 3 combos qui ne sont pas remplis mais des que le matos rentré ben tout est rempli

    donc il faudrait qu'elles réapparaissent des qu'elles ne sont plus vides et elur label aussi

    merci a+
    A star is dead

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par T'as pas vu ce que ousk'
    Si jamais tu avais dans ton esprit pervers l'idée d'afficher tous tes combox quand tu veux, j'ai la solution mais là, je te laisserai chercher

    Pas bien rapide le cerveau des jeunes, ce jour...

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Mais comme je suis une brave bête...
    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
    Sub laprocedure(Lindex)
    Dim lecontrol As Object
    Dim Dernièreligne As Integer
    Dim NoCol As Integer 'ou Byte
        Dernièreligne = ActiveSheet.Range("A1").SpecialCells(xlCellTypeLastCell).Row
        For Each lecontrol In ATESTER.Controls
            If InStr(lecontrol.Name, "cbox") = 1 Then
                NoCol = Right(lecontrol.Name, Len(lecontrol.Name) - 4)
                ATESTER.Controls(lecontrol.Name).ListIndex = Lindex
    
                Call TesterPlageVide(Dernièreligne, NoCol)
            End If   
        Next
        If cbox9.ListIndex <> 1 Then
            CellHeure.Value = Format(cbox9.Value, "dd/mm/yy hh:mm")
            CellHeure.Visible = True
        End If
    End Sub
    Ajoutées, les lignes... en couleur
    A-

    Comme je n'ai pas le moyen de tester, tu vas avoir la lourde responsabilité de le faire pour moi

  10. #10
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    Bravo Ousk, belle mentalité

    alors que je me meurs tu souris

    alors que je t'implore tu me dénigres

    merci bravo
    tu l'auras voulu

    Je suis tout moi qui suis un

    A star is dead

  11. #11
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    je savais OUsk que je pouvais compter sur toimais tu as été tellement rapide que les réponses ont du se croiser

    je teste cela demain amintenant c'est l'apéro et puis le foot


    quelle confiance j'ai la lourde responsabilité de tester merci encore et BSR

    A demain ah non je l'ai pas dis fort !!!


    A star is dead

  12. #12
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    Bonjour,

    J'ai bien l'userf qui s'affiche mais dè que je touche une combo ou le spinbutton il plante sur la ligne en rouge
    avec une erreur 1004 "erreur définit par l'application ou par l'objet", ma feuille n'est pas protégée.

    y aurait pas une pb entre nocol et
    nocolonne
    ?

    J'ai essayé avec les deux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim NoCol As Integer 'ou Byte

    la ligne en rouge est la ligne qui beugue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub TesterPlageVide(NoLigne, NoCol)
    Dim C1 As Range, LaCell As Range
    Dim Ok As Boolean
    
        Set C1 = Range(Cells(2, NoCol), Cells(NoLigne, NoCol))    
    For Each LaCell In C1
                Ok = LaCell <> ""
                If Ok Then Exit For
        Next
        bduserf.Controls("cbox" & NoCol).Visible = Ok
    End Sub


    merci a+
    A star is dead

  13. #13
    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 il y as quoi dans ta variable nocol et NoLigne à ce moment la .... ? passe le curseur dessus histoire de voir leur valeur..., de plus tu travaille sur la feuille Excel Active... c'est bien une feuille de calcul .?

  14. #14
    Membre régulier Avatar de lio62
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 472
    Points : 101
    Points
    101
    Par défaut
    bonjour
    oui c une feuille de calcul


    noligne=0
    nocol=1


    merci
    a+
    A star is dead

  15. #15
    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 sous excel les numéro de lignes vont de 1 à 65536 ( pas de 0 ) .. .et pour la colonne c'est 1 à 255.... il te faut revoir le calcul de ton paramétre NoLigne..!

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Tu as changé quelque chose dans mon code ?
    Non ! Tu as changé quelque chose dans mon code !
    La sub est appelée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            If InStr(lecontrol.Name, "cbox") = 1 Then
                NoCol = Right(lecontrol.Name, Len(lecontrol.Name) - 4)
                'ATESTER.Controls(lecontrol.Name).ListIndex = Lindex
                Call TesterPlageVide(Dernièreligne, NoCol)
    Dans TesterPlageVide tu as
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub TesterPlageVide(NoLigne, NoCol)
    Dim C1 As Range, LaCell As Range
    Dim Ok As Boolean
        Set C1 = Range(Cells(2, NoCol), Cells(NoLigne, NoCol))
    NoCol ne peut pas contenir 0 à moins que tu aies ajouté un combo cbox0

  17. #17
    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
    Citation Envoyé par ouskel'n'or
    Tu as changé quelque chose dans mon code ?
    Non ! Tu as changé quelque chose dans mon code !
    bonjour ...ousk' ... tu as dit à lio62... que pour repérer plus facilement les erreurs de frappe il fallait qu'il mette ... la ligne :
    en haut de ses modules...?

  18. #18
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Salut bbil. En l'occurence, NoCol est un paramètre. Mais je crois que lio a mis Option Explicit de lui-même

  19. #19
    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
    c'est pas noCol qui est à 0 mais noLigne... je parirai sur Dernièreligne...(? avec/sans accent...)

  20. #20
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok, alors je crois deviner... Quand je t'ai dit de vider une colonne pour tester, lio, tu as enlevé l'entête ? Faut pas.

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

Discussions similaires

  1. Masquer une liste si elle est vide
    Par felix79 dans le forum Jasper
    Réponses: 1
    Dernier message: 06/12/2011, 14h45
  2. Réponses: 1
    Dernier message: 17/08/2011, 17h35
  3. Masquer une feuille lorsqu'elle perd le focus
    Par bichonviou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/11/2007, 15h31
  4. Réponses: 2
    Dernier message: 10/05/2007, 22h19

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