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..
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 !
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...
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
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
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
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é :
* 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 !
Bonjour Juice,
merci pour le 1er ♡ !
dhany