Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

dernière ligne vide d'un tableau erronée en VBA

  • Initiateur de la discussion Initiateur de la discussion herve62
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Ce fichier (vidé exprès ) ne donne plus la dernière ligne en 2 mais 3 ??? lors de la "validation" de saisie de l'usf
J'ai fait un test via le module c'est bien 2 avec forcément la même instruction ... de base
C'est un fichier de reprise , peut être le tableau a t-il été mal construit .. ??
pour tester :
clik en col A > USF : juste mettre un nom + un truc > Validation
Résultat : insertion en ligne 3 ??? Pourquoi ?? comme dab .. un truc simple doit m'échapper !!
Merci à vous !!
 

Pièces jointes

Bonjour

Dans la sub validation() modifier cette ligne comme ceci :
dlg = .Range("A" & .Rows.Count).End(xlUp).Row '+1

Soit vous enlevé le +1 soit vous mettez un ' juste avant le plus
 
Bonsoir @herve62, @piga25,

J'avais, pour usage personnel, écrit une fonction DerLigne(...) qui retourne le numéro absolue de ligne de la dernière cellule non vide d'une colonne entière.
Cette fonction doit fonctionner qu'on soit en présence ou non d'une structure tableau. Que la colonne soit filtrée ou non, le résultat n'en est pas affecté. Elle est indépendante des noms des en-têtes et du nom du tableau. Je vous la livre brute de décoffrage.
Dans le fichier joint, on peut comparer le résultat avec une structure tableau en utilisant soit End(xlup) soit la fonction DerLigne(...). Idem dans feuil2 mais avec une simple plage. Sur Feuil2 la plage est en outre filtrée.

VB:
Function DerLigne(xrg As Range)
'considère la première cellule du range xrg
'considère toute la colonne de la feuille correspondante à cette cellule
'recherche la dernière cellule non vide cette colonne
'retourne le numéro de ligne de cette dernière cellule non vide
'si la colonne est entirement vide, alors 0 est renvoyé
'doit fonctionner avec ou sans une structure de type tableau
'doit fonctionner avec ou sans filtrage
Dim der1 As Long, der2 As Long, x
  On Error Resume Next
  x = 9E+99: der1 = Application.WorksheetFunction.Match(x, xrg(1, 1).EntireColumn, 1)
  x = String(255, Chr(255)): der2 = Application.WorksheetFunction.Match(x, xrg(1, 1).EntireColumn, 1)
  If der2 > der1 Then DerLigne = der2 Else DerLigne = der1
  On Error GoTo 0
End Function
 

Pièces jointes

Dernière édition:
Bonjour à tous
Pour les tableaux de feuilles, il faut utiliser le range:
VB:
LstRw = Range("Diffusion[Nom du chien]")(Range("Diffusion[Nom du chien]").Count).Row

Cordialement
 
Bonjour tous
@piga25 : oui mais ensuite il faut remodifier les variables , car si tu a remarqué dans mon code Dlg est utilisé et donc si par ex = 4 les données suivantes écraseront les anciennes !
@Efgé : je pige pas ta syntaxe ?
Mapomme c'est la solution qui fonctionne ; Je connaissais d'autres fonctions au cas ou : formules , MFC , mais pas celle-ci ; j'ai déjà mis ton fichier super bien expliqué dans mon grenier !
 
Bonsoir , @Efgé
Effectivement dans une sub avec un with worksheets ... , et LstRw= .range ........ c'est ok ; les tableaux ne me servent que vraiment très rarement
donc la "gestion des noms" et l'utilité .. euh ?? j'essaierai de m'en souvenir
 
Bonjour
Je reviens sur le sujet , car plus tard en commençant à me servir du fichier , je me suis aperçu que l'instruction de EFgé ne fonctionnait pas
la 1ere fois cela insère bien en 2 ... mais les autres fois aussi ????
 
Bonjour
La ligne de code te donne la ligne de la dernière cellule remplie de la colonne.
La première foi que tu l'utilise, le tableau est vide, donc tu trouves la deuxième lignes.
Ensuite tu continus à trouver la ligne deux car c'est la dernière remplie du tableau.
Dans le code il faut vérifier avant d'écrire, si la cellule en A2 est remplie.
Si elle est vide tu écrits en A2, sinon tu utilise :
LstRw = Range("Diffusion[Nom du chien]")(Range("Diffusion[Nom du chien]").Count).Row +1

En espérant que mes explications soient compréhensibles.
Cordialement
 
Re
Oui , Ok je pensais que c'était une instruction générale permettant de donner systématiquement le der Lig lorsque c'était un tableau
comme l'exemple de MaPomme !
Sinon en même temps , je viens de remarquer que juste pour cette LIGNE 2 > si l'on fait "supprimer" : ne "delete" pas l'image ???
 
Re
je pensais que c'était une instruction générale permettant de donner systématiquement le derLig lorsque c'était un tableau
C'est ça. Mais ton tableau commence sans lignes de données , donc il faut faire un vérification du type
If A2 = "" j'écrit en A2
Else j'écrit en A & LstRw +1

je viens de remarquer que juste pour cette LIGNE 2 > si l'on fait "supprimer" : ne "delete" pas l'image ???
Là je laisse d'autres prendre le sujet 😉

Cordialement
 
Bonjour.
Pour trouver le nombre de ligne d'un tableau dont fait partie une cellule Cel, c'est Cel.ListObject.ListRows.Count.
Mais on n'en a pas besoin pour obtenir un Range représentant une nouvelle ligne ajoutée: C'est LOt.ListRows.Add.Range, si Private LOt As ListObjet en tête et dans l'UserForm_Initialize: Set LOt = Sheets("Liste diffusion").ListObjects(1)
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Tableau
Réponses
24
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…