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

Création automatique d'une ligne

  • Initiateur de la discussion Initiateur de la discussion sadicla
  • 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 !

sadicla

XLDnaute Occasionnel
Bonjour à tous

Je suis toujours sur ma feuille de métrés et je voudrais si c'est possible, avoir une nouvelle ligne , au fur et à mesure de mes saisies lorsque je passe à la ligne suivante . J'avais au départ fait un tableau de 3000 lignes ( j'ai vu un peu grand je l'avoue ) mais lorsque je fais des filtres quelconque, ou d'autres manipulations simples, il y a d'énormes lenteurs dues sans doute au fait que dans ces 3000 lignes il y a 8 formules en tout, donc 24000 formules c'est trop . C'est pour cette raison que je voudrais pouvoir avoir un tableau qui se construise au fur et à mesure . Oups j'espère que je suis clair ... ( pas sur çà !!! ) . Je mets un exemple de mon fichier . Merci à tous d'avance, et bonne journée .
 

Pièces jointes

Dernière édition:
Re : Création automatique d'une ligne

Oups !!! Mince , pourtant quand je l'ouvre j'ai pas de problème . Je l'ai zippé parce qu'il est trop gros . Je sais pas trop comment faire autrement .
Je le refait avec un autre
 

Pièces jointes

Dernière édition:
Re : Création automatique d'une ligne

Bonjour sadicla, mutzik,

Voir cette macro dans le code de la feuille Métrés :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant
lig = Application.Match("S.TOTAUX", [A:A], 0)
If Not IsNumeric(lig) Then MsgBox "Il faut ""S.TOTAUX"" en colonne A !", 48: Exit Sub
If Cells(lig - 1, 1) = "" Then Exit Sub
Application.EnableEvents = False 'désactive l'action des événements
On Error Resume Next 'sécurité
Rows(lig).Insert
Rows(2).Copy Rows(lig)
Rows(lig).SpecialCells(xlCellTypeConstants).ClearContents
Application.EnableEvents = True
End Sub
Nota : supprimé les bordures supérieures de la ligne 2 (qui est copiée).

A+
 

Pièces jointes

Re : Création automatique d'une ligne

Bonsoir,

J'ai n'ai pas réussi à reproduire cette macro dans mon fichier.
Effecivement je suis interressé par cette fonction, car ceci evite de créer un gros tableau.
Et le principe de copier une ligne modele dès que la dernière ligne est renseignée est très interressante.

Donc dans le fichier joint, je souhaite recopier la ligne A à la fin du tableau.



Merci
 

Pièces jointes

Re : Création automatique d'une ligne

Bonjour Herger, le fil,

Il y a beaucoup de manières de rendre un tableau évolutif.

La macro du post #4 s'appuie sur la colonne A et la recherche de "S.TOTAUX".

Celle-ci s'appuie sur la dernière ligne contenant au moins une formule :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Long, n As Long
On Error Resume Next
lig = Cells.Find("=*", , xlFormulas, , xlByRows, xlPrevious).Row
If Err Then MsgBox "Pas de formule...": Exit Sub
n = Rows(lig).SpecialCells(xlCellTypeConstants).Count
If Err Then Exit Sub
Application.ScreenUpdating = False
Application.EnableEvents = False 'désactive l'action des événements
Rows(lig + 1).Insert
Rows(3).Copy Rows(lig + 1)
Rows(lig + 1).SpecialCells(xlCellTypeConstants).ClearContents
Application.EnableEvents = True
End Sub
Fichier joint.

A+
 

Pièces jointes

Re : Création automatique d'une ligne

Hello le monde
Un grand merci à toi Job75 !!! C'est tout à fait ce que je cherchais à faire . Super cette macro , la classe !!! . Ah quand on est doué, tout est possible en Excel ... Encore une fois bravo et merci . Bon week end .

EDIT1 : Question , afin d'éviter toute fausse manoeuvre ( oui ce fichier va être utilisé par quelqu'un d'autre que moi, et d'un niveau beaucoup plus faible que moi , c'est pas peu dire ... ) par quel moyen puis-je bloquer la ligne 2 ,celle qui sert de modèle, afin que ma collègue ne puisse pas l'effacer accidentellement ?? Merci encore . Avec la protection complète de la ligne, çà ne va pas

EDIT2 : Pourquoi lorsque je fais un "aperçu avant impression" est-ce si long ?? J'ai mon sablier qui tourne au moins pendant 15 secondes alors que mon tableau est vide . En fait tout est lent . Il doit y avoir dans cette feuille des restant de je ne sais pas quoi qui freine le tout . Peut-être pourrais-tu me l'épurer ?? J'ai la trouille de virer quelque chose qui ne faut pas . Merci

EDIT3 : Pardon mais c'est à l'utilisation que je découvre les quelques petits problèmes . Les totaux dans ma ligne "S.TOTAUX" ne semblent plus se faire .
 

Pièces jointes

Dernière édition:
Re : Création automatique d'une ligne

Bonjour sadicla,

1) Pour sécuriser la ligne modèle, on peut la placer dans la feuille masquée (VeryHidden) Ligne copiée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant
lig = Application.Match("S.TOTAUX", [A:A], 0)
If IsError(lig) Then MsgBox "Il faut ""S.TOTAUX"" en colonne A !", 48: Exit Sub
If Cells(lig - 1, 1) = "" Then Exit Sub
Application.EnableEvents = False 'désactive l'action des événements
On Error Resume Next 'sécurité
Rows(lig).Insert
Sheets("Ligne copiée").Rows(1).Copy Rows(lig)
Rows(lig).SpecialCells(xlCellTypeConstants).ClearContents
Application.EnableEvents = True
End Sub

Sub MasqueAfficheFeuille()
Sheets("Ligne copiée").Visible = xlVeryHidden 'masque la feuille
'Sheets("Ligne copiée").Visible = True 'affiche la feuille
End Sub
Nota : on peut essayer de supprimer la ligne 2... Elle se réinsère automatiquement...

Edit : IsError est quand même plus simple que Not IsNumeric...

2) Vos formules de la ligne "S.TOTAUX" n'étaient pas correctes, utiliser en B3 et suivantes :

Code:
=SOUS.TOTAL(9;DECALER(B$1;;LIGNE()-1))
3) Votre fichier était trop lourd car la feuille Métrés était vérolée : la Dernière cellule était en IL65536 !!!

Je n'ai pas trouvé d'autre solution que de la refaire complètement.

Fichier joint.

A+
 

Pièces jointes

Dernière édition:
Re : Création automatique d'une ligne

Re Job75
Tout d'abord un grand merci de me suivre comme çà, ç'est très sympa . Il y a quand même quelques problèmes de totaux qui restent .

EDIT : si c'est pas abuser , puis-je avoir comme format des nouvelles lignes ajoutées celui de mon exemple ligne 2
 

Pièces jointes

Dernière édition:
Re : Création automatique d'une ligne

Bonjour,

Je n'arrives pas à utiliser le code donné par Job75, de plus lorsque je renseigne une ligne il n'y a pas de création d'une nouvelle ligne.

Pouvez vous m'aider sur mon fichier?

Et comme je suis ignare sur les macros et les codes VBA je n'arrive pas à analyser pourquoi ils ne fonctionnent pas.
Est ce que vous connaissez un endroit pour apprendre les macros et VBA? Pour que déja je cherche seul dans un premier temps.
 

Pièces jointes

Re : Création automatique d'une ligne

Super Job75 comme çà c'est nikel . Une dernière petite chose, il faudrait que la ligne cachée servant de modèle soit mise en forme différemment, un peu comme mon exemple du dessus . Comment faire pour la faire apparaitre afin que je puisse modifier les différents formats ?? En tout cas bravo et merci .

EDIT : Désolé je me rends compte que je commence à devenir ch...t , donc si c'est le cas ne me réponds pas , tu en as déjà suffisamment fait , mais j'ai un dernier problème, j'applique des filtres sur les colonnes des "codes" en G et H et avant le filtre s'arrêtait avant la ligne "S.TOTAUX" de telle façon que j'avais les sous totaux remplis à chaque type de filtre appliqué.
 
Dernière édition:
Re : Création automatique d'une ligne

Re sadicla,

Effectivement le filtre automatique englobait systématiquement la ligne "S.TOTAUX" qui se masquait donc en filtrant.

Pour que ça ne se produise pas, il faut une ligne complètement vide au-dessus de "S.TOTAUX".

Et repositionner le filtre quand une ligne est ajoutée :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant, piece As Variant
lig = Application.Match("S.TOTAUX", [A:A], 0)
If IsError(lig) Then MsgBox "Il faut ""S.TOTAUX"" en colonne A !", 48: Exit Sub
If Cells(lig - 1, 1) = "" Then Exit Sub
Application.EnableEvents = False 'désactive l'action des événements
Me.AutoFilterMode = False 'désactive le filtre automatique
On Error Resume Next 'sécurité
piece = Cells(lig - 1, 1) 'mémorise
Rows(lig).Insert
Sheets("Ligne copiée").Rows(1).Copy Rows(lig - 1).Resize(2) 'colle sur 2 lignes
Cells(lig - 1, 1) = piece
Rows(lig).ClearContents
[A1:N1].Resize(lig - 1).AutoFilter 'replace le filtre automatique
Application.EnableEvents = True
End Sub

Sub MasqueAfficheFeuille()
Sheets("Ligne copiée").Visible = xlVeryHidden 'masque la feuille
'Sheets("Ligne copiée").Visible = True 'affiche la feuille
End Sub

Nota : bien sûr pour afficher la feuille Ligne copiée lancez la 2ème macro avec la 3ème ligne activée.

Fichier (3).

A+
 

Pièces jointes

Re : Création automatique d'une ligne

Re,

Ah il faut ajouter un test pour le cas où l'on supprime toutes les lignes (lig = 2) :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lig As Variant, piece As Variant
lig = Application.Match("S.TOTAUX", [A:A], 0)
If IsError(lig) Then MsgBox "Il faut ""S.TOTAUX"" en colonne A !", 48: Exit Sub
If Cells(lig - 1, 1) = "" Then Exit Sub
Application.EnableEvents = False 'désactive l'action des événements
Me.AutoFilterMode = False 'désactive le filtre automatique
On Error Resume Next 'sécurité
piece = Cells(lig - 1, 1) 'mémorise
Rows(lig).Insert
If lig = 2 Then 'si l'on a supprimé toutes les lignes...
  Sheets("Ligne copiée").Rows(1).Copy Rows(lig)
Else
  Sheets("Ligne copiée").Rows(1).Copy Rows(lig - 1).Resize(2) 'colle sur 2 lignes
  Cells(lig - 1, 1) = piece
End If
Rows(lig).ClearContents
[A1:N1].Resize(lig - 1).AutoFilter 'replace le filtre automatique
Application.EnableEvents = True
End Sub

Sub MasqueAfficheFeuille()
Sheets("Ligne copiée").Visible = xlVeryHidden 'masque la feuille
'Sheets("Ligne copiée").Visible = True 'affiche la feuille
End Sub
Fichier (4).

A+
 

Pièces jointes

- 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
10
Affichages
511
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
  • Question Question
Microsoft 365 Tableau
Réponses
24
Affichages
2 K
Réponses
5
Affichages
556
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…