Macros pour insérer des lignes à la prochaine ligne vide

Bonjour Forum,

Je souhaite créer 2 macros pour m'éviter des manipulations fastidieuses et sources d'erreurs.

Malheureusement, je n'ai pas les connaissances suffisantes en VBA pour y arriver...

La 1ère macro doit chercher la prochaine ligne vide sous la cellule active, puis insérer une copie de la ligne 3.

Par exemple, si la cellule active = C11, Excel insère une copie de la ligne 3 au niveau de la ligne 12 (qui deviendra la 13).

La 2ème doit elle aussi chercher la prochaine ligne vide sous la cellule active, puis insérer une copie des les lignes 3 et 4.

Par exemple, si la cellule active = D13, Excel insère une copie des lignes 3 et 4 au niveau de la ligne 17 (les actuelles lignes 17 et 18 deviendront les 19 et 20).

Dans les 2 cas, les formules qui font référence à une cellule au-dessus ou au-dessous ne doivent pas se "dérégler" lors de l'insertion de nouvelles lignes...

(actuellement, quand j'insère manuellement une ligne, les formules des lignes adjacentes se modifient...)

Quelqu'un pourrait-il m'aider ?

Merci !!!

71liste.zip (33.98 Ko)

Salut,

Je ne suis pas certain d'avoir tout bien compris Par contre si c'est bien ça, tu devrais arriver à créer ta deuxième macro sur la base de celle-ci, non ?

Cordialement.

155liste-v1.zip (55.11 Ko)

Merci beaucoup pour ta réponse.

¢a marche en effet comme j'espérais, à 2 nuances près :

- ça me va bien d'insérer une ligne nouvelle quelle que soit la colonne ou le contenu de la cellule active

→ si je comprends bien, il suffit de supprimer les 3 lignes :

If ActiveCell = "" Then Exit Sub
If ActiveCell.Column <> 3 Then Exit Sub
If ActiveCell = Range("C3") Then Exit Sub

Mais du coup, je peux insérer une nouvelle ligne quand la cellule active est située dans une ligne vide, et ça, je voudrais l'empêcher, mais je ne sais pas écrire le code pour qu'Excel vérifie si la ligne est vide.

Enfin, j'ai remarqué que la macro beugue à la 1ère exécution (elle insère une ligne vide...?)

- les formules des lignes au-dessus de la ligne insérée sont modifiées lors de l'insertion d'une nouvelle ligne.

Il faudrait qu'elles restent inchangées pour que le tableau fonctionne

Ça je ne sais pas faire non plus.

→ ça je ne sais pas le corriger

Enfin, je vais peut-être te paraître nul, mais je ne sais pas écrire la 2ème macro à partir de la 1ère...

J'espère que je n'abuse

Re,

Voici un nouvel essai. Si c'est bon cette fois, je vais regarder demain ou après-demain pour l'autre macro (mais pour cette autre macro, tu veux copier la ligne 3 et 4 ?????).

Cordialement.

93liste-v2.zip (50.42 Ko)

Merci pour ta réponse.

Oui, ça marche !

Il reste juste un bug : si on lance la macro sur la ligne 8, son contenu est effacé et remplacé par des formules.

C'est parce que le document "FICHE DE SUIVI" ne comprend qu'un seul indice.

Du coup je me dis qu'il y aurait une stratégie permettant d'éviter ce problème et d'éviter d'avoir à réécrire les formules à chaque insertion de ligne.

Je prends l'exemple de l'attestation d'assurance. Pour insérer un nouvel indice :

1- je clique n'importe où dans les lignes 10 ou 11

2- Excel cherche la 1ère ligne vide sous les lignes de ce document. Il trouve la ligne 12

3- Excel insère une copie de la ligne 4 sous la ligne 12

4- Excel colle une copie de la ligne 3 à la place de la ligne 12

Du coup, les formules sont préservées sans avoir à les recréer et sans effacement de données.

Mais là encore, je ne sais pas faire...

...et aussi, pour que ça marche tout-à-fait, il faut remplacer la formule en D3 par :

=SI(ET(LC="";L(-1)C="");"NOM DU DOC ???";L(-1)C)

(en simulant le fonctionnement de la macro, je me suis aperçu que sinon, le titre du document disparaissait)

Salut,

Selon moi c'est plus facile de ne pas copier cette ligne 3 et de placer plutôt tout ce que tu désires dans la nouvelle ligne créée par la macro. J'ai donc supprimé le copier-coller de la ligne 3 dans ce nouveau code et j'ai effacé les données de cette ligne 3.

Cette nouvelle version n'efface plus les informations de la première ligne d'un groupe (par exemple la ligne '8). J'ai basé mon code sur le fait qu'il y a toujours une ligne vide au dessus de chaque groupe (par exemple ligne 7, ligne 9, ligne 12, etc.).

Je n'ai pas compris de quel "Nom de doc" tu parles. Peux-tu simuler une nouvelle ligne et indiquer manuellement ce que tu désires comme formule dans la colonne D ? Pourquoi n'as-tu pas toi-même placé une telle formule dans les lignes modèles fournies ?

Très bizarrement, lorsque j'enregistre le fichier, ça modifie à chaque fois les lignes 14 et 15 en alternance. Je présume qu'il y a une macro là derrière, mais vu le nombre énormes de macros que tu as dans ce fichier, je n'ai pas trop cherché à comprendre.

A te relire.

39liste-v3.zip (50.69 Ko)

Merci de persévérer à m'aider !

Je pense qu'il vaut mieux continuer sur la voie "copie de la ligne 3" car à terme, mon fichier comportera des tas de formules et de MFC, sur une trentaine de colonnes.

Ça parait difficile de passer par du VBA pour tout reconstituer à chaque insertion d'un nouvel indice, d'où ma préférence pour du copier-coller d'une ligne comprenant déjà formules et formats (plus évolutif aussi).

J'espère que c'est jouable pour toi.

J'ai fait les modifs que tu évoquais (formule dans la ligne D). A mes yeux c'était un point mineur car mes connaissances en VBA m'auraient au moins permis de rectifier cette formule.

(NOM DU DOC c'est juste le message qui s'affiche quand on crée un nouveau document qui n'a pas encore de nom. Il y a une astuce au niveau du format de nombre pour que ce message s'affiche)

J'ai aussi effacé toutes les macros du classeur, pour être sûr qu'elles n'interfèrent pas.

Le pb des lignes 14 et 15 ne venait pas de là, mais d'une référence circulaire qui donnait alternativement 2 valeurs.

J'ai modifié ça.

Merci encore.

29liste-v4.zip (40.99 Ko)

Salut,

Comme tu ne veux pas accepter ma proposition de travailler sans copier-coller, je n'ai pas trouvé d'autre solution - afin de ne pas modifier certaines formules présentes dans la dernière ligne (par exemple la 12) lors de l'insertion de la nouvelle ligne (par exemple la 13) - que de leur enlever provisoirement le signe = (afin que se ne soient plus des formules), d'insérer la nouvelle ligne (par exemple la 13) par copier-coller puis de placer à nouveau le signe = devant chacune des formules provisoirement "neutralisées" (par exemple de la ligne 12).

Si tu utiliseras plus de colonnes par la suite, il faudra donc de toute façon modifier la macro en fonction.

Autrement est-ce que la solution serait - après avoir inséré la nouvelle ligne (13) - de copier-coller la ligne 3 sur la nouvelle dernière ligne (13) comme tu le demandes, mais également sur la nouvelle avant-dernière ligne (12) afin que les formules soient correctes sans devoir passer par mon "truc" d'enlever puis de remettre le signe = ??? En d'autres termes, est-ce que les formules de la ligne 3 sont valables pour toutes les lignes autre que la première ligne d'un "groupe" ?

Cordialement.

33liste-v5.zip (41.59 Ko)

Merci pour ta réponse.

Je vais directement à ce que tu décris à la fin de ta réponse, qui me va bien :

  • oui, les formules sont conçues pour fonctionner pour toutes les lignes
  • le ne suis pas sûr qu'il soit nécessaire de coller aussi sur la nouvelle avant-dernière ligne.

J'ai tenté d'illustrer les étapes dans le fichier joint.

Si je reprends ton exemple, je pense qu'on peut insérer une copie de la ligne 4 au-dessous de la ligne 13 (= étape 1)

Puis on peut remplacer la ligne 13 par une copie de la ligne 4 (= étape 2)

Toutes les formules sont conservées et fonctionnelles.

Du moins je crois

J'espère que tu auras le courage de me suivre jusque-là.

En tous cas, merci pour ton aide, car je serais bien incapable de manier le VBA à ce niveau.

85liste-v6.zip (42.56 Ko)

Bonsoir,

Le fichier Liste_V5 que je t’ai fourni n’est selon moi pas un bon exemple et j’en suis désolé. Sa ligne 12 est en effet une ligne «nouvellement créée» (ou créée par la macro et non encore travaillée) et ne correspond pas à tes exemples de base. Il n’y a notamment pas de date dans la colonne 7 (ou G).

Tu as repris cette ligne pour ta démonstration dans le fichier Liste_V6, mais tout d’abord je ne sais pas comment seraient traitées les dates de la colonne 7 dans un cas tel que celui que tu veux démontrer et en plus je n’ai malheureusement pas tout compris à ta démonstration.

Regarde donc le fichier Liste_V7 ci-joint. C’est toujours mon code du fichier Liste_V5, mais sur la base de tes premiers exemples (il n’y a pas de ligne avec une cellule vide dans la colonne 7 ou G).

Selon moi, mon code avec mon petit «truc » fonctionne bien. Penses-tu vraiment qu’il serait possible de le remplacer par ton idée de copier la ligne 4, puis la ligne 3, etc. ? Peux-tu éventuellement refaire ta démonstration sur la base des tes premiers exemples, en gardant en tête cette colonne 7 ?

A te relire.

31liste-v7.zip (41.08 Ko)

Merci d'avoir persévéré !!!

J'ai décidé de prendre le taureau par les cornes et de me lancer dans la création du code.

Comme c'est la 1ère fois et que je n'ai pas du tout les bases, j'ai pris des bouts de code à droite à gauche.

Du coup, mon code ressemble un peu à Frankenstein, mais à la fin, c'est comme dans le film : il marche, et son créateur n'est pas peu fier.

(ça m'a pris 3 heures !)

Donc j'ai bidouillé (le mot est faible) une macro qui fonctionne tant bien que mal (suivant la méthode que j'avais essayé de te décrire, sans y arriver).

La macro fait le job : elle insère une ligne avec formules et formats à la fin d'un groupe de lignes, sans perturber les formules autour, mais j'ai bien conscience qu'il doit y avoir des façons plus propres de programmer.

En plus, à la fin, je ne sais pas déselectionner la ligne active.

J'aurais donc besoin d'encore un peu d'aide pour peaufiner les détails...

En tous cas, merci.

Et aussi pour la macro pour créer un nouveau doc, qui donc va insérer une copie des lignes 3 et 4 sous la ligne vide qui suit un bloc de lignes.

44liste-v8.zip (41.40 Ko)

Bonjour,

As-tu seulement jeté un coup d'œil à mon travail ou as-tu décidé qu'il était mauvais avant de le voir ?

Bonne continuation.

Pardon si je t’ai froissé. Il n’y avait ni négligence ni mépris de ma part.

Simplement, en attente de réponses sur le Forum, j’avais entrepris de trouver une solution avec mes faibles moyens.

Je n’ai vu ta réponse qu’au moment de poster la mienne.

Comme :

  • tu disais que tu n’avais pas tout compris à ma démonstration
  • ton code m’a laissé penser qu’il serait compliqué pour moi de le faire évoluer avec la complexification du tableau
  • tu me demandais si je pensais qu’il serait possible de le remplacer par ton idée de copier la ligne 4, puis la ligne 3, etc.
  • tu me proposais de refaire ma démonstration,
j’ai pensé que le mieux serait de t’envoyer mon code, qui montrait que c’était possible de procéder comme ça (même si la mise en œuvre est laborieuse).

Suite à ta réponse j’ai fait plus de tests sur ton dernier code. Il fonctionne bien, et je peux m’en contenter si je t’ai épuisé (dans ce cas, je tâcherai de le bricoler en cas d’évolution significative de ma feuille).

Merci en tous cas d’avoir résisté à toutes ces péripéties.

Rechercher des sujets similaires à "macros inserer lignes prochaine ligne vide"