Afficher un message lors d'une insertion de ligne

Zoe -  
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour,

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

Merci !

18 réponses

  1. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
  2. Zoe
     
    C'est pour afficher un rappel quand je rajoute une ligne...
    0
  3. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  6. Zoe
     
    Merci mais je met ça où dans la feuille ?
    0
  7. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Sélectionner votre feuille et faites Alt F11 pour ouvrir l'éditeur. Vous coller le code là
    0
  8. Zoe
     
    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
  9. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Tu mets ta zone dans la colonne A et le tour est joué:

      If Not Intersect(Target, Range("A:A")) Is Nothing Then 
      0
  10. Zoe
     
    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
  11. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
  12. Zoe
     
    merci pour l'explication ! dommage car avec le systeme de la colonne A ca marchait bien mais pas quand on changeait de feuilles...
    0
  13. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
  14. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
  15. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
  16. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  17. PlacageGranby Messages postés 402 Statut Membre 26
     
    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
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      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
  18. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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