J'avais pondu cette macro (appel=C3=A9e depuis le ruban et il y en a une di=
zaine de m=C3=AAme structure au total) qui me permet de colorier (ou de sup=
primer la couleur) des cellules :
Sub Montage_ARS(ByVal control As IRibbonControl)
' Montage ARS Rouge 255
Application.DisplayAlerts =3D False
With Selection
If .Rows.Count > 1 Then Exit Sub
If .Interior.Color =3D 16777215 Or .Interior.Color =3D 0 Then
.Interior.Color =3D 255
.Font.ColorIndex =3D 2
If .Columns.Count >=3D 2 Then .Font.Size =3D 7 Else .Font.Size =3D 6:
.Merge
ElseIf .Interior.Color =3D 255 Then Call RAZ_Format_Cellule
End If
End With
Application.DisplayAlerts =3D True
End Sub
Afin d'=C3=A9viter les fausses manips, il n'est pas possible de changer dir=
ectement la couleur d'une cellule d=C3=A9j=C3=A0 color=C3=A9e, on doit cliq=
uer sur le bouton correspondant =C3=A0 la couleur actuelle.
Pour ne pas avoir =C3=A0 =C3=A9crire les codes couleur en dur dans les macr=
os, j'ai cr=C3=A9=C3=A9 un tableau avec le nom de toutes mes macros et les =
codes couleurs associ=C3=A9s :
Montage_ARS 255
Montage_PLG 170
Montage_B_S 10089000
Montage_CNG 20871
Montage_IND 5476563
Montage_PLA 10273012
Electrique_ARS 65535
Electrique_PLG 2024143
Electrique_CNG 10088950
Electrique_IND 2017480
Electrique_PLA 16776960
Install_BCF 13336300
Install_CLI 10501340
SAV 10501270
Essais 13434828
Divers 5287936
Week_Ends 8388608
Absences 16750180
Indisponible 0
et la macro est devenue ceci :
'--------------------------------
Sub Montage_PLG(ByVal control As IRibbonControl)
Dim Lig As Long
Couleur =3D 0: Lig =3D 0
With Application.VBE.ActiveCodePane
.GetSelection Lig, 0, 0, 0
Couleur =3D Application.Index(Range("Code_Couleurs"), Application.Match(.Co=
deModule.ProcOfLine(Lig, 0), Range("Liste_Proc_Menu"), 0), 1)
End With
Application.DisplayAlerts =3D False
With Selection
If .Rows.Count > 1 Then Exit Sub
If .Interior.Color =3D 16777215 Or .Interior.Color =3D 0 Then
.Interior.Color =3D Couleur
.Font.ColorIndex =3D 2
If .Columns.Count >=3D 2 Then .Font.Size =3D 7 Else .Font.Size =3D 6:
.Merge
ElseIf .Interior.Color =3D Couleur Then Call RAZ_Format_Cellule
End If
End With
Application.DisplayAlerts =3D True
End Sub
Je r=C3=A9cup=C3=A8re dans un tableau qui liste les macros perso du ruban u=
n code couleur associ=C3=A9 =C3=A0 chaque macro (variable Couleur). Ceci me=
permet de changer de couleur sans devoir =C3=A9crire la valeur "en dur" da=
ns mes macros.
Mon souci est que je n'arrive pas =C3=A0 r=C3=A9initialiser ma variable cou=
leur : une fois que j'ai colori=C3=A9 une cellule avec une des macros, la c=
ouleur reste identique quelle que soit la macro que je lance. De plus, si u=
ne cellule est color=C3=A9e, un clic sur n'importe quel bouton couleur supp=
rime la couleur de la cellule....
Qu'est-ce que je loupe ?????
Merci d'avance =C3=A0 tout g=C3=A9n=C3=A9reux contributeur !!!
Petite info de dernière minute : tout se passe bien en mode pas à pas..... Ce n'est qu'en mode "automatique" que rien ne se passe comme prévu !! ThierryP
Petite info de dernière minute : tout se passe bien en mode pas à pas.....
Ce n'est qu'en mode "automatique" que rien ne se passe comme prévu !!
Petite info de dernière minute : tout se passe bien en mode pas à pas..... Ce n'est qu'en mode "automatique" que rien ne se passe comme prévu !! ThierryP
MichD
Bonjour, Je n'ai pas vraiment le temps de regarder cela ce matin, je te donne une adresse sur le sujet des rubans, tu as toutes sortes d'exemples et des fichiers à télécharger! Je regarderai le tout ce soir. https://www.rondebruin.nl/win/s2/win003.htm Est-ce possible d'avoir une copie de ton fichier sans les données? Où as-tu déclaré la variable "couleur" ? MichD
Bonjour,
Je n'ai pas vraiment le temps de regarder cela ce matin, je te donne une
adresse sur le sujet des rubans, tu as toutes sortes d'exemples et des
fichiers à télécharger! Je regarderai le tout ce soir.
https://www.rondebruin.nl/win/s2/win003.htm
Est-ce possible d'avoir une copie de ton fichier sans les données?
Où as-tu déclaré la variable "couleur" ?
Bonjour, Je n'ai pas vraiment le temps de regarder cela ce matin, je te donne une adresse sur le sujet des rubans, tu as toutes sortes d'exemples et des fichiers à télécharger! Je regarderai le tout ce soir. https://www.rondebruin.nl/win/s2/win003.htm Est-ce possible d'avoir une copie de ton fichier sans les données? Où as-tu déclaré la variable "couleur" ? MichD
Geo
Bonjour Ca fait penser à un problème de rafraîchissement d'affichage. Je m'attendais donc à trouver une méthode refresh que je n'ai pas trouvée.
Bonjour
Ca fait penser à un problème de rafraîchissement d'affichage.
Je m'attendais donc à trouver une méthode refresh que je n'ai pas
trouvée.
Bonjour Ca fait penser à un problème de rafraîchissement d'affichage. Je m'attendais donc à trouver une méthode refresh que je n'ai pas trouvée.
ThierryP
Visiblement, je suis en train d'utiliser quelque chose qui dépasse mes modestes connaissances...... Donc, encore plus besoin d'un gourou :-):-) ThierryP
Visiblement, je suis en train d'utiliser quelque chose qui dépasse mes modestes connaissances......
Visiblement, je suis en train d'utiliser quelque chose qui dépasse mes modestes connaissances...... Donc, encore plus besoin d'un gourou :-):-) ThierryP
ThierryP
Bonjour Geo, Non, non ! De mes recherches sur le Net, je patauge dans un truc qui devrait être simple (connaître le nom de la procédure en cours d'utilisation) mais qui ne l'est pas tant ! J'ai fini par comprendre pourquoi cela fonctionne en pas à pas... Rest à trouver comment faire pour que cela fonctionne en "Production". ThierryP Le vendredi 27 septembre 2019 13:09:10 UTC+2, Geo a écrit :
Bonjour Ca fait penser à un problème de rafraîchissement d'afficha ge. Je m'attendais donc à trouver une méthode refresh que je n'ai p as trouvée.
Bonjour Geo,
Non, non !
De mes recherches sur le Net, je patauge dans un truc qui devrait être simple (connaître le nom de la procédure en cours d'utilisation) mais qui ne l'est pas tant !
J'ai fini par comprendre pourquoi cela fonctionne en pas à pas... Rest à trouver comment faire pour que cela fonctionne en "Production".
ThierryP
Le vendredi 27 septembre 2019 13:09:10 UTC+2, Geo a écrit :
Bonjour
Ca fait penser à un problème de rafraîchissement d'afficha ge.
Je m'attendais donc à trouver une méthode refresh que je n'ai p as
trouvée.
Bonjour Geo, Non, non ! De mes recherches sur le Net, je patauge dans un truc qui devrait être simple (connaître le nom de la procédure en cours d'utilisation) mais qui ne l'est pas tant ! J'ai fini par comprendre pourquoi cela fonctionne en pas à pas... Rest à trouver comment faire pour que cela fonctionne en "Production". ThierryP Le vendredi 27 septembre 2019 13:09:10 UTC+2, Geo a écrit :
Bonjour Ca fait penser à un problème de rafraîchissement d'afficha ge. Je m'attendais donc à trouver une méthode refresh que je n'ai p as trouvée.
ThierryP
Bonjour Denis, Merci pour l'adresse, je l'utilise déjà régulièrement p our adapter le ruban à mes besoins. Après quelques recherches rapides, j'ai compris que la syntaxe que j'a i reprise pour trouver le nom de la procédure tient compte du fait que VBE doit être ouvert et actif pour fonctionner. Je suis tomber sur quelques liens en rapport (entre autres le site de Chip Pearson) mais mes maigres connaissances ne suffisent pas pour comprendre en détail ! Merci de ton retour ! ThierryP
Bonjour Denis,
Merci pour l'adresse, je l'utilise déjà régulièrement p our adapter le ruban à mes besoins.
Après quelques recherches rapides, j'ai compris que la syntaxe que j'a i reprise pour trouver le nom de la procédure tient compte du fait que VBE doit être ouvert et actif pour fonctionner.
Je suis tomber sur quelques liens en rapport (entre autres le site de Chip Pearson) mais mes maigres connaissances ne suffisent pas pour comprendre en détail !
Bonjour Denis, Merci pour l'adresse, je l'utilise déjà régulièrement p our adapter le ruban à mes besoins. Après quelques recherches rapides, j'ai compris que la syntaxe que j'a i reprise pour trouver le nom de la procédure tient compte du fait que VBE doit être ouvert et actif pour fonctionner. Je suis tomber sur quelques liens en rapport (entre autres le site de Chip Pearson) mais mes maigres connaissances ne suffisent pas pour comprendre en détail ! Merci de ton retour ! ThierryP
MichD
Dans toutes les procédures du type : Sub Montage_PLA(ByVal control As IRibbonControl) Les 2 dernières lignes doivent se terminer par : Application.DisplayAlerts = True Set control = Nothing 'C'est la ligne à ajouter aux sub Sans cette dernière ligne, la variable "Control" relève du fichier contenant la modification du menu. Si tu ne supprimes pas ta variable, dès que tu fais appel à n'importe quelle procédure, la variable "control" demeure le même d'où l'extraction de la même couleur a appliqué à la cellule. Je n'aurais jamais trouvé sans voir ton fichier! MichD
Dans toutes les procédures du type :
Sub Montage_PLA(ByVal control As IRibbonControl)
Les 2 dernières lignes doivent se terminer par :
Application.DisplayAlerts = True
Set control = Nothing 'C'est la ligne à ajouter aux sub
Sans cette dernière ligne, la variable "Control" relève du fichier
contenant la modification du menu. Si tu ne supprimes pas ta variable,
dès que tu fais appel à n'importe quelle procédure, la variable
"control" demeure le même d'où l'extraction de la même couleur a
appliqué à la cellule.
Dans toutes les procédures du type : Sub Montage_PLA(ByVal control As IRibbonControl) Les 2 dernières lignes doivent se terminer par : Application.DisplayAlerts = True Set control = Nothing 'C'est la ligne à ajouter aux sub Sans cette dernière ligne, la variable "Control" relève du fichier contenant la modification du menu. Si tu ne supprimes pas ta variable, dès que tu fais appel à n'importe quelle procédure, la variable "control" demeure le même d'où l'extraction de la même couleur a appliqué à la cellule. Je n'aurais jamais trouvé sans voir ton fichier! MichD
MichD
Oublie la proposition précédente. Voici la solution à ton problème : Le problème, c'est que la variable "Lig" dans la ligne de code précédente n'est pas fiable. .GetSelection Lig, 0, 0, 0 On pourrait trouver le nom de la déclaration de la variable en cours, mais c'est un peu plus compliqué. Suggestion pour faire simple. A ) dans le haut du module, déclare la variable suivante : Dim MaSub As String B ) en dessous de chacune des lignes de déclaration du nom des procédures, tu inscris ceci : MaSub = "Montage_ARS" à titre d'exemple C ) Dans chacune des procédures, remplace cette ligne de code : Couleur = Application.Index(Range("Code_Couleurs"), Application.Match(.CodeModule.ProcOfLine(Lig, 0), Range("Liste_Proc_Menu"), 0), 1) Par : Couleur = Application.Index(Range("Code_Couleurs"), Application.Match(MaSub, Range("Liste_Proc_Menu"), 0), 1) En fait, tu remplaces ".CodeModule.ProcOfLine(Lig, 0)" par MaSub Voilà. Amuse-toi bien! MichD
Oublie la proposition précédente.
Voici la solution à ton problème :
Le problème, c'est que la variable "Lig" dans la ligne de code
précédente n'est pas fiable. .GetSelection Lig, 0, 0, 0
On pourrait trouver le nom de la déclaration de la variable en cours,
mais c'est un peu plus compliqué. Suggestion pour faire simple.
A ) dans le haut du module, déclare la variable suivante :
Dim MaSub As String
B ) en dessous de chacune des lignes de déclaration du nom des
procédures, tu inscris ceci :
MaSub = "Montage_ARS" à titre d'exemple
C ) Dans chacune des procédures, remplace cette ligne de code :
Couleur = Application.Index(Range("Code_Couleurs"),
Application.Match(.CodeModule.ProcOfLine(Lig, 0),
Range("Liste_Proc_Menu"), 0), 1)
Oublie la proposition précédente. Voici la solution à ton problème : Le problème, c'est que la variable "Lig" dans la ligne de code précédente n'est pas fiable. .GetSelection Lig, 0, 0, 0 On pourrait trouver le nom de la déclaration de la variable en cours, mais c'est un peu plus compliqué. Suggestion pour faire simple. A ) dans le haut du module, déclare la variable suivante : Dim MaSub As String B ) en dessous de chacune des lignes de déclaration du nom des procédures, tu inscris ceci : MaSub = "Montage_ARS" à titre d'exemple C ) Dans chacune des procédures, remplace cette ligne de code : Couleur = Application.Index(Range("Code_Couleurs"), Application.Match(.CodeModule.ProcOfLine(Lig, 0), Range("Liste_Proc_Menu"), 0), 1) Par : Couleur = Application.Index(Range("Code_Couleurs"), Application.Match(MaSub, Range("Liste_Proc_Menu"), 0), 1) En fait, tu remplaces ".CodeModule.ProcOfLine(Lig, 0)" par MaSub Voilà. Amuse-toi bien! MichD
Jacquouille
"MichD" a écrit dans le message de groupe de discussion : qmlo6j$1gnc$ Je n'aurais jamais trouvé sans voir ton fichier! MichD Et la boule de cristal, alors ? -)) Jacques " Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion :
qmlo6j$1gnc$1@gioia.aioe.org...
Je n'aurais jamais trouvé sans voir ton fichier!
MichD
Et la boule de cristal, alors ? -))
Jacques
" Le vin est au repas ce que le parfum est à la femme."
"MichD" a écrit dans le message de groupe de discussion : qmlo6j$1gnc$ Je n'aurais jamais trouvé sans voir ton fichier! MichD Et la boule de cristal, alors ? -)) Jacques " Le vin est au repas ce que le parfum est à la femme."
ThierryP
Bonjour Denis, Merci pour ton retour rapide ! Je me suis rendu compte effectivement que ce que j'avais trouvé é tait un "détournement de fonction" et que cela impliquait l'édite ur. J'avais vu une solution qui ressemblait à celle que tu me proposes mai s je voulais éviter d'avoir à écrire "en dur" dans une varia ble.... tant pis ! Je vais écrire un bout de code dans une xlam pour venir écrire au tomatiquement la ligne de code que tu me proposes, afin d'éviter erreu rs de recopie, surtout si il y a beaucoup de procédures impliquée s! Cela me semble tout de même surprenant qu'avec la puissance du VBA on ne puisse pas trouver facilement la procédure active ! Un grand merci pour ton aide ! ThierryP
Bonjour Denis,
Merci pour ton retour rapide !
Je me suis rendu compte effectivement que ce que j'avais trouvé é tait un "détournement de fonction" et que cela impliquait l'édite ur.
J'avais vu une solution qui ressemblait à celle que tu me proposes mai s je voulais éviter d'avoir à écrire "en dur" dans une varia ble.... tant pis !
Je vais écrire un bout de code dans une xlam pour venir écrire au tomatiquement la ligne de code que tu me proposes, afin d'éviter erreu rs de recopie, surtout si il y a beaucoup de procédures impliquée s!
Cela me semble tout de même surprenant qu'avec la puissance du VBA on ne puisse pas trouver facilement la procédure active !
Bonjour Denis, Merci pour ton retour rapide ! Je me suis rendu compte effectivement que ce que j'avais trouvé é tait un "détournement de fonction" et que cela impliquait l'édite ur. J'avais vu une solution qui ressemblait à celle que tu me proposes mai s je voulais éviter d'avoir à écrire "en dur" dans une varia ble.... tant pis ! Je vais écrire un bout de code dans une xlam pour venir écrire au tomatiquement la ligne de code que tu me proposes, afin d'éviter erreu rs de recopie, surtout si il y a beaucoup de procédures impliquée s! Cela me semble tout de même surprenant qu'avec la puissance du VBA on ne puisse pas trouver facilement la procédure active ! Un grand merci pour ton aide ! ThierryP