Ajout d'une ligne automatiquement après la dernière ligne vide

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 !

bassmart

XLDnaute Nouveau
Bonjours à tous!

Après plusieurs recherches sur différent forums, j'ai réussi à trouver une macro qui ajoute une ligne à la fin de mon tableau qui fonctionne mais elle m'ajoute une ligne à chaque fois que j'ouvre cette feuille.

Je n'ai toujours pas trouvé comment ajouter une ligne seulement si il reste une seul ligne vide. La colonne utilisé est la colonne b et la première ligne à remplir est la ligne 7.

Voici mon code
Code:
Private Sub worksheet_activate()


Dim Ligne As Long


nlign = Range("B7").End(xlDown).Row + 1
MsgBox "Et voilà" & nlign

If IsError(Range("B7").End(xlDown).Row) Then
    nlign = 7
Else
    nlign = Range("B7").End(xlDown).Row + 1
End If



If Range("b7:b" & nlign).Value <> "" Then

Range("B7:b" & nlign).Select
[B1048576].End(xlUp).Select
Rows(nlign).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End If



Range("b7").Select

End Sub

Merci d'avance pour votre aide!!
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Bonjour

Pas sûr d'avoir tout compris

par exemple, il y a des données de B7 à B50 une ligne vide en B51 puis des données à partir de B52 . Puisqu'il n'y a qu'une ligne vide, on veut décaler ces dernières données pour insérer une ligne vide en B52 ?

Avec un classeur représentatif sans données confidentielles, ce serait plus facile de tester et proposer une réponse.

A+
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Bonjour Paf!

Dans ma feuille, il n'y aura jamais de ligne vide entre 2 lignes avec valeurs. C'est valeurs sont copiées à partir d'une autre feuille, ensuite collées et triées dans celle-ci.

En fait, je veux qu'il m'ajoute une ligne à la fin de mon tableau, ce que j'ai réussi à faire mais lorsque j'insère ma condition If ça ne marche plus. La, je ne sais pas, si il faut que que détecte la première ligne vide et en ajoute une autre ou bien je détecte la dernière ligne non vide et j'ajoute une ligne?

Je t'envoie le lien pour la feuille en question!

Merci!
(c) CJoint.com, 2012
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Re bonjour

toujours pas bien compris.

avec
Code:
If IsError(Range("B7").End(xlDown).Row) Then
    nlign = 7
Else
    nlign = Range("B7").End(xlDown).Row + 1
End If
on détermine la première ligne vide dans laquelle on va pouvoir écrire

On ne peut pas écrire directement
Code:
If Range("b7:b" & nlign).Value <> "" Then
Mais de toutes façons, puisqu'on se positionne sur la première ligne vide après les données le test sera toujours vrai (hormis dans le cas où nlin=7), puisque,pour reprendre l'exemple du classeur joint où nlign=22 , entre B7 et B22 les cellules sont renseignées.

Qu'on soit en B7 ou B12 ou B22 ..., puisqu'on est sur la première ligne vide,à quoi sert d'insérer une ligne vierge, alors qu'il y en a près de 1 000 000 derrière?

A+
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Bonjour bassmart, Paf,

Nommez "Tableau" la plage B5:H22 incluant la ligne vide.

Puis dans le code de la feuille :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim T As Range, i&
Set T = [Tableau]
Application.EnableEvents = False
On Error Resume Next 'sécurité
If T.Rows.Count < 4 Then
  Application.Undo 'annulation
Else
  '---suppression des lignes vides---
  For i = T.Rows.Count - 1 To 4 Step -1
    If T(i, 1) = "" Then T(i, 1).EntireRow.Delete
  Next
  '---ajout de ligne---
  If T(T.Rows.Count, 1) <> "" Then
    Application.ScreenUpdating = False
    T(T.Rows.Count, 1).EntireRow.Insert
    T.Rows(T.Rows.Count - 1).FormulaR1C1 = T.Rows(T.Rows.Count).FormulaR1C1
    T.Rows(T.Rows.Count) = ""
    Application.ScreenUpdating = True
  End If
End If
Application.EnableEvents = True
End Sub
Fichier joint.

A+
 

Pièces jointes

Dernière édition:
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

salut

Comme le suggère Job 😉, il est commode de passer par un tableau
à Paf, l’intérêt de la fonction tableau est de transmettre les formats aux nouvelles lignes😉.
Donc, en créant un tableau (nommé ici Ta)
Code:
Private Sub Worksheet_Change(ByVal R As Range)
  Application.EnableEvents = 0
    If R.Row = [ta].Rows.count + 5 Then R.Copy R(2, 1): R(2, 1) = ""
  Application.EnableEvents = 1
End Sub
 

Pièces jointes

Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Re et bonjour job75 et bonjour Si...

@ Si...
sous XL 2003, je connais l'intérêt des listes, équivalent des tableaux sous XL>=2007; mais comme le classeur joint n'en comportait pas ...(à moins que cela proviennent de la conversion XL 2007 --> XL2003)

A+
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Bonjour à tous!

Merci pour votre réponse Paf, Job et Si!

Ça marche bien, mais ça me créer un autre problème!

J'avais oublié de vous dire que cette feuille "Inclinomètres" fait partie d'un ensemble de feuilles dont une de compilation qui s'appelle "Coordonnées" à partir de laquelle, je tri, copie et ensuite colle les données sur d'autres feuilles selon leur types(première lettre).

Mais la cette fonction, ne fonctionne plus pour la page "Inclinomètres" sur laquelle nous venons de faire le code. est-ce que ça se peut que soit dû à l'appellation de la zone tableau?
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Voici mon code pour la macro de tri, copier et coller:
Sub CopieFeuillets()
' Macro de Copie & de Tri

