Problème de macro qui ne fonctionne plus quand on insère des lignes

Bonjour,

Dans un tableau, je veux, à l’aide d’un bouton associé à une première macro (inserer_ligne1), insérer des lignes supplémentaires dans mon tableau :

lgn = Range("A17").End(xlDown).Row + 1

Range("A" & lgn & ":EE" & lgn).Insert Shift:=xlDown

Range("A17:EE17").Copy

Range("A" & lgn).PasteSpecial xlPasteFormats

Range("A" & lgn) = Replace(Range("A" & lgn - 1), Split(Range("A" & lgn - 1), " ")(1), lgn - 15)

Range("A" & lgn).Select

Ca fonctionne.

Plus bas, j’ai un deuxième tableau à la fin duquel je souhaite aussi, à l’aide d’un bouton associé à une macro (inserer_ligne2), ajouter des lignes :

lgn = Range("A38").End(xlDown).Row + 1

Range("A" & lgn & ":EE" & lgn).Insert Shift:=xlDown

Range("A38:EE38").Copy

Range("A" & lgn).PasteSpecial xlPasteFormats

Range("A" & lgn) = Replace(Range("A" & lgn - 1), Split(Range("A" & lgn - 1), " ")(1), lgn - 29)

Range("A" & lgn).Select

Ca fonctionne sauf si j’ai inséré plusieurs lignes dans le 1er tableau.

Car me 2ème macro se réfère à des cellules qui ne sont plus nécessairement dans mon 2ème tableau si j’ajoute trop de lignes dans le 1er…

Savez-vous comment régler ce problème ?

Si vous avez la solution, pouvez-vous l’adapter afin que je puisse insérer plusieurs macros identiques en descendant dans ma feuille ?

Merci par avance.

macro3

Bonjour OlivierLO,

Le soucis pour ta deuxième macro c'est ton point de départ ligne 38

Si tu ajoutes des lignes au dessus tu vas finir par décaler ton point de départ jusqu'à ce qu'il ne soit plus valable comme repère

Pour régler ce problème tu peux nommer la cellule A38 "Repere" par exemple

Et remplacer

lgn = Range("A38").End(xlDown).Row + 1

Par

lgn = Range("Repere").End(xlDown).Row + 1

Comme ça ton repère reste dynamique avec l'ajout de lignes au dessus

Bonjour

le début de ton tableau 2 change à chaque insertion de ligne dans le tableau 1

il suffit qu'au début de la macro inserer_ligne2 rechercher la ligne de début du tableau

a tester en ne modifiant presque pas ton code

A plus sur le forum

Bonjour à tous,

Un essai ...

Une autre version ...

J'ai ajouté un champ nommé en A17 (Tarif1) et en A31 (Tarif2).

Ainsi, quand il y aura insertion de lignes, l'adresse de ces cellules s'adaptera.

J'ai dû modifier dans le "Module2"

Sub inserer_ligne1()
'
' inserer_ligne1 Macro
'
    lgn = Range("Tarif1").End(xlDown).Row + 1
    Range("A" & lgn & ":EE" & lgn).Insert Shift:=xlDown
    Range("A" & Range("Tarif1").Row & ":EE" & Range("Tarif1").Row).Copy
    Range("A" & lgn).PasteSpecial xlPasteFormats
    Application.CutCopyMode = False
    Range("A" & lgn) = "Date " & Right(Range("A" & lgn - 1), Len(Range("A" & lgn - 1)) - 5) + 1
    Range("A" & lgn).Select
End Sub

Idem pour Sub inserer_ligne2() dans le "Module4"

Particulièrement pour cette macro, remarque que j'ai modifié la méthode de nommer les "Date" en colonne A car, leurs numéros ne suivaient pas correctement.

ric

Bonjour à tous,

@papyg >> as-tu remarqué que les numéros de date, dans la 2e partie, ne suivent pas correctement ?

ric

@ric : parfait, cela fonctionne parfaitement Un immense merci !

ric

@ric

