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 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…
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
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).
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
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