Afficher un message lors d'une insertion de ligne

Fermé
Zoe - 30 oct. 2014 à 12:07
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 - 31 oct. 2014 à 18:31
Bonjour,


Je souhaiterais afficher un message lorsque j'insère une ligne dans ma feuille excel, est-ce possible ?

Merci !
A voir également:

18 réponses

PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
30 oct. 2014 à 14:34
Via le code VBA on peut utiliser la fonction MsgBox pour afficher les message.

MsgBox "Écrire le texte entre les guillemet", vbInformation

Mais à ma connaissance, il n'y a pas d'évènement qui s'active lorsqu'on insert une ligne.

Donc, l'idéal serait peut-être d'ajouter un bouton qui insert une ligne et affiche le message.

Ça dépend de l'utilisation que tu fais de ta feuille Excel et les circonstance lié à l'ajout d'une ligne.
0
C'est pour afficher un rappel quand je rajoute une ligne...
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
30 oct. 2014 à 16:29
Il faudrait que dans les évènement de ta feuille, l'on puisse afficher le msgbox.

Le problème, c'est d'identifier quand faire le trigger.

Un rappel général lors d'un ajout de ligne peut importe ou, non, je ne crois pas que ce soit possible. la seule possibilité que je vois, est si tu ajoute une ligne spécifiquement à un endroit précis on pourrait capté la position.

Comme dans l'exemple suivant :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Row = 12 Then
MsgBox "Positionné sur la ligne 12, attention avec l'ajout de ligne", vbInformation
End If
End Sub

un message est affiché chaque fois qu'on est sur la ligne 12.
Le seul paramètre qu'on a, c'est dans quel case on se trouve.

Il y a d'autre évènement, comme Worksheet_Change,
mais encore la, je ne vois pas de moyen d'identifier qu'une insertion de ligne est faite autre qu'avec la position relative.
0
Dommage !!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 11:39
Bonjour,

a mettre dans la feuille concernée:

Option Explicit
Private x As Long
Private Sub Worksheet_Activate()
   x = ActiveSheet.UsedRange.Rows.Count
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
   If ActiveSheet.UsedRange.Rows.Count <> x Then MsgBox "changement"
End Sub


fonctionne pour l'insertion ou la suppression de ligne
0
Merci mais je met ça où dans la feuille ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 14:04
Sélectionner votre feuille et faites Alt F11 pour ouvrir l'éditeur. Vous coller le code là
0
Merci j'ai réussi insérer le code, cependant il s'affiche "trop" c'est à dire qu'il apparait aussi quand je suis dans une cellule et que j'appuie sur ENTREE.
Je voudrais uniquement l'ajout et suppression de ligne.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 14:59
La solution que je propose c'est de délimiter une plage de cellule où le message sera actif:

Option Explicit
Private x As Long
Private Sub Worksheet_Activate()
   x = ActiveSheet.UsedRange.Rows.Count
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("A1:M40")) Is Nothing Then 'zone d'activation du message
If ActiveSheet.UsedRange.Rows.Count <> x Then MsgBox "changement"
   End If
End Sub


0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 15:05
Tu mets ta zone dans la colonne A et le tour est joué:

If Not Intersect(Target, Range("A:A")) Is Nothing Then 
0
Oui bonne astuce ! Mais faut pas entrer dans les cellules de la colonne A.
Quand je change de feuille et revient sur la feuille où se trouve mon code, ce dernier ne fonctionne plus... Pourquoi ?
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
31 oct. 2014 à 16:03
La meilleur façon de comprendre ce qui se passe.
Ajouter temporairement un msgbox pour voir la valeur de la zone.

Private Sub Worksheet_Activate()
x = ActiveSheet.UsedRange.Rows.Count
Msgbox X
End Sub

La fonction activate n'est pas lancé à l'ouverture, elle est par contre activée si on change de feuille et revient à notre feuille avec le code.
Tu peux effacer le msgbox une fois que tu as fini tes tests.


Si tu veux un seul avertissement après avoir ajouter une ligne.
On n'a qu'a réassigner X après un changement.

Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.UsedRange.Rows.Count <> x Then
MsgBox "changement"
x = ActiveSheet.UsedRange.Rows.Count
End If
End Sub

Le message s'affiche si la zone est plus grande que la valeur de X, mais on réassigne X après que le message soit affiché, donc il n'apparaîtra qu'une seule fois après chaque ajout de ligne.

Je ne crois pas qu'une zone active soit absolument nécessaire.
0
merci pour l'explication ! dommage car avec le systeme de la colonne A ca marchait bien mais pas quand on changeait de feuilles...
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 31/10/2014 à 16:46
Alors, on peut y remédier.

Tu peux définir ton X à l'ouverture du classeur.

Option Explicit
Public x As Long

Private Sub Workbook_Open()
x = Worksheets("feuil1").UsedRange.Rows.Count
MsgBox x
End Sub

Donc il va regarder la grandeur de la zone active de FEUIL1 à l'ouverture.
Renomme feuil1 par le nom de la feuille ou tu veux que le message apparaisse.

