Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Ruban Access 2007

7 réponses
Avatar
Mike
Bonjour à tous,

Dans une application 2007 j'ai une table qui contient la liste des ID de mon
ruban et chacun de ces ID ont un état : Actif ou Non actif, par conséquent,
j'aimerais boucler dans cette table (à l'aide d'un recordset évidement) et
de définir chacun des boutons de mon ruban avec l'état auquel il fait
référence. (pour fin de sécurité)

Comme le ruban fonctionne par "CallBack", la seule façon que j'ai trouver et
d'utilise l'action : getEnabled="GetEnabled" (dans le XML), sur tous les
éléments de mon ruban auquel je veut avoir une sécurité, mais avec cette
façon je suis obligé d'ouvrir mon recordset 170 fois (qui correspond au
nombre de contrôles de mon ruban)

Voici mon code qui fonctionne très bien, mais très lent vue le nombre de
fois qu'il faut que j'ouvre le recordset :

'// Début code
Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)

Dim rstRibbon As DAO.Recordset
Set rstRibbon = CurrentDb.OpenRecordset("Select * From tblSecureRibbon Where
ID='" & CONTROL.ID & "'", dbOpenSnapshot, dbSeeChanges)

If rstRibbon.RecordCount > 0 Then

bolCtlEnabled = rstRibbon!État '(True ou False)

Select Case CONTROL.ID
Case Else
enabled = bolCtlEnabled
End Select
End If

rstRibbon.Close

End Sub
'\\ Fin code

N.B. Idéalement je crois qu'il serais préférable d'ouvrir le recordset 1
seul fois et de boucler et de désactivé les boutons avec la propriété
"InvalidateControl", mais je n'y arrive pas du tout :-(

Merci par avance si vous avez des idées !


Mike

7 réponses

Avatar
Raymond [mvp]
Bonsoir.

as-tu essayé la fonction Dlookup à la place, comme ceci:

'// Début code
Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
enable = Nz(DLookup("état", "tblSecureRibbon", "ID='" & CONTROL.ID &
"'"), 0)
End Sub
' Fin code

un champ nommé état ne peut que t'apporter des ennuis, évite d'utiliser les
mots réservés pour nommer les champs.

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Mike" a écrit dans le message de news:

| Bonjour à tous,
|
| Dans une application 2007 j'ai une table qui contient la liste des ID de
mon
| ruban et chacun de ces ID ont un état : Actif ou Non actif, par
conséquent,
| j'aimerais boucler dans cette table (à l'aide d'un recordset évidement) et
| de définir chacun des boutons de mon ruban avec l'état auquel il fait
| référence. (pour fin de sécurité)
|
| Comme le ruban fonctionne par "CallBack", la seule façon que j'ai trouver
et
| d'utilise l'action : getEnabled="GetEnabled" (dans le XML), sur tous les
| éléments de mon ruban auquel je veut avoir une sécurité, mais avec cette
| façon je suis obligé d'ouvrir mon recordset 170 fois (qui correspond au
| nombre de contrôles de mon ruban)
|
| Voici mon code qui fonctionne très bien, mais très lent vue le nombre de
| fois qu'il faut que j'ouvre le recordset :
|
| '// Début code
| Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
|
| Dim rstRibbon As DAO.Recordset
| Set rstRibbon = CurrentDb.OpenRecordset("Select * From tblSecureRibbon
Where
| ID='" & CONTROL.ID & "'", dbOpenSnapshot, dbSeeChanges)
|
| If rstRibbon.RecordCount > 0 Then
|
| bolCtlEnabled = rstRibbon!État '(True ou False)
|
| Select Case CONTROL.ID
| Case Else
| enabled = bolCtlEnabled
| End Select
| End If
|
| rstRibbon.Close
|
| End Sub
| ' Fin code
|
| N.B. Idéalement je crois qu'il serais préférable d'ouvrir le recordset 1
| seul fois et de boucler et de désactivé les boutons avec la propriété
| "InvalidateControl", mais je n'y arrive pas du tout :-(
|
| Merci par avance si vous avez des idées !
|
|
| Mike
|
Avatar
Raymond [mvp]
faute de frappe, lire enabled au lieu de enable.
excuses

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Raymond [mvp]" a écrit dans le message de news:
Ovzhix%
| Bonsoir.
|
| as-tu essayé la fonction Dlookup à la place, comme ceci:
|
| '// Début code
| Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
| enable = Nz(DLookup("état", "tblSecureRibbon", "ID='" & CONTROL.ID &
| "'"), 0)
| End Sub
| ' Fin code
|
| un champ nommé état ne peut que t'apporter des ennuis, évite d'utiliser
les
| mots réservés pour nommer les champs.
|
| --
| @+
| Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| http://officesystem.access.over-blog.com/
| http://access2007.over-blog.com/
| Pour débuter sur le forum: http://www.mpfa.info/
|
|
| "Mike" a écrit dans le message de news:
|
|| Bonjour à tous,
||
|| Dans une application 2007 j'ai une table qui contient la liste des ID de
| mon
|| ruban et chacun de ces ID ont un état : Actif ou Non actif, par
| conséquent,
|| j'aimerais boucler dans cette table (à l'aide d'un recordset évidement)
et
|| de définir chacun des boutons de mon ruban avec l'état auquel il fait
|| référence. (pour fin de sécurité)
||
|| Comme le ruban fonctionne par "CallBack", la seule façon que j'ai trouver
| et
|| d'utilise l'action : getEnabled="GetEnabled" (dans le XML), sur tous les
|| éléments de mon ruban auquel je veut avoir une sécurité, mais avec cette
|| façon je suis obligé d'ouvrir mon recordset 170 fois (qui correspond au
|| nombre de contrôles de mon ruban)
||
|| Voici mon code qui fonctionne très bien, mais très lent vue le nombre de
|| fois qu'il faut que j'ouvre le recordset :
||
|| '// Début code
|| Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
||
|| Dim rstRibbon As DAO.Recordset
|| Set rstRibbon = CurrentDb.OpenRecordset("Select * From tblSecureRibbon
| Where
|| ID='" & CONTROL.ID & "'", dbOpenSnapshot, dbSeeChanges)
||
|| If rstRibbon.RecordCount > 0 Then
||
|| bolCtlEnabled = rstRibbon!État '(True ou False)
||
|| Select Case CONTROL.ID
|| Case Else
|| enabled = bolCtlEnabled
|| End Select
|| End If
||
|| rstRibbon.Close
||
|| End Sub
|| ' Fin code
||
|| N.B. Idéalement je crois qu'il serais préférable d'ouvrir le recordset 1
|| seul fois et de boucler et de désactivé les boutons avec la propriété
|| "InvalidateControl", mais je n'y arrive pas du tout :-(
||
|| Merci par avance si vous avez des idées !
||
||
|| Mike
||
|
|
Avatar
Mike
Bonjour Raymond,

Merci pour la suggestion, malheureusement le Dlookup est encore plus lent
que d'ouvrir 170 fois le recordset, effectivement le mot "état" n'était pas
très approprié. Sincèrement le ruban d'office 2007 en XML est une gourde
monumentale de Microsoft !
Access est depuis toujours un RAD formidable, mais maintenant hormis
l'esthétique du ruban, la gestion en XML comparé à ce que c'était avec les
versions précédentes (ici j'entends par la gestion et surtout les méthodes
qui étais beaucoup plus exhaustives), bref tout ce que j'essaye c'est
d'installer une sécurité d'accès via les menus comme je le faisais si
facilement avec l'ancien menu, ici je me butte avec ces Callback si peut
flexible :-(


Merci de ton aide

Mike






"Raymond [mvp]" a écrit dans le message de
news:urbEW1%
faute de frappe, lire enabled au lieu de enable.
excuses

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Raymond [mvp]" a écrit dans le message de news:
Ovzhix%
| Bonsoir.
|
| as-tu essayé la fonction Dlookup à la place, comme ceci:
|
| '// Début code
| Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
| enable = Nz(DLookup("état", "tblSecureRibbon", "ID='" & CONTROL.ID &
| "'"), 0)
| End Sub
| ' Fin code
|
| un champ nommé état ne peut que t'apporter des ennuis, évite d'utiliser
les
| mots réservés pour nommer les champs.
|
| --
| @+
| Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| http://officesystem.access.over-blog.com/
| http://access2007.over-blog.com/
| Pour débuter sur le forum: http://www.mpfa.info/
|
|
| "Mike" a écrit dans le message de news:
|
|| Bonjour à tous,
||
|| Dans une application 2007 j'ai une table qui contient la liste des ID
de
| mon
|| ruban et chacun de ces ID ont un état : Actif ou Non actif, par
| conséquent,
|| j'aimerais boucler dans cette table (à l'aide d'un recordset évidement)
et
|| de définir chacun des boutons de mon ruban avec l'état auquel il fait
|| référence. (pour fin de sécurité)
||
|| Comme le ruban fonctionne par "CallBack", la seule façon que j'ai
trouver
| et
|| d'utilise l'action : getEnabled="GetEnabled" (dans le XML), sur tous
les
|| éléments de mon ruban auquel je veut avoir une sécurité, mais avec
cette
|| façon je suis obligé d'ouvrir mon recordset 170 fois (qui correspond au
|| nombre de contrôles de mon ruban)
||
|| Voici mon code qui fonctionne très bien, mais très lent vue le nombre
de
|| fois qu'il faut que j'ouvre le recordset :
||
|| '// Début code
|| Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
||
|| Dim rstRibbon As DAO.Recordset
|| Set rstRibbon = CurrentDb.OpenRecordset("Select * From tblSecureRibbon
| Where
|| ID='" & CONTROL.ID & "'", dbOpenSnapshot, dbSeeChanges)
||
|| If rstRibbon.RecordCount > 0 Then
||
|| bolCtlEnabled = rstRibbon!État '(True ou False)
||
|| Select Case CONTROL.ID
|| Case Else
|| enabled = bolCtlEnabled
|| End Select
|| End If
||
|| rstRibbon.Close
||
|| End Sub
|| ' Fin code
||
|| N.B. Idéalement je crois qu'il serais préférable d'ouvrir le recordset
1
|| seul fois et de boucler et de désactivé les boutons avec la propriété
|| "InvalidateControl", mais je n'y arrive pas du tout :-(
||
|| Merci par avance si vous avez des idées !
||
||
|| Mike
||
|
|




Avatar
Raymond [mvp]
Bonjour.

as-tu essayé en laissant le recordset ouvert en permanence ? ou en groupant
tes autorisations par groupes de 10 par exemple ?
tu as 170 contrôles ? je pense pour l'ensemble de ton application, mais par
formulaire combien as-tu de contrôles ?

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Mike" a écrit dans le message de news:

| Bonjour Raymond,
|
| Merci pour la suggestion, malheureusement le Dlookup est encore plus lent
| que d'ouvrir 170 fois le recordset, effectivement le mot "état" n'était
pas
| très approprié. Sincèrement le ruban d'office 2007 en XML est une gourde
| monumentale de Microsoft !
| Access est depuis toujours un RAD formidable, mais maintenant hormis
| l'esthétique du ruban, la gestion en XML comparé à ce que c'était avec les
| versions précédentes (ici j'entends par la gestion et surtout les méthodes
| qui étais beaucoup plus exhaustives), bref tout ce que j'essaye c'est
| d'installer une sécurité d'accès via les menus comme je le faisais si
| facilement avec l'ancien menu, ici je me butte avec ces Callback si peut
| flexible :-(
|
|
| Merci de ton aide
|
| Mike
|
|
|
|
|
|
| "Raymond [mvp]" a écrit dans le message de
| news:urbEW1%
| > faute de frappe, lire enabled au lieu de enable.
| > excuses
| >
| > --
| > @+
| > Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| > http://officesystem.access.over-blog.com/
| > http://access2007.over-blog.com/
| > Pour débuter sur le forum: http://www.mpfa.info/
| >
| >
| > "Raymond [mvp]" a écrit dans le message de
news:
| > Ovzhix%
| > | Bonsoir.
| > |
| > | as-tu essayé la fonction Dlookup à la place, comme ceci:
| > |
| > | '// Début code
| > | Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
| > | enable = Nz(DLookup("état", "tblSecureRibbon", "ID='" & CONTROL.ID
&
| > | "'"), 0)
| > | End Sub
| > | ' Fin code
| > |
| > | un champ nommé état ne peut que t'apporter des ennuis, évite
d'utiliser
| > les
| > | mots réservés pour nommer les champs.
| > |
| > | --
| > | @+
| > | Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| > | http://officesystem.access.over-blog.com/
| > | http://access2007.over-blog.com/
| > | Pour débuter sur le forum: http://www.mpfa.info/
| > |
| > |
| > | "Mike" a écrit dans le message de news:
| > |
| > || Bonjour à tous,
| > ||
| > || Dans une application 2007 j'ai une table qui contient la liste des ID
| > de
| > | mon
| > || ruban et chacun de ces ID ont un état : Actif ou Non actif, par
| > | conséquent,
| > || j'aimerais boucler dans cette table (à l'aide d'un recordset
évidement)
| > et
| > || de définir chacun des boutons de mon ruban avec l'état auquel il fait
| > || référence. (pour fin de sécurité)
| > ||
| > || Comme le ruban fonctionne par "CallBack", la seule façon que j'ai
| > trouver
| > | et
| > || d'utilise l'action : getEnabled="GetEnabled" (dans le XML), sur tous
| > les
| > || éléments de mon ruban auquel je veut avoir une sécurité, mais avec
| > cette
| > || façon je suis obligé d'ouvrir mon recordset 170 fois (qui correspond
au
| > || nombre de contrôles de mon ruban)
| > ||
| > || Voici mon code qui fonctionne très bien, mais très lent vue le nombre
| > de
| > || fois qu'il faut que j'ouvre le recordset :
| > ||
| > || '// Début code
| > || Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
| > ||
| > || Dim rstRibbon As DAO.Recordset
| > || Set rstRibbon = CurrentDb.OpenRecordset("Select * From
tblSecureRibbon
| > | Where
| > || ID='" & CONTROL.ID & "'", dbOpenSnapshot, dbSeeChanges)
| > ||
| > || If rstRibbon.RecordCount > 0 Then
| > ||
| > || bolCtlEnabled = rstRibbon!État '(True ou False)
| > ||
| > || Select Case CONTROL.ID
| > || Case Else
| > || enabled = bolCtlEnabled
| > || End Select
| > || End If
| > ||
| > || rstRibbon.Close
| > ||
| > || End Sub
| > || ' Fin code
| > ||
| > || N.B. Idéalement je crois qu'il serais préférable d'ouvrir le
recordset
| > 1
| > || seul fois et de boucler et de désactivé les boutons avec la propriété
| > || "InvalidateControl", mais je n'y arrive pas du tout :-(
| > ||
| > || Merci par avance si vous avez des idées !
| > ||
| > ||
| > || Mike
| > ||
| > |
| > |
| >
| >
|
Avatar
Mike
Bonjour Raymond,

Oui j'ai essayer en définissant un recordset global, les performances sont
quelque peut améliorer mais rien d'extraordinataire, oui j'ai 170 contrôles
ou bouton si tu aime mieux dans mon ruban.

Cordialement

Mike


"Raymond [mvp]" a écrit dans le message de
news:%
Bonjour.

as-tu essayé en laissant le recordset ouvert en permanence ? ou en
groupant
tes autorisations par groupes de 10 par exemple ?
tu as 170 contrôles ? je pense pour l'ensemble de ton application, mais
par
formulaire combien as-tu de contrôles ?

--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Mike" a écrit dans le message de news:

| Bonjour Raymond,
|
| Merci pour la suggestion, malheureusement le Dlookup est encore plus
lent
| que d'ouvrir 170 fois le recordset, effectivement le mot "état" n'était
pas
| très approprié. Sincèrement le ruban d'office 2007 en XML est une gourde
| monumentale de Microsoft !
| Access est depuis toujours un RAD formidable, mais maintenant hormis
| l'esthétique du ruban, la gestion en XML comparé à ce que c'était avec
les
| versions précédentes (ici j'entends par la gestion et surtout les
méthodes
| qui étais beaucoup plus exhaustives), bref tout ce que j'essaye c'est
| d'installer une sécurité d'accès via les menus comme je le faisais si
| facilement avec l'ancien menu, ici je me butte avec ces Callback si peut
| flexible :-(
|
|
| Merci de ton aide
|
| Mike
|
|
|
|
|
|
| "Raymond [mvp]" a écrit dans le message de
| news:urbEW1%
| > faute de frappe, lire enabled au lieu de enable.
| > excuses
| >
| > --
| > @+
| > Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| > http://officesystem.access.over-blog.com/
| > http://access2007.over-blog.com/
| > Pour débuter sur le forum: http://www.mpfa.info/
| >
| >
| > "Raymond [mvp]" a écrit dans le message de
news:
| > Ovzhix%
| > | Bonsoir.
| > |
| > | as-tu essayé la fonction Dlookup à la place, comme ceci:
| > |
| > | '// Début code
| > | Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
| > | enable = Nz(DLookup("état", "tblSecureRibbon", "ID='" &
CONTROL.ID
&
| > | "'"), 0)
| > | End Sub
| > | ' Fin code
| > |
| > | un champ nommé état ne peut que t'apporter des ennuis, évite
d'utiliser
| > les
| > | mots réservés pour nommer les champs.
| > |
| > | --
| > | @+
| > | Raymond Access MVP http://OfficeSystemAccess.seneque.net/
| > | http://officesystem.access.over-blog.com/
| > | http://access2007.over-blog.com/
| > | Pour débuter sur le forum: http://www.mpfa.info/
| > |
| > |
| > | "Mike" a écrit dans le message de news:
| > |
| > || Bonjour à tous,
| > ||
| > || Dans une application 2007 j'ai une table qui contient la liste des
ID
| > de
| > | mon
| > || ruban et chacun de ces ID ont un état : Actif ou Non actif, par
| > | conséquent,
| > || j'aimerais boucler dans cette table (à l'aide d'un recordset
évidement)
| > et
| > || de définir chacun des boutons de mon ruban avec l'état auquel il
fait
| > || référence. (pour fin de sécurité)
| > ||
| > || Comme le ruban fonctionne par "CallBack", la seule façon que j'ai
| > trouver
| > | et
| > || d'utilise l'action : getEnabled="GetEnabled" (dans le XML), sur
tous
| > les
| > || éléments de mon ruban auquel je veut avoir une sécurité, mais avec
| > cette
| > || façon je suis obligé d'ouvrir mon recordset 170 fois (qui
correspond
au
| > || nombre de contrôles de mon ruban)
| > ||
| > || Voici mon code qui fonctionne très bien, mais très lent vue le
nombre
| > de
| > || fois qu'il faut que j'ouvre le recordset :
| > ||
| > || '// Début code
| > || Public Sub GetEnabled(CONTROL As IRibbonControl, ByRef enabled)
| > ||
| > || Dim rstRibbon As DAO.Recordset
| > || Set rstRibbon = CurrentDb.OpenRecordset("Select * From
tblSecureRibbon
| > | Where
| > || ID='" & CONTROL.ID & "'", dbOpenSnapshot, dbSeeChanges)
| > ||
| > || If rstRibbon.RecordCount > 0 Then
| > ||
| > || bolCtlEnabled = rstRibbon!État '(True ou False)
| > ||
| > || Select Case CONTROL.ID
| > || Case Else
| > || enabled = bolCtlEnabled
| > || End Select
| > || End If
| > ||
| > || rstRibbon.Close
| > ||
| > || End Sub
| > || ' Fin code
| > ||
| > || N.B. Idéalement je crois qu'il serais préférable d'ouvrir le
recordset
| > 1
| > || seul fois et de boucler et de désactivé les boutons avec la
propriété
| > || "InvalidateControl", mais je n'y arrive pas du tout :-(
| > ||
| > || Merci par avance si vous avez des idées !
| > ||
| > ||
| > || Mike
| > ||
| > |
| > |
| >
| >
|




Avatar
Raymond [mvp]
Bonjour.

faut pas procéder comme ça.

il faut créer un ruban complet par groupe d'opérateurs selon leurs besoins
et tes autorisations, sans callback.
dans ton formulaire dans l'événement Formload, suivant le code opérateur et
son groupe, tu changes le nom du ruban:

Private Sub Form_Load()
if .......
Me.RibbonName = "myRibbon"
End Sub

et ce sera instantané.
--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Mike" a écrit dans le message de news:

| Bonjour Raymond,
|
| Oui j'ai essayer en définissant un recordset global, les performances sont
| quelque peut améliorer mais rien d'extraordinataire, oui j'ai 170
contrôles
| ou bouton si tu aime mieux dans mon ruban.
|
| Cordialement
|
| Mike
|
Avatar
Mike
Bonjour Raymond,

Effectivement l'idée est intéressante, et c'est effectivement instantané,
mais dans un formulaire indépendant le Ruban ne s'affiche pas, il ne fait
que basculer d'un à l'autre le temps d'une seconde, je crois qu'il serait
préféreable d'affecté le ruban à l'application plutôt qu'à tous les
formulaire ?

Merci de ton aide

Mike



"Raymond [mvp]" a écrit dans le message de
news:
Bonjour.

faut pas procéder comme ça.

il faut créer un ruban complet par groupe d'opérateurs selon leurs besoins
et tes autorisations, sans callback.
dans ton formulaire dans l'événement Formload, suivant le code opérateur
et
son groupe, tu changes le nom du ruban:

Private Sub Form_Load()
if .......
Me.RibbonName = "myRibbon"
End Sub

et ce sera instantané.
--
@+
Raymond Access MVP http://OfficeSystemAccess.seneque.net/
http://officesystem.access.over-blog.com/
http://access2007.over-blog.com/
Pour débuter sur le forum: http://www.mpfa.info/


"Mike" a écrit dans le message de news:

| Bonjour Raymond,
|
| Oui j'ai essayer en définissant un recordset global, les performances
sont
| quelque peut améliorer mais rien d'extraordinataire, oui j'ai 170
contrôles
| ou bouton si tu aime mieux dans mon ruban.
|
| Cordialement
|
| Mike
|