Bonjour,

Serait-il possible de modifier légèrement la macro communiquée :

lgn = Range("Tarif1").End(xlDown).Row + 1

Range("A" & lgn & ":EE" & lgn).Insert Shift:=xlDown

Range("A" & Range("Tarif1").Row & ":EE" & Range("Tarif1").Row).Copy

Range("A" & lgn).PasteSpecial xlPasteFormats

Application.CutCopyMode = False

Range("A" & lgn) = "Date " & Right(Range("A" & lgn - 1), Len(Range("A" & lgn - 1)) - 5) + 1

ActiveCell.Offset(0, 1).Select

afin qu'elle copie toute la ligne de la référence "Tarif1" et la colle en bas du tableau (et pas uniquement de la ligne A à la ligne EE) ?

Merci beaucoup

Bonjour,

Module2 > Sub inserer_ligne1()

Remplace : Range("A" & Range("Tarif1").Row & ":EE" & Range("Tarif1").Row).Copy

Par : Range("A" & Range("Tarif1").Row).EntireRow.Copy

Idem pour l'autre macro ...

Module4 > Sub inserer_ligne2()

Remplace : Range("A" & Range("Tarif2").Row & ":EE" & Range("Tarif2").Row).Copy

Par : Range("A" & Range("Tarif2").Row).EntireRow.Copy

ric

RIC,

Merci beaucoup

Mais, comme j'ai des lignes cachées (L31 à 35), quand j'insère plus de 4 lignes avec la macro "ajouter_date1", les lignes insérées ne sont plus visibles et la macro ne fonctionne plus correctement.

Dans la macro :

lgn = Range("Date1").End(xlDown).Row + 1

Range("A" & lgn & ":EE" & lgn).Insert Shift:=xlDown

Range("A" & Range("Date1").Row).EntireRow.Copy

Range("A" & lgn).PasteSpecial xlPasteFormats

Application.CutCopyMode = False

Range("A" & lgn) = "Date " & Right(Range("A" & lgn - 1), Len(Range("A" & lgn - 1)) - 5) + 1

Range("A" & lgn).Select

J'ai eu l'idée de remplacer :

Range("A" & lgn & ":EE" & lgn).Insert Shift:=xlDown

par

EntireRow.Insert Shift:=xlDown

Mais cette formule ne fonctionne pas.

Une idée ?

Cf le fichier après modifications.

Bonjour,

Cette fois-ci, je vais passer mon tour et laisser la chance aux autres forumeurs de t'aider.

A+

ric

OK

Parce que vous n'avez pas la réponse ou parce que c'est la pratique du forum ?

Et merci encore pour les autres aides !

Bonjour,

Les remords sont une vilaine chose...

La macro du Module2 > Sub inserer_ligne1() a été modifiée pour gérer les lignes masquées lors de l'ajout de lignes.

J'ai créé un champ nommé sur la cellule "Date1" du "2ième tarif" afin de coder la chose.

J'ai profité de l'occasion pour supprimer la tonne de "Select" et "Sélection" dans les autres macros. Les "Sélect" proviennent de l'enregistrement automatique de macros.

Ils sont à bannir tant que faire se peut. Ils ralentissent le traitement considérablement.

J'ai aussi modifié Sub sup_categorie1() ... Sub ajout_categorie2() ...

Sub ajout_categorie3() afin de gérer les 3 ou 5 lignes masquées/démasquées sous la cellule "Date1" du "2ième tarif".

Espérant le tout conforme.

ric

Rrhhhhooooo merci !

Je regarde tout ça ce soir et terminerai lundi.

Un premier coup d'oeil me permet de constater que ça fonctionne !

Merci infiniment.

Je continuerai à regarder plus tard.

Comment vous remercier ? Je vous invite à déjeuner ?

Juste des petits points à reprendre dans les macros "ajouter des catégories". de quoi occuper mes maigres compétences lundi...

Rechercher des sujets similaires à "probleme macro qui fonctionne quand insere lignes"