Et tu conserve

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A:A")) Is Nothing Then 'zone d'activation du message
If ActiveSheet.UsedRange.Rows.Count <> ThisWorkbook.x Then MsgBox "changement"
End If
End Sub

dans le code de la feuille avec ThisWorkbook.x pour la référence à ta variable X


Donc, tu conserves les même réactions avec seulement la colonne A qui trigger le message. et la variable X n'est pas assigné avec Activate (lorsqu'on change de feuille), mais une seule fois à l'ouverture du classeur.

Donc une fois qu'une ligne est ajouté, le message apparaît toujours, mais seulement si on écrit dans la colonne A.

Donc tu peux utiliser le code selon ton gout, si tu veux un seul message, ou un rappel à chaque fois qu'on écrit dans la colonne A.

Si tu veux le rappel pour la colonne A ET B tu peux changer A:A pour A:B selon tes désirs :)
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
31 oct. 2014 à 16:44
Si tu veux écrire dans l'ouverture du classeur.
Quand tu es dans l'éditeur visual basic, tu as un explorateur de projet dans le coin gauche.
Tu peux voir les feuille et l'objet ThisWorkbook.

Tu double click sur Thisworkbook, et c'est la que tu peux mettre le code pour l'ouverture.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 16:57
PlacageGranby, tu es en train de tout embrouiller.

Beaucoup plus simple, sélectionner une cellule dans la colonne A pour réactiver le processus, lors du changement de feuille, comme ceci:

Option Explicit
Private x As Long
Private Sub Worksheet_Activate()
 Range("A1").Select
 x = ActiveSheet.UsedRange.Rows.Count
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
   If Not Intersect(Target, Range("A:A")) Is Nothing Then
   If ActiveSheet.UsedRange.Rows.Count <> x Then MsgBox "changement"
   End If
End Sub


0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 17:58
J'ai oublié un petit détail qui a son importance pour le bon fonctionnement:

Il faut que la cellule A1 soit rempli!!!!!!!!!!

Evidemment vous pouvez choisir une autre colonne et une autre cellule(rempli) dans cette même colonne suivant les besoins.
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
31 oct. 2014 à 17:14
Je trouvais quelques petits inconvénients.

À l'ouverture, le message s'affiche même si on n'a pas ajouté de ligne si on ne change pas de feuille.
Dans un classeur ayant une seule feuille, Activate n'est pas vraiment utile.

L'idéal, c'est de tester les solutions et de développer sa capacité à coder.

Désolé, moi j'essayais seulement d'aider.

Personne n'est parfait.
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 17:42
PlacageGranby,

J'ai fait des essais , le message ne s'affiche pas à l'ouverture!

Dans un classeur qui n'a qu'une feuille, le problème de changement de feuille ne se pose pas!

Je comprend que tu veuilles aider, c'est très bien. Mais je pense qu'en programmation, il faut faire le plus simple possible, comme dans beaucoup de chose.

Je suis un autodidacte, ce code je l'ai fait au fur a mesure des demandes en corrigeant les problèmes qui survenaient.

Cordialement
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
31 oct. 2014 à 18:01
Je n'arrive pas a comprendre pourquoi cela ne marche pas chez moi.

Private Sub Worksheet_Activate()
Range("A1").Select
x = ActiveSheet.UsedRange.Rows.Count
msgbox X
End Sub


J'ai ajouter un msgbox X à activate puisque c'est le seul endroit ou X recoit sa valeur.
Je ferme le classeur.
Lorsque je l'ouvre, aucun msgbox.

Donc X est vide pour l'instant. il n'y a rien qui appelle active à l'ouverture.

Si j'écris dans la colonne A, le msg s'affiche car X n'est pas encore assigné.
C'est un peu n'importe quoi, au plus simple, on pourrait avoir le message qui s'affiche peu importe dès qu'on écrit dans la colonne A.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then MsgBox "changement"
End Sub


Pour moi, un message qui pop trop souvent, çà devient rapidement fatiguant, donc j'essayais de vraiment valider qu'une ligne était ajouté.

Pour ma part, je l'avoue, je ne suis pas un expert, et comme toi, je teste et valide les solutions.
Je suis autodidacte et j'essaye de comprendre.

Aller au plus simple, je suis parfaitement d'accord. Mais j'essaie souvent de pousser les tests et approfondir pour m'améliorer.
0
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
31 oct. 2014 à 18:11
Je prend tout les commentaire de façon constructive, si il y a quelque chose que j'ai mal compris à l'ouverture, s.v.p. me l'indiquer pour m'aider a progresser.

Cordialement
PlacageGranby
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
31 oct. 2014 à 18:31
J'ai mis la colonne A, évidemment il faut mettre une colonne que l'on n'est pas susceptible d'utiliser.

J'ai essayé ton code , le message s'affiche dès la sélection de ligne. Cela peut-être une autre approche!

Private Sub Worksheet_Change(ByVal Target As Range) 
 If Target.Column = 1 Then MsgBox "changement" 
End Sub 


Conclusion, je pense que cela peut convenir en veillant bien à choisir une colonne neutre.
0