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

bassmart

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

Merci beaucoup job75!

Ça fonctionne super!! J'imagine que je peux copier cette macro sur mes autres feuilles(Forage, CPTU et PIézomètres) en autant que je nomme ma plage Tableau pour exécuter un ajout de ligne.

Encore merci!:D
 

bassmart

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

Bonjour!

Après avoir tester plusieurs fois, j'ai rencontré un problème! Lorsque les ligne sont tous pleines , il me copie la valeur dans la première ligne vide qui ne fait pas partie du tableau (ex: dernière ligne pleine 42 mais copie sur la ligne 43) et m'ajoute une ligne au dessus (donc entre les 2).

Qu'est-ce que doit modifier?
Option Explicit

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
End Sub

Merci!
 

bassmart

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

Excusez-moi!

En fait la macro fonctionne super! J'ai une autre macro que je teste pour faire suivre les modifications d'une feuilles à l'autres qui fait tout foirer!

À suivre!
 

bassmart

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

Bonjour à tous!

Après avoir testé plusieurs scénario avec cette macro, elle fonctionne si on entre une nouvelle valeur à la fois.

Mais lorsque j'ajoute plusieurs nouvelles (plus qu'une) données, ça ne fonctionne plus comme voulue. Lorsque je lance la macro pour la mise à jours des feuilles, il colle toutes les nouvelles données dans les bonnes feuilles et dans la bonne colonne mais s'il me reste seulement qu'une ligne vide dans la feuille de destination. Il me colle donc, les nouvelles valeurs dans les lignes à l'extérieur de mon tableau et me fait un tri avec des lignes non vides, je me retrouve avec des lignes protégées et non mis en forme dans mon tableau.

Voici le code qui se situe sur chacune des feuilles:
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim T As Range, i&
Set T = [Tableau2]
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

End Sub
 

job75

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

Bonjour bassmart,

Je pensais que vous aviez compris : ce qui est entré au-dessous du tableau n'est jamais pris en compte.

Si vous voulez ajouter plusieurs valeurs dans le tableau, il faut les insérer :

- sélectionnez les lignes entières de ces valeurs

- clic droit => Copier

- sélectionnez la ligne d'insertion dans le tableau, clic droit => Insérer les cellules copiées.

A+
 

bassmart

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

Bonjour job75!

Je comprend!

Mais le problème ce que je ne veux pas faire d'opération manuel seulement automatique afin d'éviter toutes erreurs! Je ne serai pas le seul à utiliser ce fichier et il est possible qu'une personne ajoute plus d'une valeur dans ma feuille "Coordonnées".

Comment puis-je faire?

Merci!
 

bassmart

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

Bonjour job75!

Merci pour ton aide!

Je crois que la meilleur solution dans mon cas, c'est dès qu'il y a une nouvelle entrée dans ma feuille "Coordonnées" qui la copie directement dans la feuille approprié! Donc, seulement une valeur sera inséré à la fois.

Merci!
 

job75

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

Re,

Je crois que la meilleur solution dans mon cas, c'est dès qu'il y a une nouvelle entrée dans ma feuille "Coordonnées" qui la copie directement dans la feuille approprié! Donc, seulement une valeur sera inséré à la fois.

Vous voyez, qui cherche trouve :rolleyes:

On peut aussi tout simplement faire une boucle pour copier les données une par une.

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 488
Messages
2 088 866
Membres
103 979
dernier inscrit
imed