Macro, insérer une ligne sur plusieurs onglets avec contenu texte

Bonjour,

Je sais que le sujet a déjà été abordé plusieurs fois mais je ne trouve pas d'éléments de réponse dans mon cas. Je vous explique mon casse tête...

J'ai dans mon fichier une première Feuille dans laquelle je souhaite insérer une nouvelle ligne tout en sachant que je souhaite que cette insertion se répercute dans ma feuille 2 (je sais qu'il est possible de le faire en sélectionnant les onglets, cependant cette méthode ne me conviens pas) .

Actuellement j'utilise ce code pour créer deux lignes au même niveau dans chaque feuille :

Sub AjoutLigne()
Dim i, NbLigne As Integer
    Application.ScreenUpdating = False
    NbLigne = InputBox("Nombre de ligne à inserer ? ", "Nombre de lignes à inserer")
    If IsNumeric(NbLigne) And NbLigne > 0 Then 'Verifie que la valeur entrée est un nombre superieur à 0
        For i = 1 To NbLigne
            Sheets("Feuil1").Activate
            Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert
            Cells(ActiveCell.Row + 1, ActiveCell.Column).Formula = ActiveCell.Formula
            Sheets("Feuil2").Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert
            Sheets("Feuil2").Cells(ActiveCell.Row + 1, ActiveCell.Column).Formula = ActiveCell.Formula
        Next
    End If
    End Sub

J'ai trouvé ce code en ma baladant sur le forum..

Dans l'idéal ce que je souhaite pouvoir faire à partir de la macro, c'est ouvrir une messagebox qui me permet de choisir l'emplacement de ma nouvelle ligne (au dessud de la 10 par ex), pouvoir écrire du contenu dans la colonne D de cette même ligne tout en conservant ma mise en forme (code couleur..) Sans oublier les répercussions au niveau de la feuille 2...

Je sais pas si cela est du domaine du faisable et si je suis assez clair, mais je n'ai rien trouver de bien concluant. Ci-joint mon excel test avec ma petite macro..

88ajoutligne.xlsm (19.81 Ko)

Merci de votre aide pour ceux et celles qui auraient des pistes

Salut Cleaner et bienvenue sur le forum

Tu trouveras ci-joint ton fichier modifié

Si sa ne répond pas à ta demande, reviens vers nous ^^

Sub AddRow()
Dim x As Long
x = InputBox("Merci de saisir le numéro de ligne où vous souhaitez en insérer une nouvelle  :")
Sheets(1).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets(2).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

Restant à dispo !

225pour-cleaner.xlsm (24.54 Ko)

Bonjour Juice,

