Je te remercie infiniment pour toutes ces explications, mais c'est beaucoup trop compliqué pour moi ; à vrai dire je n'ai pas compris grand chose et ce sujet n'est manifestement pas à ma portée intellectuelle. Y-a-t-il des choses encore plus compliquées que celle-ci ? Rassure moi (si tu veux bien pour finir sur le sujet) en me disant qu'on est quand même là à un niveau (très très) subtile d'Excel !?!?
Merci encore pour ta patience,
JP
michdenis wrote:
Tout ceci est un peu long a expliqué mais je vais tenté se simplifier au maximum !
Le module de classe "NewLines" défini une nouvelle "classe d'objet" au même titre qu'un objet range.
Sauf que la nouvelle Classe objet "NewLines" est toute simple ... elle ne possède qu'une propriété que j'ai appelée "Bouton" dans la ligne de code suivante : Public WithEvents Bouton As CommandBarButton
Public : Lorsque l'on définit une "variable" comme Public dans un module de classe, cette "variable" porte officilement l'épithète de "propriété" de la classe objet. (C'est vrai aussi lorsque tu utilises une variable public dans un module Feuille)
WithEvents de la déclaration signifie que l'objet utilisé possède un ou des ÉVÉNEMENTS associés à l'objet. À ce titre dès que tu as écris As ... seule une liste d'objets ayant un événement ou des événements. Si tu omettais WithEvents dans la déclaration, la liste suggérée serait différente.
En définissant Bouton As CommandBarButton, ceci me donne accès à l'événement Clic de l'objet Bouton.
Comme la nouvelle Classe objet "NewLines" n'est pas connu de l'application Excel (tous les modules de classes possèdent un numéro d'identification unique et sont référencés dans la base de registre. ce n'est pas le cas pour la nouvelle classe objet que je viens de créer...elle va être disponible que pour le temps que je désirerai pour l'exécution du code) j'utilise le code du module1 pour créer un tableau (array) de tous les boutons de commandes du menu et ceci est d'abord réalisé par la commande :
Dim Bar() As New NewLines En utilisant le mot "New" je crée une instance de la classe objet "NewLines" qui est en même temps, le module de classe de l'objet.
La procédure "GroupeBoutons" va définir toutes commandes que va contenir l'objet " tableau Bar()"
Cette ligne de code de la procédure "GroupeBoutons" Set Bar(Nb).Bouton = B.Controls(S.Caption) associé a chaque élément du tableau la propriété du module de classe qui va me donner accès à l'événement "Clic" du module de classe.
En conséquence, lorsque tu cliques sur une commande du menu, l'événement de la classe "NewLines" est appelé.
J'utilise alors la variable Ctrl défini par "ByVal Ctrl As Office.CommandBarButton" pour obtenir le ID -> action associée à chaque commande et par un select case j'identifie quelles actions je dois bloquer... pour ce faire, il y a la variable CancelDefault à laquelle je donne la valeur True pour annuler la commande de l'usager.
Voilà .
C'est pas grave même si tu n'as pas tout compris...Cette expérience était seulement pour mon bon plaisir .!
J'ai oublié d'insérer dans la procédure la commande "insérer" du menu contextuel d'une cellule qui permet d'ajouter une ligne complète le cas échéant. le fichier suivant inhibe cette commande.
http://cjoint.com/?jCvv7dZbAM
"j-pascal" a écrit dans le message de news:
Bonsoir michdenis,
Merci. Je constate que ça marche ! Par contre la msgbox n'apparaît pas lorsque je veux insérer une ligne par le menu contextuel (clic droit sur la ligne) !
J'ai parfois entendu parler des "modules de classe" mais je n'ai jamais vraiment compris la particularité de ces derniers ;-(
J'imagine que le contenu de la feuil1 n'est pas indispensable ?
A quoi sert le code du module 1 ??
A+ ?
JP
PS : est-ce que le recours au "scrollArea" de la feuille pouvait être envisagé pour résoudre ce "pb" ?
wrote:
Le fichier final est celui-ci...
j'ai omis d'effacer un bout de code inutile lors du copier-coller.
http://cjoint.com/?jCouV7uOhX
"j-pascal" a écrit dans le message de news:
Bonjour,
Comment est-il possible d'empêcher l'utilisateur d'insérer une ou plusieurs lignes dans une feuille ?
Merci d'avance pour vos (éventuelles) réponses.
JP
Je te remercie infiniment pour toutes ces explications, mais c'est beaucoup
trop compliqué pour moi ; à vrai dire je n'ai pas compris grand chose et ce
sujet n'est manifestement pas à ma portée intellectuelle.
Y-a-t-il des choses encore plus compliquées que celle-ci ? Rassure moi (si
tu veux bien pour finir sur le sujet) en me disant qu'on est quand même là à
un niveau (très très) subtile d'Excel !?!?
Merci encore pour ta patience,
JP
michdenis wrote:
Tout ceci est un peu long a expliqué mais je vais tenté se simplifier
au maximum !
Le module de classe "NewLines" défini une nouvelle "classe d'objet"
au même
titre qu'un objet range.
Sauf que la nouvelle Classe objet "NewLines" est toute simple ...
elle ne possède
qu'une propriété que j'ai appelée "Bouton" dans la ligne de code
suivante :
Public WithEvents Bouton As CommandBarButton
Public :
Lorsque l'on définit une "variable" comme Public dans un module de
classe,
cette "variable" porte officilement l'épithète de "propriété" de la
classe objet.
(C'est vrai aussi lorsque tu utilises une variable public dans un
module Feuille)
WithEvents de la déclaration signifie que l'objet utilisé possède un
ou des
ÉVÉNEMENTS associés à l'objet. À ce titre dès que tu as écris As ...
seule une liste d'objets ayant un événement ou des événements.
Si tu omettais WithEvents dans la déclaration, la liste suggérée
serait différente.
En définissant Bouton As CommandBarButton, ceci me donne accès à
l'événement Clic de l'objet Bouton.
Comme la nouvelle Classe objet "NewLines" n'est pas
connu de l'application Excel (tous les modules de classes possèdent
un numéro d'identification unique et sont référencés dans la base de
registre.
ce n'est pas le cas pour la nouvelle classe objet que je viens de
créer...elle
va être disponible que pour le temps que je désirerai pour
l'exécution du code)
j'utilise le code du module1 pour créer un tableau (array) de tous les
boutons de commandes du menu et ceci est d'abord réalisé par la
commande :
Dim Bar() As New NewLines
En utilisant le mot "New" je crée une instance de la classe objet
"NewLines" qui
est en même temps, le module de classe de l'objet.
La procédure "GroupeBoutons" va définir toutes commandes que va
contenir
l'objet " tableau Bar()"
Cette ligne de code de la procédure "GroupeBoutons"
Set Bar(Nb).Bouton = B.Controls(S.Caption)
associé a chaque élément du tableau la propriété du module de classe
qui va me donner accès à l'événement "Clic" du module de classe.
En conséquence, lorsque tu cliques sur une commande du menu,
l'événement
de la classe "NewLines" est appelé.
J'utilise alors la variable Ctrl défini par "ByVal Ctrl As
Office.CommandBarButton"
pour obtenir le ID -> action associée à chaque commande et par un
select case
j'identifie quelles actions je dois bloquer... pour ce faire, il y a
la variable
CancelDefault à laquelle je donne la valeur True pour annuler la
commande de
l'usager.
Voilà .
C'est pas grave même si tu n'as pas tout compris...Cette expérience
était
seulement pour mon bon plaisir .!
J'ai oublié d'insérer dans la procédure la commande "insérer" du menu
contextuel d'une cellule qui permet d'ajouter une ligne complète le
cas échéant.
le fichier suivant inhibe cette commande.
http://cjoint.com/?jCvv7dZbAM
"j-pascal" <nospam-j-pascal@free.fr> a écrit dans le message de news:
eml0njy4GHA.1252@TK2MSFTNGP04.phx.gbl...
Bonsoir michdenis,
Merci.
Je constate que ça marche ! Par contre la msgbox n'apparaît pas
lorsque je
veux insérer une ligne par le menu contextuel (clic droit sur la
ligne) !
J'ai parfois entendu parler des "modules de classe" mais je n'ai
jamais
vraiment compris la particularité de ces derniers ;-(
J'imagine que le contenu de la feuil1 n'est pas indispensable ?
A quoi sert le code du module 1 ??
A+ ?
JP
PS : est-ce que le recours au "scrollArea" de la feuille pouvait être
envisagé pour résoudre ce "pb" ?
wrote:
Le fichier final est celui-ci...
j'ai omis d'effacer un bout de code inutile
lors du copier-coller.
http://cjoint.com/?jCouV7uOhX
"j-pascal" <nospam-j-pascal@free.fr> a écrit dans le message de news:
eCdXPgn4GHA.900@TK2MSFTNGP04.phx.gbl...
Bonjour,
Comment est-il possible d'empêcher l'utilisateur d'insérer une ou
plusieurs lignes dans une feuille ?
Je te remercie infiniment pour toutes ces explications, mais c'est beaucoup trop compliqué pour moi ; à vrai dire je n'ai pas compris grand chose et ce sujet n'est manifestement pas à ma portée intellectuelle. Y-a-t-il des choses encore plus compliquées que celle-ci ? Rassure moi (si tu veux bien pour finir sur le sujet) en me disant qu'on est quand même là à un niveau (très très) subtile d'Excel !?!?
Merci encore pour ta patience,
JP
michdenis wrote:
Tout ceci est un peu long a expliqué mais je vais tenté se simplifier au maximum !
Le module de classe "NewLines" défini une nouvelle "classe d'objet" au même titre qu'un objet range.
Sauf que la nouvelle Classe objet "NewLines" est toute simple ... elle ne possède qu'une propriété que j'ai appelée "Bouton" dans la ligne de code suivante : Public WithEvents Bouton As CommandBarButton
Public : Lorsque l'on définit une "variable" comme Public dans un module de classe, cette "variable" porte officilement l'épithète de "propriété" de la classe objet. (C'est vrai aussi lorsque tu utilises une variable public dans un module Feuille)
WithEvents de la déclaration signifie que l'objet utilisé possède un ou des ÉVÉNEMENTS associés à l'objet. À ce titre dès que tu as écris As ... seule une liste d'objets ayant un événement ou des événements. Si tu omettais WithEvents dans la déclaration, la liste suggérée serait différente.
En définissant Bouton As CommandBarButton, ceci me donne accès à l'événement Clic de l'objet Bouton.
Comme la nouvelle Classe objet "NewLines" n'est pas connu de l'application Excel (tous les modules de classes possèdent un numéro d'identification unique et sont référencés dans la base de registre. ce n'est pas le cas pour la nouvelle classe objet que je viens de créer...elle va être disponible que pour le temps que je désirerai pour l'exécution du code) j'utilise le code du module1 pour créer un tableau (array) de tous les boutons de commandes du menu et ceci est d'abord réalisé par la commande :
Dim Bar() As New NewLines En utilisant le mot "New" je crée une instance de la classe objet "NewLines" qui est en même temps, le module de classe de l'objet.
La procédure "GroupeBoutons" va définir toutes commandes que va contenir l'objet " tableau Bar()"
Cette ligne de code de la procédure "GroupeBoutons" Set Bar(Nb).Bouton = B.Controls(S.Caption) associé a chaque élément du tableau la propriété du module de classe qui va me donner accès à l'événement "Clic" du module de classe.
En conséquence, lorsque tu cliques sur une commande du menu, l'événement de la classe "NewLines" est appelé.
J'utilise alors la variable Ctrl défini par "ByVal Ctrl As Office.CommandBarButton" pour obtenir le ID -> action associée à chaque commande et par un select case j'identifie quelles actions je dois bloquer... pour ce faire, il y a la variable CancelDefault à laquelle je donne la valeur True pour annuler la commande de l'usager.
Voilà .
C'est pas grave même si tu n'as pas tout compris...Cette expérience était seulement pour mon bon plaisir .!
J'ai oublié d'insérer dans la procédure la commande "insérer" du menu contextuel d'une cellule qui permet d'ajouter une ligne complète le cas échéant. le fichier suivant inhibe cette commande.
http://cjoint.com/?jCvv7dZbAM
"j-pascal" a écrit dans le message de news:
Bonsoir michdenis,
Merci. Je constate que ça marche ! Par contre la msgbox n'apparaît pas lorsque je veux insérer une ligne par le menu contextuel (clic droit sur la ligne) !
J'ai parfois entendu parler des "modules de classe" mais je n'ai jamais vraiment compris la particularité de ces derniers ;-(
J'imagine que le contenu de la feuil1 n'est pas indispensable ?
A quoi sert le code du module 1 ??
A+ ?
JP
PS : est-ce que le recours au "scrollArea" de la feuille pouvait être envisagé pour résoudre ce "pb" ?
wrote:
Le fichier final est celui-ci...
j'ai omis d'effacer un bout de code inutile lors du copier-coller.
http://cjoint.com/?jCouV7uOhX
"j-pascal" a écrit dans le message de news:
Bonjour,
Comment est-il possible d'empêcher l'utilisateur d'insérer une ou plusieurs lignes dans une feuille ?
Merci d'avance pour vos (éventuelles) réponses.
JP
j-pascal
Re,
J'espère ne pas avoir été trop indélicat en évoquant la solution d'un "concurrent" ;-) Sinon, je te prie d'excuser cette audace.
Bonsoir,
JP
michdenis wrote:
Est-il possible par le biais d'une macro de récupérer ce "msg" d'erreur
C'est sûrement possible, il faut demander à Rama...
Effectivement, son approche est très bien...ce, jusqu'au moment où quelqu'un fera disparaître le contenu de IV65536
Si l'usager fait Atteindre / dernière cellule / où atterrit-il ? ;-)
"j-pascal" a écrit dans le message de news:
Re,
Question subsidiaire ... RaMa propose un truc simple mais efficace ... Si on essaye d'insérer une ligne, on a un msg disant à peu près "il est impossible de déplacer des données dans une zone, etc". Est-il possible par le biais d'une macro de récupérer ce "msg" d'erreur avant qu'il ne s'affiche et éventuellement afficher une autre msgbox ? Je crains que cette question ne soit stupide, mais bon elle me traverse l'esprit !
JP
michdenis wrote:
Le fichier final est celui-ci...
j'ai omis d'effacer un bout de code inutile lors du copier-coller.
http://cjoint.com/?jCouV7uOhX
"j-pascal" a écrit dans le message de news:
Bonjour,
Comment est-il possible d'empêcher l'utilisateur d'insérer une ou plusieurs lignes dans une feuille ?
Merci d'avance pour vos (éventuelles) réponses.
JP
Re,
J'espère ne pas avoir été trop indélicat en évoquant la solution d'un
"concurrent" ;-)
Sinon, je te prie d'excuser cette audace.
Bonsoir,
JP
michdenis wrote:
Est-il possible par le biais d'une macro de récupérer ce "msg"
d'erreur
C'est sûrement possible, il faut demander à Rama...
Effectivement, son approche est très bien...ce, jusqu'au moment où
quelqu'un fera disparaître le contenu de IV65536
Si l'usager fait Atteindre / dernière cellule / où atterrit-il ?
;-)
"j-pascal" <nospam-j-pascal@free.fr> a écrit dans le message de news:
OkZAeSz4GHA.4256@TK2MSFTNGP03.phx.gbl...
Re,
Question subsidiaire ... RaMa propose un truc simple mais efficace
... Si on essaye d'insérer une ligne, on a un msg disant à peu près
"il est impossible de déplacer des données dans une zone, etc".
Est-il possible par le biais d'une macro de récupérer ce "msg"
d'erreur avant qu'il ne s'affiche et éventuellement afficher une
autre msgbox ? Je crains que cette question ne soit stupide, mais bon
elle me traverse l'esprit !
JP
michdenis wrote:
Le fichier final est celui-ci...
j'ai omis d'effacer un bout de code inutile
lors du copier-coller.
http://cjoint.com/?jCouV7uOhX
"j-pascal" <nospam-j-pascal@free.fr> a écrit dans le message de news:
eCdXPgn4GHA.900@TK2MSFTNGP04.phx.gbl...
Bonjour,
Comment est-il possible d'empêcher l'utilisateur d'insérer une ou
plusieurs lignes dans une feuille ?
J'espère ne pas avoir été trop indélicat en évoquant la solution d'un "concurrent" ;-) Sinon, je te prie d'excuser cette audace.
Bonsoir,
JP
michdenis wrote:
Est-il possible par le biais d'une macro de récupérer ce "msg" d'erreur
C'est sûrement possible, il faut demander à Rama...
Effectivement, son approche est très bien...ce, jusqu'au moment où quelqu'un fera disparaître le contenu de IV65536
Si l'usager fait Atteindre / dernière cellule / où atterrit-il ? ;-)
"j-pascal" a écrit dans le message de news:
Re,
Question subsidiaire ... RaMa propose un truc simple mais efficace ... Si on essaye d'insérer une ligne, on a un msg disant à peu près "il est impossible de déplacer des données dans une zone, etc". Est-il possible par le biais d'une macro de récupérer ce "msg" d'erreur avant qu'il ne s'affiche et éventuellement afficher une autre msgbox ? Je crains que cette question ne soit stupide, mais bon elle me traverse l'esprit !
JP
michdenis wrote:
Le fichier final est celui-ci...
j'ai omis d'effacer un bout de code inutile lors du copier-coller.
http://cjoint.com/?jCouV7uOhX
"j-pascal" a écrit dans le message de news:
Bonjour,
Comment est-il possible d'empêcher l'utilisateur d'insérer une ou plusieurs lignes dans une feuille ?
Merci d'avance pour vos (éventuelles) réponses.
JP
isabelle
| Est-il possible par le biais d'une macro de récupérer ce "msg" d'erreur
C'est sûrement possible, il faut demander à Rama...
Effectivement, son approche est très bien...ce, jusqu'au moment où quelqu'un fera disparaître le contenu de IV65536
!!Attention seul la geôlière a les clef de cette cellule !!! ;-) hola à une mutinerie.. isabelle
| Est-il possible par le biais d'une macro de récupérer ce "msg" d'erreur
C'est sûrement possible, il faut demander à Rama...
Effectivement, son approche est très bien...ce, jusqu'au moment où quelqu'un
fera disparaître le contenu de IV65536
!!Attention seul la geôlière a les clef de cette cellule !!! ;-)
hola à une mutinerie..
isabelle
| J'espère ne pas avoir été trop indélicat en évoquant la solution d'un "concurrent" ;-)
Je ne me connais pas de concurrent ici ... si j'y suis, c'est seulement pour mon bon plaisir...
michdenis
| Effectivement, son approche est très bien...ce, jusqu'au moment où quelqu'un | fera disparaître le contenu de IV65536
| Attention seul la geôlière a les clef de cette cellule !!! ;-) | hola à une mutinerie.. | isabelle
C'est petit jeune... ça ne respecte plus rien ! ;-) Tu leur fait faire un peu de temps dans ta geôle suite à un séjour ténébreux de Sieur du Beaujolais ! Ils vont comprendre ! ;-)
| Effectivement, son approche est très bien...ce, jusqu'au moment où quelqu'un
| fera disparaître le contenu de IV65536
| Attention seul la geôlière a les clef de cette cellule !!! ;-)
| hola à une mutinerie..
| isabelle
C'est petit jeune... ça ne respecte plus rien ! ;-)
Tu leur fait faire un peu de temps dans ta geôle
suite à un séjour ténébreux de Sieur du Beaujolais !
Ils vont comprendre ! ;-)
| Effectivement, son approche est très bien...ce, jusqu'au moment où quelqu'un | fera disparaître le contenu de IV65536
| Attention seul la geôlière a les clef de cette cellule !!! ;-) | hola à une mutinerie.. | isabelle
C'est petit jeune... ça ne respecte plus rien ! ;-) Tu leur fait faire un peu de temps dans ta geôle suite à un séjour ténébreux de Sieur du Beaujolais ! Ils vont comprendre ! ;-)
michdenis
!!Attention seul la geôlière a les clef de cette cellule !!! ;-) hola à une mutinerie.. isabelle
Ces petits jeunes... ça ne respecte plus rien ! ;-) Tu leur fais faire un peu de temps dans ta geôle suite à un séjour ténébreux de Sieur du Beaujolais ! Ils vont comprendre ! ;-)
!!Attention seul la geôlière a les clef de cette cellule !!! ;-)
hola à une mutinerie..
isabelle
Ces petits jeunes... ça ne respecte plus rien ! ;-)
Tu leur fais faire un peu de temps dans ta geôle
suite à un séjour ténébreux de Sieur du Beaujolais !
Ils vont comprendre ! ;-)
!!Attention seul la geôlière a les clef de cette cellule !!! ;-) hola à une mutinerie.. isabelle
Ces petits jeunes... ça ne respecte plus rien ! ;-) Tu leur fais faire un peu de temps dans ta geôle suite à un séjour ténébreux de Sieur du Beaujolais ! Ils vont comprendre ! ;-)
j-pascal
Bonsoir michdenis
wrote:
Voici la dernière version du fichier http://cjoint.com/?jDeHGkqx6K Je crois qu'il remplit bien la tâche demandée.
au besoin, ne te gêne pas pour l'améliorer ou la modifier !
Dans 10 ou 20 ans, peut-être ;-)
JP
Bonsoir michdenis
wrote:
Voici la dernière version du fichier http://cjoint.com/?jDeHGkqx6K
Je crois qu'il remplit bien la tâche demandée.
au besoin, ne te gêne pas pour l'améliorer ou la modifier !