Insérer / Copier une nouvelle ligne

Bonjour,

ci-joint une macro qui fonctionne mais pour laquelle je veux bien votre avis sur la façon dont elle est "codée".

Elle est extrêmement simple puisqu'il s'agit de dupliquer une ligne, marquer avec un "x" la ligne dupliquée puis d'en effacer un certain nombre de champs. Il faut également supprimer le "x" de la ligne qui a servie à la copie (en colonne B)

je débute en VBA et je veux bien votre retour pour prendre les bonnes habitudes de "programmation" (un bien grand mot vu mon niveau) : est-il possible de faire plus propre / plus simple / plus robuste ?

Merci

ci-dessous le code, identique à l'excel joint

Sub Inserer()
' insérer une ligne sous la sélection
If ActiveCell.Column = 2 Then
    ActiveCell.EntireRow.Copy
    ActiveCell.EntireRow.Insert xlShiftDown
    Selection.ClearContents
    ActiveCell.Offset(1, 3).ClearContents
    ActiveCell.Offset(1, 5).ClearContents
    ActiveCell.Offset(1, 7).ClearContents
    Range(ActiveCell.Offset(1, 13), ActiveCell.Offset(1, 31)).ClearContents
Else
  MsgBox "Sélectionner la colonne B de la ligne à dupliquer"
End If
End Sub

Bonjour,

En fait c'est assez compliqué de te répondre.

Le but du jeu c'est de supprimer au maximum les ActiveCell, Selection, Offset... Alors il resterait plus grand chose !

De même dès que tu auras un peu plus d'expérience, tu t'efforceras certainement d'éviter les tableaux que tu fais actuellement...

Il faut essayer de tendre vers quelque chose comme ce que je t'ai joint.

Eviter les formatages inutiles qui alourdisse ton tableau. Les insertions de ligne c'est pareil : C'est des idées de débutant !

Une mise en tableau comme j'ai fait est tout aussi lisible et n'entraîne aucun travail de préparation compliqué...

Par contre il n'est pas possible d'y insérer une ligne : Toute insertion de ligne se fait par le bas...

Libre à toi de trier comme tu veux après...

Dans le tableau joint j'ai supprimé la colonne 2 qui me parait inutile. Il faut sélectionner Colonne 1 puis cliquer sur le bouton...

Bon enfin... J'ai laissé le bouton et 1 ou 2 ActiveCell pour que tu sois pas trop dépaysé ! Mébon...

Alors, voilà quoi... Ecoute pour l'instant tu fais comme tu peux : Le meilleur moyen est celui qu'on maîtrise le mieux ! Et petit à petit tu te rendra compte que c'est plus facile de comprendre avec des variables et des N° de ligne et de colonnes qu'avec des Select.Offset...

(En plus c'est beaucoup lus rapide...) Si tu as beaucoup de données à traiter tu ne t'en sortira pas comme ça.

Bon j'aurais surement encore quelques commentaires à faire, mais ça suffira peut-être comme ça ? Pour une petit Vendredi de printemps...

A+

19damien2103.xlsm (60.91 Ko)

bonjour

salut Galopin01,

comme toi : mettre sous forme de tableau.

c'est fini. Pas besoin de VBA pour gérer une feuille déjà bien faite.

jmd a écrit :

Pas besoin de VBA

Aaaaaaaargh ! Tout de suite les grands mots ! Tout le monde se sert plus de brouettes... Dans les HLM, sans ascenseur, c'est pas cool !

Merci bcp pour votre retour, je ne savais pas que les tableaux étaient considérés comme des objets, effectivement ça peut être intéressant s'il y a du VBA derrière

En tout cas tu réponds à ma question en me montrant la façon de déclarer les variables, coder une boucle, merci, et en éliminant le plus possible les "offset" "activecell" qui ne font pas très pro/pas très robuste, je m'en doutais =]

pour ce qui est du tableau que j'ai proposé, je l'ai largement simplifié pour les besoins de la question et les "x" de la colonne B ou les couleurs d'entête ont bien une raison d'être. De plus la personne qui le remplit est une vraie quiche avec Excel donc il faut vraiment que je lui propose une trame très simple et qui ne la dépayse pas trop de ce qu'elle connait... bref y'a du facteur humain à considérer

message supprimé

galopin01 a écrit :

Bonjour,

A+

merci en tout cas

juste une remarque, c'est que le copier/coller déconne lorsqu'on utilise la macro avec des colonnes masquées ET un filtre de colonne activé

Rechercher des sujets similaires à "inserer copier nouvelle ligne"