Merci pour ton retour rapide c'est parfait. Cela me créer une ligne dans chaque feuille, cependant j'aimerai savoir si il est possible lorsque je renseignerai dans cette nouvelle ligne du texte dans une cellule (plus particulièrement la D dans mon fichier), si une "copie" peut se faire automatiquement dans la feuille 2... (ajout d'une box qui renseignerai la cellule de la colonne D nouvellement créer ?)

Ou éventuellement ajouter à la macro que lorsque la ligne est créer dans la feuille 2, la formule =Feuil1!D10 est ajouter dans la cellule D10 de la feuille 2. Cet exemple fonctionne si je demande à la macro de me créer une nouvelle ligne en 10 bien entendu..

Je cherche en réalité à ne modifier que la Feuille 1, sans toucher la feuille 2, mais cette dernière doit être identique à la première..

J'espère être assez clair,

Merci beaucoup pour ton aide

Re Cleaner,

Donc si j'ai bien compris, tu veux que tes modifications apportées à ta feuille 1 se fassent aussi sur ta feuille 2 ?

Si c'est le cas, tu trouveras ton fichier ci-joint modifié où tu a juste besoin d'écrire quelque chose dans une de tes cellules et cela se recopiera directement sur ta feuille 2.

Restant à ta dispo

376pour-cleaner.xlsm (25.78 Ko)

Re Juice,

Cela m'as l'air vraiment bien, j'essaie de l'intégrer à mon ficher mère dès ce soir pour voir si cela fonctionne sur ce dernier.

Encore merci pour ton aide

Cleaner

Re juice,

Tout est vraiment génial. Une dernière petite question, cela marche t'il si me deux feuilles ne se suivent pas, c'est a dire que la copie de la Feuille 1 se fait en Feuille 5 ? Comment fonctionne la copie, est-ce la macro ou une autre utilisation d'excel ?

Merci pour ton retour

Bonsoir Cleaner, Juice,

tu a écrit :

cela marche-t-il si mes deux feuilles ne se suivent pas, c'est-à-dire que la copie de la Feuille 1 se fait en Feuille 5 ?

Sheets(2).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

* dans cette instruction, Sheets(2) est pour la 2ème feuille du classeur

* pour la 5ème feuille du classeur, mettre Sheets(5)

Sheets(5).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

ça marche aussi avec :

Sheets(5).Rows(x).Insert 2, 0

dhany

Re- Cleaner !

Bonjour Dhany !

Salut le Forum !

Changer le Sheets(2) par Sheets("NomdemaFeuilleDeux") marche aussi très bien

Au moins tu pourra bouger tes feuilles sans avoir à t’inquiéter à modifier ton code par la suite ^^

Restant à dispo !

Re-bonjour,

Cala marche parfaitement sur le fichier que je réalise . Simple question, si je veux que les écritures a répercuter sur la feuille 2 ne concerne qu'une seule colonne, par exemple la colonne D, est-il possible dans la partie du code ci dessous de le renseigner ou faut-il développer un peu plus ?

Sheets(1).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets(2).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove

Mes deux feuilles ne sont pas totalement identiques, les quatre premières colonnes le sont, si je peux faire une macro pour chacune d'elle c'est encore mieux

Merci pour vos retours,

Cleaner

Bonjour Cleaner,

pour t'aider davantage, il faudrait ton classeur (sans données confidentielles) ; pour cela, tu peux utiliser le bouton « Ajouter des fichiers » qui est situé juste sous la fenêtre d'édition de ton post.

dhany

Re-

Édit : Je rejoins la remarque de Dhany!

Simple question, si je veux que les écritures a répercuter sur la feuille 2 ne concerne qu'une seule colonne, par exemple la colonne D

Sa va être ce code ci-dessous que tu va devoir modifier :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Long, y As Long
Dim Cell As String
Application.EnableEvents = False
If Target.Cells.CountLarge > 1 Then
    Application.EnableEvents = True
    Exit Sub
End If
x = Target.Row
y = Target.Column
Cell = Target.Value
Sheets(2).Cells(x, y) = Cell
Application.EnableEvents = True
End Sub

En rajoutant :

If Target.Column <> 4 Then
    Application.EnableEvents = True
    Exit Sub
End If

Comme sa, les modifications de ta colonne quatre seront les seules a êtres prisent en compte.

Mes deux feuilles ne sont pas totalement identiques, les quatre premières colonnes le sont, si je peux faire une macro pour chacune d'elle c'est encore mieux

J'ai pas compris cette demande la par contre :p

Restant à dispo

Bonjour dhany,

Tu trouveras en pièce jointe un nouveau fichier plus précis. Dans mon tableau sur la feuille 1, c'est la base de mes activités avec plusieurs niveaux, c'est à dire que si je souhaite ajouter une ligne en 10 pour une action de niveau 3 sur ma feuille principale, je souhaite que celle ci s'ajoute automatiquement à ma Feuille 4 qui comporte les mêmes colonnes de A à E. L'idée étant de pouvoir faire un bouton pour ajouter a chaque fois que nécessaire une nouvelle tache dans un certains niveau..

Ces cinq colonnes doivent être identiques, j'était arriver a ajouter simultanément deux lignes au même niveau dans chaque classeurs cependant recopier les données à l'identique en fonctions des différentes colonnes (de A à E, les autres ne doivent pas être concernées) n'est pas dans mes cordes...

Encore Merci

29pour-dhany.xlsx (14.93 Ko)

Re Juice

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Long, y As Long
Dim Cell As String
Application.EnableEvents = False
If Target.Cells.CountLarge > 1 Then
    Application.EnableEvents = True
    Exit Sub
End If
x = Target.Row
y = Target.Column
Cell = Target.Value
Sheets(2).Cells(x, y) = Cell
Application.EnableEvents = True
End Sub

En rajoutant :

If Target.Column <> 4 Then
    Application.EnableEvents = True
    Exit Sub
End If

Comme sa, les modifications de ta colonne quatre seront les seules a êtres prisent en compte.

Comment j'ajoute cela à la première partie de ma macro ?

Sub AddRow()
Dim x As Long
Application.EnableEvents = False
x = InputBox("Merci de saisir le numéro de ligne où vous souhaitez en insérer une nouvelle  :")
Sheets(1).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets(2).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Application.EnableEvents = True
End Sub

Je suis vraiment désolé mais je comprend strictement rien au VBA...

Merci

Re-

Merci de suivre la procédure ci-dessous :

1 - Sur ton fichier Excel, sur ton clavier Alt + F11

2 - Dans la liste à gauche tu double clic sur "Feuil1 (Feuil1)"

3 - Tu a un code qui apparaît, tu le supprime

4 - Tu copie / colle le code ci-dessous au même endroit :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Long, y As Long
Dim Cell As String
Application.EnableEvents = False
If Target.Column <> 4 Then
    Application.EnableEvents = True
    Exit Sub
End If
If Target.Cells.CountLarge > 1 Then
    Application.EnableEvents = True
    Exit Sub
End If
x = Target.Row
y = Target.Column
Cell = Target.Value
Sheets(2).Cells(x, y) = Cell
Application.EnableEvents = True
End Sub

Voilà

Restant à dispo

Juice, dhany,

Merci pour ce retour, cependant cela ne marche pas de mon côté, je ne sais pas pourquoi,. J'ai cependant trouver une autre manière de répondre à mes besoins en me servant de ton premier code, ainsi que d'un autre trouver sur le forum, tu le trouveras ci dessous :

Sub AddRow()
Dim x As Long, y As Long
Application.EnableEvents = False
x = InputBox("Merci de saisir le numéro de ligne où vous souhaitez en insérer une nouvelle  :")
Sheets(1).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets(2).Rows(x & ":" & x).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
End Sub

Sub copie()
Sheets("Nomenclature").Columns("B:F").Copy Sheets("Modélisation").Columns(1)
End Sub

Sub DeleteRow()
Dim x As Long, y As Long
Application.EnableEvents = False
x = InputBox("Merci de saisir le numéro de ligne où vous souhaitez supprimer  :")
Sheets(1).Rows(x & ":" & x).Delete Shift:=xlDown
Sheets(2).Rows(x & ":" & x).Delete Shift:=xlDown
End Sub

merci beaucoup pour votre aide, je ferme ce topic mais je n'hésiterai pas à revenir vers vous en cas de besoin. merci beaucoup pour votre aide

Cleaner

eh non, attend ! j'vais avoir quelque chose de super à t'proposer !

le fichier est déjà fait ; j'suis en train d'taper le mode d'emploi !

dhany

@Cleaner

je te retourne ton fichier modifié :

87exo-cleaner.xlsm (28.44 Ko)

* tu peux voir que "Feuil4" est inchangée ; va sur "Feuil1" ; la cellule active est E28

* si tu fais Ctrl e ça fera rien car c'est ni une bonne colonne, ni une bonne ligne

* va en A15 ; fais Ctrl e ; saisis aaa et valide

note que le texte en minuscules a été converti en majuscules

va voir le changement en feuille 4, puis reviens en feuille 1

* va en B16 ; fais Ctrl e ; saisis bbb et valide

changement en feuille 4 : idem ; oublie pas d'revenir !

surtout que ma macro s'exécute que sur "Feuil1"

* va en C17 ; fais Ctrl e ; saisis ccc et valide

un p'tit aller-retour en feuille 4 ?

* va en D18 ; fais Ctrl e ; saisis ddd et valide

bon, j'crois qu'tu connais l'chemin par cœur, maint'nant !

sauf que cette fois, la démo est terminée !


ainsi, il est impératif de sélectionner d'abord la bonne cellule avant de lancer la macro !

* la ligne de la cellule active doit être entre 2 et la dernière ligne utilisée (bornes incluses)

* la colonne de la cellule active doit être A à D (selon le niveau horizontal que tu veux utiliser)

* tu dois saisir un texte non vide (donc au moins un caractère)


Alt F11 pour voir le code VBA, puis revenir sur Excel

si besoin, tu peux demander une adaptation.

merci de me dire si ça te convient.

dhany

Bonjour dhany,

Excuse moi pour ce retour très tardif sur ton travail plus qu'exceptionnel, je l'ai intégrer à mon fichier en remplacement de l'ancienne version, ca fonctionne niquel

Merci beaucoup pour ton aide

Cleaner

Bonjour Cleaner,

j'viens tout juste de lire ton post ; j'suis bien content qu'tu sois revenu sur ton sujet !

merci pour ton retour et pour le ! j'suis ravi que tu aies autant apprécié ma solution !

merci aussi pour avoir passé le sujet en résolu ! bonne continuation !


Bonjour Juice,

merci pour le 1er ! j'suis bien content qu'ma solution t'ait plu à toi aussi !

dhany

Rechercher des sujets similaires à "macro inserer ligne onglets contenu texte"