Savoir élégamment quand une nouvelle ligne de ListObject est créée
Bonjour à tous.
Quelle serait la méthode la plus élégante pour savoir quand l'utilisateur a créé une nouvelle ligne dans un tableau ListObject ?
Je ne pense pas qu'il y ait moyen de poser une méthode sur l'objet ListObject en question pour trapper un événement genre lineInsert comme on le ferait en access ?
Actuellement, je travaille sur la méthode Worksheet_Change et lors d'une insertion de ligne, le Target a sa propriété ListObject renseignée et sa taille est d'une ligne et n colonnes (n = nombre de colonnes du tableau)
Si le tableau est étendu par le coin, le nombre de lignes correspond au nombre ajouté.
Mais est-on sûr que c'est une méthode fiable pour cela ? Y-a-t-il plus élégant et explicite ?
Merci de vos suggestions
VD
Bonjour,
Je serais tenté de dire que c'est un peu élucubré comme questionnement. Mais ce n'est ni un reproche ni moquerie. Je veux dire par là que c'est difficile de répondre à cela de manière conceptuelle quand on n'a aucun élément contextuel.
Si on veut apporter quelques éléments de réponse, ça dépend de pas mal de chose...
Une clef primaire a t'elle été crée ?
Si la réponse est non je ne vois guère qu'une historisation des interventions pour le savoir ou/et un mouchard (nombreuses possibilités...)
Si la réponse est oui : ça dépend du type de clef avec une clef numérique par incrémentation, toute clef supérieure à la précédente peut être considérée comme une nouvelle ligne (si le système est suffisamment verrouillé pour que l'opérateur n'ai pas la possibilité de modifier la clef...)
Avec des clefs alphanumériques ou même numériques mais pseudo aléatoires on revient au cas numéro 1... Surtout si l'opérateur à la possibilité de supprimer des enregistrements...
Tu le vois déjà la question n'est déjà pas simple et si on veut rentrer un peu plus dans le contextuel, il faut éplucher un peu le pourquoi de la question... Le système de saisie, l'accès aux données (feuilles) est-il possible (ou tout se passe-t-il via une interface ? )
Pour résumer le fond de ma pensée si une clef index non modifiable est crée, tu n'as que l'embarras du choix pour la méthode de comparaison : La meilleure étant celle qu'on utilise le plus facilement en fonction de ses aptitudes personnelles. Personnellement j'utilise la Fonction MAX : Si le MAX d'aujourd'hui est supérieur à celui d'hier c'est qu'il y a du nouveau....
C'est la raison pour laquelle une des toutes premières recommandation lors de la création d'une pseudo base de donnée avec Excel est de créer une clef primaire dans la colonne A. ( 1,2, 3... )
Toute autre tentative ne peut relever que du bricolage.
Ne me fait pas dire ce que je 'ai pas dit hein... Il y a des bricoleurs de génie parfois plus ingénieux que des professionnels patentés ! Mébon...
A+
Bonjour,
Une suggestion, ou du moins une piste à explorer, en attendant un complément d'informations.
Cdlt.
Option Explicit
Dim Base As Long
Private Sub Worksheet_Activate()
Base = Me.ListObjects(1).ListRows.Count
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lo As ListObject, lastRow As Long
If Not Target Is Nothing Then
Set lo = Me.ListObjects(1)
lastRow = lo.ListRows.Count
If lastRow <> Base Then
MsgBox "Ajout ou suppression ligne dans tableau", 64, "Information"
Base = lastRow
End If
End If
End Subbonjour à tous
je fais pas mal de tableaux de bord, en récupérant des données saisies dans Excel et dans d'autres bases de données
le plus simple (en attendant mieux
puis créer une petite courbe nombredelignes en fonction de ladatequifiguredansletableaudesdonnées
c'est très parlant
attention : coller avec liaison une zone incluant des lignes vides vers le bas, en prévision des futurs allongements de la base
note : ce n'est pas un message pop-up qui te prévient, mais c'est efficace.
bonne journée à vous