Excel - Création auto d'une nouvelle ligne

Bonjour,

Dans un cadre professionnel, je cherche à créer la chose suivante dans une feuille excel, ce qui je présume doit obligatoirement passer par une macro.

Cette macro devrait :

  • Aller à la première ligne vide disponible
  • Créer une nouvelle ligne en recopiant les formules + la mise en forme de la ligne supérieure + les données de validation (menus déroulants), en fait tout sauf le contenu en lui même.

Merci d’avance à qui pourra m’apporter son aide !

Bonne journée.

Oui, il faut qu tu passes par une macro
Une solution simple

  • tu te positionnes sur la dernière ligne remplie
  • tu fais copier
  • tu colles (la ligne entière) sur la première ligne vide
  • tu effaces ensuite le contenu des cellules “contenu”

Salut,

Merci pour ta réponse rapide. Par contre si je fais cela, est-ce que lorsque je vais actionner la macro, la nouvelle ligne va d’office aller se mettre sous la dernière ligne existante ? Je suis nul en macro, mais j’ai l’impression que dans ce cas, je devrai obligatoirement aller préalablement me positionner sur la dernière ligne remplie avant de de lancer la macro, sous peine de voir ma ligne nouvelle créée n’importe où (en l’occurrence sous la cellule active). Je me trompe peut-être ?


En fait je viens de faire l'essai en copiant la ligne 24 vers la ligne 25 et en faisant comme tu m'as dit.

Seul hic : quand j’actionne la macro, et quel que soit l’endroit où je me trouve, la nouvelle ligne se crée systématiquement à la ligne 25… Je pense qu’il doit manquer un petit truc…

tu peux donner ton code ?

Est-ce cela qu’il te faut ?

Sub Soldes_créer_nouvelle_ligne()

’ Soldes_créer_nouvelle_ligne Macro
’ Macro recorded 18/08/2008 by Juanmanuelfangio


Range(“A23:F24”).Select
Selection.FillDown
Range(“A24:D24,F24”).Select
Range(“F24”).Activate
Selection.ClearContents
Range(“A25”).Select
End Sub

Tu es sûr que cette macro te crée une ligne ?
Et où se trouve l’action de copie de la ligne 24 qui servira à remplir la ligne 25 ?

Oui cela me crée bien une ligne. Le fill Down A23 : F24 je pense.

C’est de la macro enregistrée, je ne vois pas très bien ce qu’elle fait
Mieux vaut travallier par copier/coller

sub ajoutLigne()
Range(“A1”).end(xldown).select ’ en supposant que tes données commencent sur la ligne 1
selection.entirerow.copy selection.offset(1)
end sub

Houla alors ça y est, je perds le fil (désolé mais je ne suis pas très doué question macros).

Effectivement il s’agit d’une macro enregistrée, mais sur base de copier-coller durant l’enregistrement. Ce n’était pas ça que je devais faire ? Comment dois-je m’y prendre si je n’utilise pas l’enregistreur ?

Moi, quand je fais ma macro enregistrée, il me donne

sub Macro1()
Rows(“6:6”).Select
Selection.Copy
Range(“A7”).Select
ActiveSheet.Paste
end sub

Mais avec ce code, tu ne pourras pas évoluer en fonction de la place de la dernière ligne.
Prends plutôt celui que je t’ai donné plus haut : tout est dedans, positionnement automatique, puis copier/coller

OK j’essaie et je te tiens au courant.

Merci de ton aide en tout cas.

Salut gcc :slight_smile:

J’espère que tu es toujours dans les parages…

J’ai essayé ta macro. Ca marche nickel, sauf que la ligne est recopiée telle quelle.

Il manque donc encore l’étape “supprimer le contenu des cellules colonnes A-B-C-D et F” (la E est conservée car formule). Je rappelle que je veux uniquement effacer le contenu des cellules mais conserver mise en forme et tout le reste.

Si je pouvais abuser de ta bonté, j’aurais aussi le besoin suivant : il faudrait que l’activation de cette macro s’achève par une insertion de nouvelle ligne en dessous (en effet j’ai un second tableau sous le premier et je voudrais que l’écart entre les 2 tableaux soit maintenu et que mon tableau du haut n’aille pas empiéter sur mon tableau du bas).

Encore merci pour ton aide précieuse.

Dans ce cas, il faut faire une insertion à la place de la copie
Ca change un petit peu la fonction

Sub ajoutLigne()
Range(“A1”).End(xlDown).Select ’ en supposant que tes données commencent sur la ligne 1
Selection.EntireRow.Copy
Selection.Insert Shift:=xlDown
End Sub

Ca tu peux le trouver par toi même
L’aide de Visual Basic sous excel est très bien faite pour ca (il suffit d’appuyer sur F1)
Et puis, il y a toujours google …
Il y a plusieurs méthodes, mais dans ton cas c’est sans doute ClearContents qui sera le plus patique.

Si tu bloques, donne la portion de code que tu auras écrite qui ne marche pas
Bon courage
Edité le 20/08/2008 à 07:40

Salut jcc,

l’insertion de ligne fonctionne nickel, un grand merci à toi.

Pour l’autre je vais donc essayer de trouver moi même, et je t’appelerai une nouvelle fois au secours si ça coince :slight_smile:

En tout cas un grand merci pour ton aide précieuse.

Bonne journée.

Re-salut,

J’y suis arrivé en farfouillant un peu sur divers sites ! J’ai notamment découvert cette page qui m’a été bien utile :

www.conseil-creation.com…

Bref voici mon code final :

Sub ajoutLigne()
Range(“A1”).End(xlDown).Select
Selection.EntireRow.Copy
Selection.Insert Shift:=xlDown
[A65536].End(xlUp).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 1).Select
Selection.ClearContents
ActiveCell.Offset(0, 2).Select
Selection.ClearContents
ActiveCell.Offset(0, -5).Select
End Sub

Il y avait peut-être plus simple mais ça fonctionne…

Encore merci pour ton aide jcc, tu m’as bien aidé à faire mes premiers pas en macros, je vais maintenant essayer d’approfondir !

A+

Oui, c’est exactement ça, mais tu peux simplifier ton code.
Sachant que ton insertion place sélection en début d’avant dernière ligne :

Sub ajoutLigne()
Range(“A1”).End(xlDown).Select
Selection.EntireRow.Copy
Selection.Insert Shift:=xlDown
selection.offset(1).Select 'descendre à la cellule en dessous, donc à la dernière ligne
Range(Selection, selection.offset(0,3)).ClearContents ’ cellules A à D
Selection.offset(0,5).ClearContents ’ cellule F
End Sub

OK effectivement c’est plus simple ! J’ai donc remplacé mon code par le tien.

Encore merci.