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 :

Scrollbar pour frame


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut Scrollbar pour frame
    Salut à tous,

    Dans un userform, j'ai une frame qui se remplit de checkbox dynamiquement. Le truc c'est que quelquefois les checkbox dépasse du frame.
    Comme je ne peux pas élargir la frame, il faudrait que j'utilise des scrollbar. L'outil est présent dans la toolbox de VBA mais je ne sais pas si c'est possible de l'utiliser pour ce cas là ; et si oui comment ?

    Merci pour vos réponses

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Tu dois évidemment afficher la barre de défilement en adaptant la valeur de la propriété ScrollBars. Tu peux demander à ce que la barre soit toujours visible ou seulement lorsque la zone visible est plus grande que le conteneur, grâce à la propriété KeepScrollbarsVisible.

    Pour un défilement vertical, tu dois également définir la valeur de la propriété ScrollHeight. Par défaut, cette valeur est à 0 et donc il n'y a pas de défilement possible.

    Par exemple, tu peux avoir un frame de 100 de haut et définir la propriété ScrollHeight à 300. La barre de défilement vertical s'affichera et la zone visible dans cette barre représentera +/- un tiers de la hauteur de la barre.

    La logique est identique pour la barre de défilement horizontal, en adaptant les noms des propriétés.

    Tu peux évidemment définir ces valeurs par macro, en fonction de la place de tes textbox, par exemple.

    Ok?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    Impec'

    Pour le principe no problem, mais je risque surement d'avoir d'autres questions quand je devrais coder tout ça.

    Merci Pierre

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour,

    Mets donc ton Frame dans un autre conteneur plus petit (correspondant à la surface d'affichage disponible). Ce conteneur peut être un autre Frame.
    Puis fais dérouler, à l'aide des scrollbars, ton Frame (le grand, celui qui contient tes contrôles) dans le petit (le container).
    Je te rappelle au besoin que tu peux affecter des valeurs négatives aux propriétés Top et Left d'un Frame...

    Bonne continuation...

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bonjour,

    Mets donc ton Frame dans un autre conteneur plus petit (correspondant à la surface d'affichage disponible). Ce conteneur peut être un autre Frame.
    Puis fais dérouler, à l'aide des scrollbars, ton Frame (le grand, celui qui contient tes contrôles) dans le petit (le container).
    Je te rappelle au besoin que tu peux affecter des valeurs négatives aux propriétés Top et Left d'un Frame...

    Bonne continuation...
    Et il fait comment après, pour faire dérouler son frame conteneur???? Faudra m'expliquer à quoi cela sert de mettre un frame dans un autre pour utiliser les scrollbars du frame conteneur à la place des scrollbars du frame contenu...
    il devra quand même adapter les méthodes de scrollbar...!!!
    Moi, pour résoudre le problème des scrollbars du frame conteneur, je propose de mettre dans un deuxième frame conteneur, lui-même placé dans un frame conteneur qui sera placé da... ... ... ...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Réponse du "boulet", donc ...
    j'agilise de façon signicative en utilisant une scrollbar totalement indépendante et que je place en bordure du conteneur du Frame (le plus grand) à dérouler

    Je donne à la scrollbar une valeur maxi = à la différence entre le cadre contenu (le plus grand) et le cadre conteneur (le plus petit)

    je place (en mode création) le côté supérieur du frame "contenu" (le plus grand) tout en haut du Frame 'contenant" (le plus petit)

    Code ensuite ?
    Ben ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub VScroll1_Change()
      Framecontenu.Top = -VScroll1.Value
    End Sub
     
    Private Sub VScroll1_Scroll()
      Framecontenu.Top = -VScroll1.Value
    End Sub
    Et je n'ai ni "environ" ni autres calculs totalement inutiles, et j'allège assez bien mon appli.
    Cet exemple était pour un déroulement vertical.
    La chose est identique pàour un déroulement horizontal (suffit alors de prendre la différence entre les largeurs)
    Mais... c'est une façon "boulet"... alors... faut l'oublier, hein ..., même si nous simmes des milliers à la préférer...et pas des moindres. )

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    On ne va pas démarrer un troll, ce n'est pas le but...

    Simplement, nous sommes sur un forum VBA pour Excel. On parle donc, a priori, d'un contrôle Frame VBA, et il n'y a pas, nativement, de conteneurs et de scrollbar indépendants dans les contrôles disponibles de VBA.

    De plus, sauf à vouloir attribuer des hauteurs ou largeurs par code, il n'y a besoin d'aucune ligne de code dans la solution que je propose.

    Bien sûr, Zoidy va utiliser du code pour placer ces contrôles à l'intérieur du frame, mais aucune ligne de code ne sera nécessaire pour faire fonctionner le scrollbar, et aucun controle externe à ceux proposés par défaut n'est nécessaire.

    Peut-être y-a-t'il des milliers de personnes qui utilisent ta façon dans un autre environnement qu'Excel, mais en VBA, j'ai des doutes.

    Donc, mon questionnement portait sur l'utilité de la méthode.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    et il n'y a pas, nativement, de conteneurs et de scrollbar indépendants dans les contrôles disponibles de VBA.
    me voilà bien perplexe, puisque j'en dispose (avec ma version 2000 toute bête ...!)
    Et une scrollbar VBA peut, par étirement, être mise verticalement ou horizontalement... et être ensuite nommée comme on l'entend...et elle possède toutes les propriétés et évènements nécessaires...

    Mais bon...

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    En effet, au temps pour moi!

    Mais cela ne change rien au fond de ma réponse.

    Pourquoi ajouter un contrôle scrollbar à un contrôle frame qui en possède déjà? (et devoir coder le fait de le masquer s'il n'est pas nécessaire...)
    Pourquoi insérer le frame dans un autre frame et piloter le défilement par code? Alors que, dans ce cas, il suffit d'utiliser les propriétés d'un contrôle existant...

    Je n'ai pas encore eu de réponses à ces questions. Je les attends de la part des milliers (et des meilleurs) qui utilisent le scrollbar comme toi sur ce forum

    Plus généralement, j'essaie de ne "surcharger" la réponse d'un intervenant que lorsque:
    - ma réponse apporte quelque chose de nouveau, et j'explique alors en quoi ce "nouveau" consiste et ce qu'il apporte.
    - Ma réponse complète ou précise les réponses antérieures

    J'essaie également, dans mes réponses, de ne pas prendre les gens pour des cons!

    Lorsqu'un intervenant dit que pour avoir une variable qui vaut 4, on utilise
    , je trouve inutile et puéril (style étalage connaissances - procès d'intention que j'assume totalement), d'ajouter une réponse qui dit qu'on peut aussi avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mavariable = log(256)/log(4)
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Tout simplement parce que de cette façon je n'ai pas à me préoccuper de la position de mes contrôles (je fais défiler tout le cadre)... et que le défilement ne se fait que dans l'intervalle nécessaire et sans auucune approximation (tout est pile poil automatiquement, avec juste un minuscule bout de code se résumant à ceci : Framecontenu.Top = -VScroll1.Value).
    Voilà pourquoi.

  11. #11
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Bonjour ucfoutu

    Malgré tes explications, je ne suis pas convaincu de l'utilité du deuxième frame.

    Je fais exactement les mêmes manipulations que toi, avec un frame en moins et sans scrollbar indépendant, sans code, sans calcul et sans approximation.

    De plus, si on veut masquer le scrollbar lorsque les contrôles sont tous dans la zone visible, il suffit, à la création, de modifier la propriété KeepScrollbarsvisible. Alors que dans ton cas, il faut masquer le contrôle par code, je suppose...

    Dans le cas de l'ajout dynamique de contrôles envisagé par Zoidy, il faudra simplement donner la hauteur maximale de défilement en fonction de la position et de la hauteur du contrôle le plus bas dans le frame, pour ajuster la valeur du scrollheight du frame. Mais on n'évite pas cela avec ton système, je pense.

    Donc, pour moi, aucune utilité du deuxième frame dans ce cas-ci... Désolé
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  12. #12
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 535
    Points
    5 535
    Par défaut
    Bonjour, Pierre Fauconnier,

    N'en parlons donc plus, mais si, un jour, tu trouvais le temps d'utiliser la méthode d'un Frame dans l'autre, tu comprendrais bien vite la souplesse qu'elle offre, notamment dans le cas de rajouts dynamiques (le seul paramètre à modifier étant celui des dimensions du plus grand des deux Frames et il est connu à chaque ajout, surtout si tu utilises toujours le même intervalle entre les contrôles ajoutés dynamiquement car une simple multiplication suffit alors).

    N'en parlons donc plus, mais je continue avec une méthode souple, aboutissant à un affichage agréable et rendant facile la maintenance (sans aller fouiller dans toutes les propriétés) par un développeur "prenant le relais" de l'application..

    Bonne journée.

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 947
    Points
    55 947
    Billets dans le blog
    131
    Par défaut
    Salut ucfoutu,

    Je prendrai le temps de regarder cela à l'aise, et nul doute que j'y trouverai mon bonheur dans certains cas.

    Pour ce qui occupait la demande initiale de Zoidy, je joins un fichier en annexe. Tu verras que la seule intervention à faire en cas d'ajout dynamique, est, comme pour ta solution, d'adapter le paramètre du scrollheight en fonction du placement du contrôle ajouté.

    Honnêtement, je ne vois pas en quoi ma méthode est moins souple, l'affichage moins agréable et la maintenance plus complexe...

    Cela étant, chacun sa méthode...

    Bonne journée . Au fait, j'espère avoir agilisé de façon significative... et je pense avoir assez bien allégé mon appli
    Fichiers attachés Fichiers attachés
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  14. #14
    Membre régulier Avatar de zoidy
    Inscrit en
    Avril 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 184
    Points : 118
    Points
    118
    Par défaut
    Ah non Pierre là tu abuses : 1 ligne pour afficher la scrollbar dynamiquement, c'est beaucoup trop

    En tout cas merci à vous les gars pour vos explications

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

Discussions similaires

  1. [html] Scrollbar pour un INDEX
    Par DJ Skudd dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 11/08/2006, 10h23
  2. [VBA-E] Une ScrollBar pour deux TextBox
    Par Ender dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 30/07/2006, 14h05
  3. destructeur pour Frame ou dialog
    Par ced2004 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 08/05/2006, 13h52
  4. cherche exemple de construction de scrollbar pour select
    Par titicurio dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/02/2006, 16h00
  5. [FLASH MX] Une scrollbar pour plusieurs champs texte
    Par ffmlgraphics dans le forum Flash
    Réponses: 1
    Dernier message: 08/08/2005, 16h45

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