Obtenir le N° de la première ligne vide d’une colonne

Bonjour

pour pouvoir remplir les cellules A1,A2,A3....d'une feuille vide au départ, je lance cette procédure :

Dim derLigne As Long

End if

Sheets("Patronyme").Range("A" & lderLigne.Value = UCase(Nom)

La première passe me permet de rentrer une donnée dans A1 mais si, je relance la procédure, derLigne marque toujours 1 et la valeur ajoutée s'inscrit en A1 et remplace la donnée déjà inscrite.

derLigne = Range("A" & Rows.Count).End(xlUp).Row ne donne t-il pas la référence de la ligne vide ?

Si A2 , A3 ne sont pas vides, la ligne fonctionne .. pourquoi ?

merci

Bonsoir,

Solution :

Met un titre dans A1 et utilise la variable dernLig+1 pour inscrire les valeurs. Voir code suivant :

Sub test()
    Dim derLigne As Long
    derLigne = Range("A" & Rows.Count).End(xlUp).Row
    nom = "test" & derLigne
    Sheets("Patronyme").Range("A" & derLigne + 1) = UCase(nom)
End Sub

Bonjour jpmalb, Raja,

je propose ce code VBA :

Sub Essai()
  Dim Nom$, lig&: Application.ScreenUpdating = 0
  lig = Cells(Rows.Count, 1).End(3).Row + 1
  If lig = 2 And IsEmpty([A1]) Then lig = 1
  '...
  Worksheets("Patronyme").Cells(lig, 1) = UCase$(Nom)
End Sub

dhany

Bonjour à tous,

@ dhany

rebonjour

ps/

je ne vois pas l’intérêt d'ajouter lig&: Application.ScreenUpdating = 0

Bonjour Isabelle,

comment ça va ? Noël approche, hein ?


tu a écrit :

je ne vois pas l’intérêt d'ajouter lig&: Application.ScreenUpdating = 0

lig& : j'ai l'habitude de déclarer toutes les variables, ce qui est obligatoire si ont met Option Explicit

et pour Application.ScreenUpdating = 0 : la ligne du code '... représente plusieurs instructions :

c'était les 3 tirets de l'énoncé après End If : --- ; et comme on sait pas c'que ça fait, j'ai ajouté

le gel de la mise à jour de l'écran par sécurité.

t'imagine le flashage qu'il y a sans, au cas où ça passe d'une feuille à une autre plusieurs fois de suite ?

ça clignote comme un sapin d'Noël !


mais attention : cette ligne n'est qu'un détail ; regarde bien les 2 lignes en dessous !

je n'ai pas fait que rajouter la ligne que tu as citée, loin de là !

dhany

Salut jpmalb,

Salut l'équipe,

pour répondre à ta question : pourquoi ?

Ta première instruction calcule la dernière ligne non vide.

Si ta feuille est vide, elle donne comme résultat 1; si elle n'est pas vide, elle donnera 2, 3,...

derLigne = Range("A" & Rows.Count).End(xlUp).Row

Ce qui ne va pas, c'est que ta deuxième instruction ne placera le curseur sur la première ligne libre QUE SI derligne est différente de 1 !

Comme ta feuille était vide et donc que derligne = 1, ça ne risquait pas de te donner autre chose que 1 jusqu'à la fin des temps !!

If derLigne <>1 then

derLigne = Range("A" & Rows.Count).End(xlUp).Row +1

End If

Donc, dans le cas où tu veux utiliser une feuille sans en-tête de colonne, pour calculer ta première ligne libre, il faut faire :

iRow = IIf([A1] = "", 1, Range("A" & Rows.Count).End(xlUp).Row + 1)

A+

merci à vous tous qui avez pris le temps de vous pencher sur mon problème , avec une mention particulière àCurulis57 qui a pointé mon erreur de logique avec le 1 qui me bloquait et la solution proposée pour m'en dépêtrer...

merci pour ton retour d'info, et pour avoir passé le sujet en résolu !

bonne continuation !

dhany

Rechercher des sujets similaires à "obtenir premiere ligne vide colonne"