Insérer UserForm entre barre de calcul et ligne 1

Fermé
Mika - 4 nov. 2014 à 11:38
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 8 nov. 2014 à 10:45
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.
A voir également:

18 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
4 nov. 2014 à 15:45
Bonjour,

Cela doit être réalisable.
Regarde déjà cet exemple.
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
5 nov. 2014 à 08:59
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
5 nov. 2014 à 10:11
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
Pas de soucis.
C'est pour ca que j'ai pensé à intégrer une barre indépendamment du tableau...

Merci !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
5 nov. 2014 à 13:34
Euh... Résultats fonctionnels mais pas probant esthétiquement parlant :
https://www.cjoint.com/?DKfnMXC3bHc
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
5 nov. 2014 à 14:33
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
5 nov. 2014 à 16:04
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
5 nov. 2014 à 16:44
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 07:44
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 09:45
Oui.
Regarde ce tutoriel et dis moi ce que tu penserais de cette solution...
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 10:24
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 10:48
Malheureusement tu n'as que le gif pour gérer la transparence sous Excel...
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 11:03
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 12:06
Oui. Tu viens d'ajouter un onglet à ton ruban.
Mais pas tout à fait vide...
0
Pourtant la barre ne devrait pas se trouver dans "Compléments" et être indépendante avec : Position:=msoBarTop

Non ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 12:11
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
6 nov. 2014 à 12:20
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
7 nov. 2014 à 08:37
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 7/11/2014 à 09:34
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
Bonjour,

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

Merci
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
7 nov. 2014 à 09:34
0
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
Modifié par pijaku le 7/11/2014 à 10:52
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
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
7 nov. 2014 à 11:41
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
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
7 nov. 2014 à 14:23
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
Ca fonctionne pourtant très bien, non ?

Merci !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
7 nov. 2014 à 14:38
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
D'accord ! Tu as des exemples des ces bugs ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
7 nov. 2014 à 14:53
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
D'accord !! la position et la taille des images sont aléatoires ?
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
7 nov. 2014 à 15:37
Ho oui.
Juste leur nom importe.
0