Espace membre :
flechePublicité

17 messages
Filtrer ok

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.
 
 
Contacter le membreVoir profil
gcc
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...
 
 
Contacter le membreVoir profil
gcc
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("A2424,F24").Select
Range("F24").Activate
Selection.ClearContents
Range("A25").Select
End Sub
 
 
Contacter le membreVoir profil
gcc
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.
 
 
Contacter le membreVoir profil
gcc
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 ?
 
 
Contacter le membreVoir profil
gcc
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

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.
 
 
Voir profilContacter le membre
gcc
il faudrait que l'activation de cette macro s'achève par une insertion de nouvelle ligne en dessous
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

Il manque donc encore l'étape "supprimer le contenu des cellules colonnes A-B-C-D et F"
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

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+
 
 
Contacter le membreVoir profil
gcc
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.
 
 
     
17 messages
Filtrer ok
Vous devez être connecté pour écrire un message !

BE GEEK ! Avec Clubic Logo

flechePublicité