OVH Cloud OVH Cloud

insertion lignes

22 réponses
Avatar
j-pascal
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

10 réponses

1 2 3
Avatar
RaMa
Bonsoir
Pas terrible mais peut-être dissuasif

Saisir apostrophe (4 num) ou guillemet (3 num) en IV65536

Salutations

RaMa

"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


Avatar
j-pascal
Bonsoir RaMa,

J'avoue que c'est très ingénieux ! Bravo ! Et merci pour cette (première)
réponse ;-)

S'il n'y a pas de solution plus accadémique, assurément je conserverai la
tienne.

JP



wrote:
Bonsoir
Pas terrible mais peut-être dissuasif

Saisir apostrophe (4 num) ou guillemet (3 num) en IV65536

Salutations

RaMa

"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




Avatar
michdenis
Il est possible de faire ce que tu demandes avec un bout
de code minimal en utilisant un module de classe

Une approche toute nouvelle - un fichier exemple avec explications

http://cjoint.com/?jCnXsGIWUV



"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
Avatar
michdenis
Pour empêcher d'ajouter des nouvelles lignes à une feuille
via un module de classe,

Le bon fichier est celui-ci :

http://cjoint.com/?jComRwTjzq




"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
Avatar
michdenis
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
Avatar
j-pascal
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


Avatar
j-pascal
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


Avatar
michdenis
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


Avatar
michdenis
| 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


Avatar
michdenis
| tous les modules de classes possèdent un numéro d'identification unique

Ce ne sont pas les modules qui possèdent ce numéro mais la "Classe objet"
vous avez sûrement deviné.


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

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


1 2 3