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

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!!
 

Paf

XLDnaute Barbatruc
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+
 

bassmart

XLDnaute Nouveau
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
 

Paf

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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

  • test_ajoutligne(1).xlsm
    23.7 KB · Affichages: 35
Dernière édition:

Si...

XLDnaute Barbatruc
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

  • Tableau_ajoutligne.xlsm
    20.1 KB · Affichages: 45

Paf

XLDnaute Barbatruc
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+
 

bassmart

XLDnaute Nouveau
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?
 

bassmart

XLDnaute Nouveau
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 & ":eek:"
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!
 

bassmart

XLDnaute Nouveau
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!
 

job75

XLDnaute Barbatruc
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+
 

bassmart

XLDnaute Nouveau
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!
 

job75

XLDnaute Barbatruc
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+
 

bassmart

XLDnaute Nouveau
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!
 

job75

XLDnaute Barbatruc
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 :rolleyes:

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+
 

Discussions similaires

Statistiques des forums

Discussions
312 677
Messages
2 090 815
Membres
104 673
dernier inscrit
lautard