Sheets("Coordonnées").Unprotect

With Sheets("Coordonnées")

For i = 1 To 4
On Error Resume Next
Erase Critères
On Error GoTo 0
Select Case i

Case 1
wsn = "FORAGE"
Critères = Array("F", "FC", "FS", "FSZ")
col = "A" ' colonne dans laquelle mettre le n° de sondage, est également la colonne pour le tri
PL = 8 'première ligne des données dans wsn
tabtri = "A" & PL & ":n" ' tableau à trier
Case 2
wsn = "CPTU"
Critères = Array("C", "CR", "FC", "M")
col = "A"
PL = 7
tabtri = "A" & PL & "😱"
Case 3
wsn = "Piézomètres"
Critères = Array("Z", "FSZ")
col = "B"
PL = 8
tabtri = "A" & PL & ":m"
Case 4
wsn = "Inclinomètres"
Critères = Array("I")
col = "B"
PL = 7
tabtri = "A" & PL & ":H"
End Select

.Range("$A$4:$N$64").AutoFilter Field:=4, Criteria1:=Critères, Operator:=xlFilterValues 'on filtre les données de coordonnées

Set ws = Sheets(wsn) ' ws = référence de la feuille
nl = ws.Cells(Rows.count, col).End(xlUp).Row ' nl pointeur de dernière ligne utilisée dans la feuille basé sur colonne col
If nl < PL Then nl = PL - 1
For Each R In .Range(.Range("C5"), .Range("C5").End(xlDown)).SpecialCells(xlVisible) ' on parcourt toutes les cellules sélectionnées de la colonne C, (r=cellule en cours)
Set re = ws.Range(col & ":" & col).Find(R.Value, lookat:=xlWhole) 'on recherche le n°de sondage dans la colonne col
If re Is Nothing Then 'si non trouvé
nl = nl + 1 ' on ajoute une nouvelle ligne
ws.Cells(nl, col) = R.Value ' on met le numéro de sondage en colonne col
End If
Next
With ws.Range(tabtri & nl)
.Sort key1:=.Cells(1, col), order1:=xlAscending, Header:=xlNo
End With
Next i
If Worksheets("Coordonnées").AutoFilterMode Then
Worksheets("Coordonnées").AutoFilterMode = False

End If
End With


Sheets("Coordonnées").Protect

End Sub

Merci pour votre aide!
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Bonjour Paf!

En fait, les premières ligne de mon code, je l'ai trouvé dans un code sur un forum et je l'ai mis là sans savoir exactement ça fonction. Mais elle ne me créais pas de problème, alors je l'ai laissé là! Je suis loin d'être un pro en vba, je commence à comprendre la base des codes.

Merci!
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

J'avais oublié de vous dire que cette feuille "Inclinomètres" fait partie d'un ensemble de feuilles dont une de compilation qui s'appelle "Coordonnées" à partir de laquelle, je tri, copie et ensuite colle les données sur d'autres feuilles selon leur types(première lettre).

Il faut toujours joindre un fichier qui corresponde à la réalité !!!

Et expliquer clairement ce que l'on veut faire.

Un code copié sur le forum ne nous sert pas à grand-chose.

A+
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Effectivement Paf!

Désolé mon erreur!

Après avoir effectués des tests sur mon fichier complet, il ne m'ajoute pas de ligne automatiquement lorsque les nouvelles entrées sont collé vers la feuille "Inclinomètres". Le mieux je vais vous envoyer mon fichier complet pour tester.

(c) CJoint.com, 2012
Encore Merci!
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Re,

En tout cas moi c'est job75...

1) Au lieu de passer par cjoint (dépose éphémère) déposez le fichier sur le post en cliquant sur "Aller en mode avancé".

2) Vous n'expliquez pas ce que vous voulez faire :

- vous copiez quoi pour le coller où ?

- donnez un exemple du résultat que vous voulez obtenir.

A+
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Désolé job75!

Je t'explique! J'entre des données dans ma feuille "Coordonnées" qui compile toutes mes données sous forme de numéro (ex:C35001-006-12) qui représente: La première lettre le type et après c'est le numéro unique. À partir de cette feuille, je tri les données en fonction de la première lettre qui se retrouve aussi dans mas colonne "D" pour que ce soit plus facile à trier. Ensuite, je copie selon le type (première lettre) vers la feuille qui correspond aux types suivant: Forage, CPTU, Piézomètres et Inclinomètres (ex: F=Forage, C=CPTU).

Cette macro s'effectue à l'aide d'un bouton "Mettre à jours tous les feuillets" qui se situe dans ma feuille d'Accueil.

Lorsque je doit ajouter des données, je les ajoutent toujours dans ma feuille "Coordonnées" et je vais dans ma feuille Accueil pour relancer la macro de tri.

Je ne peux pas envoyer le fichier directement, il dépasse la taille maximale de 293 Ko!

J'espère que c'est plus clair!

Merci!
 
Re : Ajout d'une ligne automatiquement après la dernière ligne vide

Re,

Bon j'avais pourtant bien dit au post #5 et dans le fichier que la plage "Tableau" doit inclure la ligne vide 🙄

Dans ce fichier voyez d'abord la feuille "Inclinomètres" et son tableau corrigé :

Ce lien n'existe plus

J'y ai bien sûr mis ma macro Worksheet_Change.

Ensuite exécutez votre macro CopieFeuillets, elle fonctionne correctement.

A+
 
- 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

Réponses
3
Affichages
265
Réponses
5
Affichages
705
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour