Génération d'1 ligne supplémentaire en bas d'1 tableau (dimension variable)

Bonjour les champions du code,

Je débute tout juste avec VBA et j'ai besoin de vos lumières

Je cherche à créer une macro qui ajoute une ligne en dessous de la dernière ligne d'un tableau quelle que soit le nombre de lignes de ce tableau. Et que cette macro s'incrémente toute seule pour qu'à l'appel suivant elle s’exécute automatiquement en dessous de la nouvelle ligne. J'imagine qu'il faut que je passe par une variable, mais ne sais pas comment m'y prendre. Voici la macro que j'ai enregistré, mais elle s’exécute toujours du même endroit. Petite précision j'ai enregistré cette macro en ayant sélectionné la cellule B9. Voici le code et je joins le fichier en PJ.

image

D'avance merci.

Catroun

Bonjour,

Normalement, pas besoin de macro pour ça, il faut utiliser un tableau structuré. Il gère automatiquement le redimensionnement du tableau lorsqu'on y ajoute des données à la suite.

Cdlt,

Bonsoir,

Ok je vais gratter de ce côté là ! Merci

PS : Je n'ai jamais entendu parlé de "Tableau structuré"

Merci encore.

2tableaux.xlsm (23.47 Ko)

bonjour,

Il y a 2 manières de"voir les choses", soit :

La manière traditionnelle, le tableau est une simple liste, avec ou sans en-têtes

Une manière plus récente :

Le tableau comporte au moins des "en-têtes" de colonnes qui caractérisent le contenu futur de ces colonnes et...

Au moins une ligne (Qui au départ peut être vide)

Ces possibilités sont résumées dans le classeur joint. Leur utilisation et la manière de programmer diffère selon le but à atteindre.

Mais là c'est à toi de dire quel est le but à atteindre :

Le but est-il de t'initier à la programmation ou juste de faire un tableau qui va s'étendre tout seul ?

A+

Bonjour,

Les deux mon capitaine. Formation et utilité.

J'ai développé depuis plusieurs années un tableau de gestion qui comporte pas moins de 2500 lignes aujourd'hui et une centaine de colonnes.

Je suis régulièrement obligé (plusieurs fois par mois) de rajouter des lignes en bas de mon tableau, de dupliquer les formules (ce qui en principe incrémente en même temps la numérotation des lignes.

Je voudrai donc en profiter pour m'alléger cette lourdeur ! C'est pourquoi j'ai pensé que VBA pourrait résoudre ce problème.

Mais je suis de toutes les façons intéressé pour apprendre, car je suis sûr que je pourrais développer d'autres outils intéressants avec des fonctions méconnues de Excel (VBA, Tableau structuré que je ne connais pas non plus).

Envie d'apprendre, quoi !

Merci de ta réponse

Catroun

Essaie :

Sub AjoutLigne()
Dim iLR& 'dernière ligne
iLR = Range("B" & 2 ^ 20).End(3).Row
Rows(iLR).Insert
    Range("B" & iLR - 1 & ":G" & iLR - 1).AutoFill Range("B" & iLR - 1 & ":G" & iLR + 1)
    Range("B" & iLR + 1).Select
End Sub

A+

Bonjour Catroun,

Les tableaux structurés sont une fonctionnalité d'Excel permettant de sécuriser et gérer plus facilement les données. La propagation des formules est automatique. Tant que possible, il faut essayer de mettre les données sous forme de tableau structuré (Accueil/Mettre sous forme de tableau).

Cdlt,

Bonsoir et merci 3GB,

Je testerai cela ASAP

Bonne soirée

Catroun

Pas de quoi.

Bonsoir,

Merci à vous deux 3GB et Galopin : J'ai implanté le code de Galopin dans mon énorme fichier (2500 lignes x 122 colonnes), en adaptant certains paramètres relatifs à la référence des colonnes (largeur du tableau) de A:DR au lieu de B:G de l'exercice. Et en créant un bouton pour lancer ce code.

J'ai bien retenu le conseil par rapport aux tableaux structurés.

Nickel ! Encore merci.

A+

Catroun

Bonjour,

Une proposition avec tableau structuré. A adapter !?

Cdlt.

Option Explicit

Dim lo As ListObject

Public Sub AddRowInTable()
    Set lo = Range("Données").ListObject
    With lo
        If .InsertRowRange Is Nothing Then
            .ListRows.Add
        End If
    End With
End Sub

Public Sub ResetTable()
Set lo = Range("Données").ListObject
    With lo
        If Not .DataBodyRange Is Nothing Then
            .DataBodyRange.Delete
        End If
    End With
End Sub

Merci Jean Eric

Je regarde cette solution dans les jours à venir

Bonne nuit

Catroun

Bonsoir,

Après avoir implanté le code de Galopin, je me suis livré à une série de tests. Et voilà ce que je constate :

A - Même si j'ai des données en dessous de la ligne 10, il est impératif que la colonne A reste vide en dessous de cette ligne pour que la macro fonctionne. Ce qui me parait normal, vu que la procédure s'appuie sur le dernier numéro trouvé pour détecter "la dernière ligne".

B - Lorsque j'ai deux lignes vides (ex : 11 et 12) en fin de tableau, tout va bien quand je lance la macro. Une ligne s'ajoute et les formules sont dupliquées correctement. Et tout ce qui est en dessous de la ligne 10 suit et s'incrémente également : C'est parfait, et cette subtilité doit être conservée bien sûr.

C - Lorsque je n'ai qu'une ligne vide (ex : 11) en fin de tableau, les ennuis commencent : la ligne 12 est créée, 11 et 12 affichent alors le contenu saisi de la ligne 10 en incrémentant ce contenu si il s'agit d'une saisie chiffrée, ou en répétant ce contenu si il n’est pas incrémentable (texte). Cette situation n'est pas souhaitable.

D - Lorsque je n'ai aucune ligne vide (ce qui est un cas de figure réaliste), les lignes 9, 10, et 11 (créée) affichent le contenu saisi de la ligne 9 (en écrasant la saisie de la ligne 10 qui était la dernière du tableau). Cette situation n'est pas souhaitable non plus.

D'une façon générale, je me dis qu'il doit être possible de ne dupliquer/incrémenter que les cellules contenant des formules, sans dupliquer/incrémenter les données qui ont été saisies, en procédant par plages désignées dans le code. Dans l'exemple que je joins à ce post, cela correspondrait donc aux colonnes K, P à Q, S à X (colonnes grisées), alors que les zones de saisie (colonnes B à J, L à O, et R) sont restées sans coloration. Ce n'est qu'un exemple, mais j'essayerai d'extrapoler les lignes de code et les plages correspondant à mon fichier réèl (2500 ligne 122 colonne dont l'exemple fourni en PJ n'est qu'un extrait très simplifié.

Finalement le besoin peut se résumer ainsi :

- Même si la dernière ligne est saisie, ajouter une ligne et dupliquer/incrémenter uniquement les cellules contenant des formules, sans dupliquer/incrémenter les saisies (entrées manuelles), en partant de la dernière ligne avant ajout (pas de l'avant dernière).

Galopin : Est-ce que tu aurais la gentillesse de te pencher sur cette petite amélioration stp

D'avance je t'en remercie.

Ci-joint fichier exemple, extrait de mon fichier de suivi financier.

Catroun

Rechercher des sujets similaires à "generation ligne supplementaire bas tableau dimension variable"