Insérer UserForm entre barre de calcul et ligne 1

Mika -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai créé un userform en guise de barre d'onglet, est-il possible de le rendre fixe entre la barre de calcul et la 1ere ligne du tableur ?

Merci à vous.

18 réponses

Résumé de la discussion

La problématique porte sur la possibilité de rendre fixe une barre d'onglets créée via un UserForm entre la barre de calcul et la première ligne d'un classeur Excel. Pour les versions antérieures à 2007, cela était envisageable sans modifier l'apparence d'Excel, mais depuis l'arrivée du ruban, les barres personnalisées prennent la forme d'un onglet du ruban. Des solutions proposées incluent une intégration indépendante ne modifiant pas l'apparence d'Excel, ou un UserForm personnalisé applicable uniquement au fichier courant, afin d'éviter l'intrusion dans d'autres classeurs. En pratique, des ajustements comme le redimensionnement dynamique selon l'affichage et le remplacement des éléments par des images peuvent être envisagés, tout en restant compatible avec le comportement des barres et des onglets.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Cela doit être réalisable.
    Regarde déjà cet exemple.
    0
  2. Mika
     
    Merci de la réponse, ca correspond à ce que j'ai déjà mais en plus gros.
    Je souhaite garder l'excel "par défault" avec sa barre d'outils et rajouter une barre d'onglet (mon userform) endessous de ma barre de calcul mais avant ma premiere ligne...

    Si un autre moyen qu'un userform, je suis preneur !

    L'idée étant de masquer mes onglets du bas (feuil1, feuil2, feuil3..) et d'intégrer une barre d"onglet avec des images à la place de feuil1, feuil2, ....
    0
  3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,

    On va donc tout reprendre doucement (c'est le matin).
    1- Tu disposes de qu'elle version d'Excel?
    2- le code ne sera utilisé que dans cette version d'Excel?
    3- Qu'elle "barre" souhaites tu ajouter? Celle du haut (en dessous de ma barre de calcul mais avant ma premiere ligne), celle du bas (L'idée étant de masquer mes onglets du bas (feuil1, feuil2, feuil3..)), ou les deux?
    0
  4. Mika
     
    Salut !
    Merci de ta reponse,

    1- Je dispose de la version 2010
    2- le fichier sera utilisé par des utilisateurs qui ont la version 2007
    3- Je souhaite rajouter une barre entre la barre de cacul et la ligne 1 mais je ne sais pas si c'est possible...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Mika
     
    Aujourd'hui j'ai réussis à mettre des images sur ma ligne 1 avec des liens hypertexte mais en fonction du zoom de certaines pages ou la creation de groupement de lignes, la barre d'onglet n'est pas identique.

    Voici un exemple pour comprendre l'idée:

    http://cjoint.com/?3Kfj0vaBjnD
    0
  7. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Je regarde ça dans la journée.
    Cela parait simple au premier abord mais c'est plein de contraintes... Et donc, dur dur de parvenir à un bon résultat.
    Je te fournirai un exemple en fin de matinée je pense...
    0
  8. Mika
     
    Pas de soucis.
    C'est pour ca que j'ai pensé à intégrer une barre indépendamment du tableau...

    Merci !
    0
  9. Mika
     
    Merci,
    Oui vous avez étiré la barre de calcul.

    Cependant est-il possible que ca s'applique uniquement pour ce fichier, car lorsque j'ouvre un autre fichier excel, la barre apparait aussi dans ce nouveau fichier ?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Comment faites-vous?
      Décrivez toutes les étapes que vous faites, car cela ne le fait pas chez moi, j'avais prévu cette éventualité...
      0
    2. Mika
       
      J'ai ouvert un autre fichier sans le vouloir et la barre et apparu automatiquement (il s'agit de la meme) . Quand j'appuie en bas à droite de l'écran pour revenir sur mon bureau, elle se trouve aussi sur mon bureau.

      J'ai regardé un peu les codes pour analyser le fonctionnement avec l'userform et les modules (pas si évident), il est possible de remplacer les numéros 1, 2, 3, 4... par des images ?
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Il reste à faire, si ce modèle te convient :
      - le redimensionnement en fonction de l'affichage de ton classeur,
      - le remplacement des n° par des images => ne causera aucun souci s'agissant de boutons de commande. Il faudra juste voir pour l'aspect "dynamique" de la chose...

      Tu dis, si intéressé, on peut poursuivre...
      0
    4. Mika
       
      Merci pijaku,

      Je souhaite bien poursuivre, j'aimerais savoir les codes pour :
      1) changer la couleur de fond de barre qui est actuellement mauve, par le bleu que j'avais mis en fond de la ligne1.
      2) changer la hauteur de la barre (diminuer de moitié)
      3) changer la longueur de la barre (longueur de la fenêtre par défault)
      2) savoir comment intégrer mes images (tailles, positions...)
      3) j'ai un double pour chaque image qui intègre une couleur de fond différente (pour les onglets séléctionné) un peu comme vous avez fait avec le fond blanc quand l'onglet 1 est séléctionné.

      On peut faire étape par étape, que je comprenne bien à quoi correspondent les codes et en apprendre un peu plus.

      Merci de votre disponibilité.
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Ok.
      On voit ça point par point dès demain matin.
      Parce que là j'ai les yeux qui se croisent...
      A demain donc
      0
  10. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Première petite question du jour, avant de continuer...
    Pourquoi fais tu cela?
    Quel est le but ultime?

    Pourquoi un UserForm sous le bandeau et pourquoi pas un nouvel onglet dans le bandeau?

    ... oui je sais ça fait 3 questions...
    0
  11. Mika
     
    Bonjour pijaku,

    En faite, je souhaite créer un outil informatique, je souhaite avoir une barre d"onglet avec des logos (ou images) pour aller sur mes feuilles, au lieu de les avoir en bas par default.

    Pour que ce soit intuitif et aussi "joli".

    Le userform c'est une idée comme une autre (malgré qu'il faut aggrandir la barre de calcul.
    C'est pour çà que je suis pas fermé à d'autres idées.

    J'espere t'avoir éclairé un peu plus..
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Oui.
      Regarde ce tutoriel et dis moi ce que tu penserais de cette solution...
      0
  12. Mika
     
    Pas si mal...
    J'opterais plus pour "position=mstop" pour ce qui est de l'emplacement.

    L'idée est d'intégrer des images perso en guise d'icone bouton, comme sur l'article 2.2.3 mais à ce que j'ai compris il faut insérer l'adresse où se trouve l'image sur le disque dur (D: ...).
    Cela ne va pas poser problème lorsque je vais ouvrir mon fichier sur un autre ordinateur ?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Pas si tu mets tout, fichier + images dans un fichier .zip. Fichier que tu décompresses sur chaque poste ou tu dois utiliser ton fichier.
      Après ne te reste qu'à référencer le chemin d'accès par : ThisWorbook.Path & "/" & Image1.jpg

      Si tu veux conserver de la transparence, tu ne pourras utiliser que le format gif. Excel n'acceptant pas le png...
      0
    2. Mika
       
      Ah dommage ! car les FacesID sont vraiment très basic et "petit"

      Je serais bien tenté d'essayer avec des images persos tout de même !
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Malheureusement tu n'as que le gif pour gérer la transparence sous Excel...
      0
    4. Mika
       
      J'ai commencé à faire un code mais toujours pas de barre :

      Sub Ajout_BarreMenu()

      CommandBars.Add(Name:="MaBarre", Position:=msoBarTop, MenuBar:=False, Temporary:=True).Visible = True


      End Sub

      Faut le mettre dans Thisworkbook ?
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Dans un module ton code :
      Sub Ajout_BarreMenu()
      CommandBars.Add(Name:="MaBarre", Position:=msoBarTop, MenuBar:=False, Temporary:=True).Visible = True
      End Sub 


      Dans le Module ThisWorkbook :
      Private Sub Workbook_Open()
      Call Ajout_BarreMenu
      End Sub


      Tu enregistres, fermes et ouvres...
      0
  13. Mika
     
    J'ai intégrer ton nouveau code,

    Un nouvel onglet "Compléments" est apparu à coté de développeur, lorsque je clique dessus, une rubrique "Barres d'outils personnalisées" est présente mais vide...

    Est-ce normal qu'elle se trouve là ?
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Oui. Tu viens d'ajouter un onglet à ton ruban.
      Mais pas tout à fait vide...
      0
    2. Mika
       
      Pourtant la barre ne devrait pas se trouver dans "Compléments" et être indépendante avec : Position:=msoBarTop

      Non ?
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      C'était valable pour les versions d'Excel avant 2007. Depuis qu'il y a ce ruban, toutes les barres ajoutées (personnalisées en fait) sont ajoutées comme un onglet du ruban.
      Je t'ai proposé cette solution car elle ne modifie rien de l'apparence d'Excel. Tu conserves les fonctionnalités.
      Cependant, si tu désires repartir sur ce que l'on faisait avec un UserForm, dis le.
      D'autant plus que j'ai un peu avancé sur le sujet.
      0
    4. Mika
       
      Très bien,

      Le UserForm je suis d'accord mais il faut qu'il s'applique UNIQUEMENT à ce fichier et qu'il ne s'incruste pas si j'ouvre un deuxieme fichier (qui n'a rien à voir) au même moment.
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Je ne suis pas dispo cet après midi (travail oblige).
      Je reprendrais ça demain et regarderai pour réserver ton Usf uniquement à ton fichier...
      0
  14. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Salut,

    Tout d'abord des explications sur ce qui est déjà fait...

    1- Le Module Design_USF sert exclusivement à enlever la barre de titre de l'UserForm. C'est un code mis en ligne ICI par l'excellent Bbil. On n'y touche pas, on laisse ça comme ça, c'est tout fait et bien fait.
    Ce code est appelé dans le
    Private Sub UserForm_Initialize()
    par :
    AfficheTitleBarre Me.Caption, False


    2- Le Module Variables_Publiques. Comme son nom l'indique fort bien, j'y ai placé les variables servant partout dans le classeur. Notamment dans le Module de l'UserForm et le Module de classe.

    3- Le module de l'userform regroupe tous les codes utiles à l'affichage et aux actions de l'userform. Tu y trouves :
    - Private Sub Croix_Fermeture_Click()
    C'est tout simplement le code du bouton de fermeture de l'userform
    - Private Sub UserForm_Initialize()
    C'est le code qui se déclenche à "l'ouverture" de l'userform.
    - Private Sub Creer_Onglets()
    C'est le code qui va te créer tes "boutons". Il va être modifié car tu souhaites placer des images et non des CommandButton...

    4- Le module ThisWorkbook. Contient :
    - Private Sub Workbook_Open()
    Le code qui se déclenche à l'ouverture de ton classeur
    - Private Sub Workbook_BeforeClose(Cancel As Boolean)
    à la fermeture...

    5- Le module de classe ClasseCB : C'est un peu particulier. Le code placé ici est le code de tes boutons. En fait, comme on les créé de manière dynamique, le code placé là leur permet de réagir à certaines actions. Pour ton cas, au click :
    Private Sub BoutonEvents_Click()

    J'ai continué un peu et vais t'expliquer la suite dans une autre réponse...

    En attendant, regarde déjà ces différents codes et dis moi si tu as besoin d'explications supplémentaires.
    0
  15. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Re-

    Pour faire en sorte que l'userform se redimensionne automatiquement lorsque tu "resize" ton classeur, c'est délicat. En effet, cet événement n'est pas prévu par VBA sous Excel. On a juste l'événement window_resize qui intervient lorsque tu redimensionnes la "fenêtre interne" :


    Donc, nous sommes bien embêtés...
    Il faudrait créer cet événement, mais mon niveau s'avère insuffisant. Pour le créer, il faudrait un module de classe et créer donc un nouvel objet application avec un code resize pour cet objet dans ce module de classe... Hyper trash, pour moi du moins.

    Comment faire alors?
    Le moins contraignant est de créer un code qui redimensionnes ton userform en fonction donc de la taille de l'application Excel et ... de lancer ce code tous les x secondes. Ainsi, lorsque l'utilisateur va modifier la taille du classeur, x secondes plus tard ton userform va "suivre". Ok?
    Dans le classeur ci-joint, tu trouveras donc un nouveau module : Module_Timer.
    Il contient les codes de :
    - lancement du Timer : Public Sub Lance_Timer()
    - fermeture du Timer : Public Sub Arret_Timer()
    - la procédure de redimensionnement de l'userform : Sub ReDim_Usf(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTime As Long)

    Important :
    dans le code du lancement du Timer, tu trouves cette ligne :
    lngTimerID = SetTimer(0, 0, 500, AddressOf ReDim_Usf)

    le chiffre 500 représente l'intervalle de déclenchement soit 500ms (1/2 seconde)
    AddressOf ReDim_Usf représente la procédure à déclencher.

    Très important : avant de faire des modifs ou même de regarder le code, il convient d'arrêter le Timer. Pour cela, j'ai placé le code de fermeture également dans le code du bouton de femeture de l'UserForm (le bouton "croix" X). Cela n'aura plus lieu d'être par la suite, mais pendant toute la création de ton fichier, il faudra le fermer systématiquement...
    Ok?

    Le fichier <=== ICIIIIII

    🎼 Cordialement,
    Franck 🎶
    0
  16. Mika
     
    Bonjour,

    On entame fort la journée, aurais tu un fichier exemple afin que je regarde les codes en détails ?

    Merci
    0
    1. Mika
       
      C'est vrai, mon regard est passé au travers, sorry ..

      Merci !

      La barre suit bien la fenêtre meme si c'est un peu lent mais pas grave., c'est un très bon début.
      Est 'il possible que cela ne concerne seulement CE fichier et pas tous les fichiers ouverts ?
      0
    2. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Est 'il possible que cela ne concerne seulement CE fichier et pas tous les fichiers ouverts ?
      Oui.
      Pour cela, nous allons utiliser les événements
      Workbook_Activate()
      et
      Workbook_Deactivate()
      . Comme ceci :
      Codes à ajouter dans le module ThisWorkbook :

      Private Sub Workbook_Activate()
      Application.WindowState = xlMaximized
      Marge_Top = Abs(Application.Top)
      Application.FormulaBarHeight = 5
      If Usf_Ouvert = False Then UserForm1.Show 0: Usf_Ouvert = True
      If BlnTimer = False Then Call Lance_Timer
      End Sub
      
      Private Sub Workbook_Deactivate()
      Application.FormulaBarHeight = 1
      If BlnTimer = True Then Call Arret_Timer
      If Usf_Ouvert = True Then UserForm1.Hide: Usf_Ouvert = False
      End Sub


      TON FICHIER!!!!!!!!!!!!
      0
    3. Mika
       
      Parfait on y arrive petit à petit !

      J'ai vu que tu avais mis un fond bleu, c'est top !

      Maitenant concernant lesonglets (1, 2 , 3)

      Comment fait-on par exemple si je veux mettre les images qui se trouve sur la ligne 1 en guise d'onglet sur ma barre?

      En réalité ce sont des logos que j'ai et non pas des chiffres donc c'est pour ca je dis "images".
      0
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Alors, tu es prêt?

      Il va te falloir 2 images par onglet. Si tu veux de la transparence, tu dois utiliser le format .gif. Tu dois OBLIGATOIREMENT les nommer :
      1.gif et 1_bis.gif
      2.gif et 2_bis.gif
      3.gif et 3_bis.gif
      4.gif et 4_bis.gif
      etc...
      Ces fichiers image doivent être placés dans le même répertoire que le classeur.

      Je t'ai donc préparé un zip :

      https://www.cjoint.com/?DKhlUF5cOaI

      Tu va pouvoir constater mon absence de talent artistique...
      0
  17. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Il est possible d'insérer les images de façon à avoir uniquement 1 classeur et non pas un dossier zip avec les images en annexes ?

    Oui, mais...
    - c'est extrêmement complexe à gérer,
    - c'est source d'erreurs,
    - extrêmement "fragile" à manipuler...

    je te l'ai fait mais dans le doute préfères la solution avec les images à côté...
    Rien qu'à regarder la liste des déclarations de variables publiques, j'en ai le tournis...

    https://www.cjoint.com/?DKhoAROKC4e

    0
  18. Mika
     
    Ca fonctionne pourtant très bien, non ?

    Merci !
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Ben heureusement!! Nous donnons des codes qui fonctionnent ici tu sais...

      Mais je n'aime pas cette solution et je préfères t'avertir qu'elle est source de bugs éventuels...
      0
    2. Mika
       
      D'accord ! Tu as des exemples des ces bugs ?
      0
    3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      non.
      En fait cette macro copie/colle via le presse papier. C'est toujours un peu aléatoire.
      Ce bug est toutefois prévu dans le code...
      Donc ça devrait le faire.
      0
    4. Mika
       
      D'accord !! la position et la taille des images sont aléatoires ?
      0
    5. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      Ho oui.
      Juste leur nom importe.
      0