Sauvegarder la modification d'emplacement d'un bouton de commande ?

lebarbo

XLDnaute Occasionnel
Bonjour à tous, bonjour le forum,

J'ai créé récemment (grâce à la contribution de MJ13) une CommadBars avec un bouton. Cette commande se lance à l'ouverture du classeur grâce à un xla et au code dans le ThisWorkbook.
Mon problème est qu'Excel ne mémorise pas les modifications d'emplacement du bouton de commande à la fermeture. En somme, si je déplace mon bouton de la dernière ligne à la dernière ligne -1 tout à droite (à côté de la couleur de police par ex.), cette modification n'est pas prise en compte quand je réouvre un classeur.

Après de multiples recherches voici ce que j'ai pu trouver :

intRowIndex = 99
For Each cbThis In Application.CommandBars
With cbThis
If .Visible _
And .Type = msoBarTypeNormal _
And .Position = msoBarTop _
And .RowIndex <= intRowIndex _
And .Left >= intLeft Then
intRowIndex = .RowIndex
intLeft = .Left + .Width
End If
End With
Next cbThis

Set BarPerso = Application.CommandBars.Add("Ma barre")
With BarPerso
.Position = msoBarTop
.Left = intLeft
.RowIndex = intRowIndex
.Visible = True

Ceci permet d'ajouter ma barre à la dernière place à droite de la dernière ligne. Malheureusement le code n'arrive pas à compter les commandes PDFMarker et d'autres qui doivent à mon avis se charger après que la macro se soit lancée d'où le problème.

Ce code n'est en plus qu'une solution partielle, mon but étant encore une fois "d'enregistrer" toute modification d'emplacement du bouton et dans ce cas je ne mettrais que .Position = msoBarTop dans mon code.

Si vous avez la moindre piste pour m'aider, je suis preneur.

Merci d'avance,
 

Ubot303

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Bonjour à toi,

Sur le principe, je sauvegarderai dans 2 cases la position X et Y de la commandbar flottante à la sortie du fichier Excel...
Et je la rechargerais à l'ouverture du fichier après la création de ta barre...

Est-ce sur ce principe la que tu rencontres des soucis d'exécution?
 

tototiti2008

XLDnaute Barbatruc
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Re,

si la barre d'outils est intégrée à la macro complémentaire :

tu crées une barre d'outils (Outils - Personnaliser)
tu crée un bouton dedans (Commandes - Macro)
tu l'attaches à un classeur .xls (Onglet Barres d'outils - Attacher)
tu crées ta macro dans le classeur et tu associe le bouton à la macro
tu enregistres le classeur en .xla
tu quittes Excel puis tu relances sans charger la .xla
tu supprimes la barre d'outils
La barre d'outils ne sera disponible que si la xla est chargée
à priori, elle retiendra l'endroit où tu l'as placée en dernier

il y a peut-être plus simple ;)
 

lebarbo

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Bonjour Ubot303,

Dans l'esprit c'est exactement ça, il faudrait qu'à la fermeture du classeur les données soient stockées, et utilisées à l'ouverture du classeur pour repositionner la barre...mais comment ?
Je précise également que je travaille sur 2003 et que mon code supprime la barre à la fermeture du classeur pour éviter tous bugs. De plus, la barre est bien sûr disponible pour l'application Excel et donc pour tout nouveau classeur (d'où l'impossibilité de stocker les valeurs dans des cellules).

Bonjour tototiti 2008, je n'avais pas vu ton message,
Donc la barre est intégrée à la macro, par contre par souci de ne pas générer de bug, elle est chargée et supprimée à chaque fois qu'Excel est ouvert puis fermé d'où la non sauvegarde des modifications. De plus, Excel tourne avec une autre application (indispensable) qui remet à 0 à chaque ouverture les commandes personnalisées d'où la nécéssiter de procéder comme ça.
 
Dernière édition:

Ubot303

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Et bien dans ce cas, tu as dans la feuille ThisWorkbook le moyen de paramétrer des macros évenementielles :
Workbook_BeforeClose : avant de fermer
Workbook_Open() : à l'ouverture

Maintenant il faut repérer la position de la barre avant de quitter (et donc de détruire la barre) et la recréer à la prochaine ouverture à la position sauvegardée.

Est-ce sur ce dernier point que tu bloques?
 

lebarbo

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Je viens de créer ça dans le Private Sub Workbook_BeforeClose(Cancel As Boolean)

X = Application.CommandBars("Ma barre").Left
Y = Application.CommandBars("Ma barre").Top

Et je vais le mettre dans le workbook open sauf que je ne vois pas comment Excel va sauvegarder ces données quand il sera fermé puis réouvert ?
Logiquement il va reprendre la valeur 0 pour X et Y, nan ?
 

MJ13

XLDnaute Barbatruc
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Bonjour à tous

je ne vois pas comment Excel va sauvegarder ces données quand il sera fermé puis réouvert

Lebarbo: Il suffirait de nommer avec add.name le X et le Y (voir dans les noms) ou le mettre dans des cellules sur une feuille du XLa à la fermeture du xla.
 

Ubot303

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

MJ13 a raison :D

La valeur X et Y sera remise à zéro à la prochaine ouverture d'Excel.
Pour contourner ce souci, tu n'as qu'a stocker les valeurs X et Y dans une cellule de ton tableur ;)
Et d'aller relire les 2 cellules dans le _Open ;)
 

lebarbo

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Bonjour à tous,


J'ai pris un peu de temps avant de vous répondre pour tester vos suggestions.
Je crois malheureusement que vos réponses ne vont pas convenir car il y a plusieurs utilisateurs pour la même macro complémentaire. Si M. Dupont met le bouton de commande à droite et a été le dernier à ouvrir Excel, je suppose que M. Martin va avoir la configuration de M. Dupont. Et donc cela ne va pas aller.

Vous confirmez ma version ?
 

Ubot303

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Bonjour à toi,

Cela devient compliqué en effet ;)
Il va falloir aller stocker par utilisateur les coordonnées(x,y)

Private Sub Workbook_Open()
Set netw = CreateObject("WScript.Network")
Nom_util = LCase(netw.UserName)
...
te permet de stocker dans "Nom_util" le nom de la session Windows de l'utilisateur...

Après, tu fais un tableau avec tes utilisateurs et leurs préférences...
Et en fonction de qui se loggue... :D
 

Fo_rum

XLDnaute Accro
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Salut

...
J'ai créé récemment (grâce à la contribution de MJ13) une CommadBars avec un bouton. Cette commande se lance à l'ouverture du classeur grâce à un xla et au code dans le ThisWorkbook.
...
Si vous avez la moindre piste pour m'aider, je suis preneur.
Et si tu changeais avec ta macro lancée à partir d'un "clic droit" ?
 

Pièces jointes

  • ClicDroitNouvelleMacro.xls
    18 KB · Affichages: 77

lebarbo

XLDnaute Occasionnel
Re : Sauvegarder la modification d'emplacement d'un bouton de commande ?

Merci Ubot303 pour ton implication mais face à ta proposition je capitule ;) (trop de code tue le code lol)
Je vais choisir l'option qui me parait la plus simple et la plus adaptée, celle de Fo_rum, merci d'ailleurs pour ta solution, j'aurais encore appris quelque chose.

Si jamais ça vous intéresse, je viens de trouver les n° de FaceId avec leur correspondance sur le net :
Ce lien n'existe plus

Merci à tous !!
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 337
Messages
2 087 391
Membres
103 536
dernier inscrit
komivi