macro insertion lignes dans deux feuilles

macro insertion lignes dans deux feuilles - VB/VBA/VBS - Programmation

Marsh Posté le 10-08-2009 à 19:49:44    

Bonjour,
Je débute en VBA et j'ai des difficultés à faire une macro.
 
Ma macro consiste à ajouter des lignes simultanément dans deux feuilles.
 
L'uilisateur appuie sur un bouton ,une boite de dialogue apparait demandant combien de ligne l'utilisateur désire ajouter.
L'utilisateur tape un chiffre et ce chiffre correpond au nombre de lignes insérés après la cellule active(avec copie des formules de la cellule active).
 
Jusque là tout va bien.
 
J'aimerais modifier ma macro en voulant ajouter le même nombre de lignes (avec copie de la formule de la cellule active ) en feuille 9 puis en feuille 11 (avec copie des formules)au même endroit.
Pouvez vous m'aider?
 
Je vous envoie la macro que j'ai commencé:
Sub Macro2()
 
Application.ScreenUpdating = False
Application.DisplayAlerts = False
 
On Error Resume Next
Dim I, NbLigne As Variant
NbLigne = InputBox("How many rows do you want to add? ", "Nombre de lignes à inserer" )
For I = 1 To NbLigne
Feuil9ligne = Val(ActiveCell.Row)
Feuil11ligne = Val(ActiveCell.Row)
ligne1 = ligne + 1
ad = "A" & ligne & ":DA" & ligne
 
cellule = "A" & ligne1
 
    Feuil9.Cells(l, 1).Select
      Selection.EntireRow.Insert
      Feuil11.Cells(l, 1).Select
      Selection.EntireRow.Insert
       
    Range(ad).Select
    Selection.Copy
    Range(cellule).Select
    ActiveSheet.Paste
     Range(ad1).Select
Next I
 
End Sub

Reply

Marsh Posté le 10-08-2009 à 19:49:44   

Reply

Marsh Posté le 11-08-2009 à 09:06:40    

Essaye plutôt d'utiliser directement le .formula, comme là :

Code :
  1. Sub Macro2()
  2. Dim i, NbLigne as integer
  3. Application.ScreenUpdating = False
  4. NbLigne = InputBox("How many rows do you want to add? ", "Nombre de lignes à inserer" )
  5. if isnumeric(nbligne) and nbligne > 0 then 'Verifie que la valeur entrée est un nombre superieur à 0
  6.  
  7.     for i = 1 to nbligne
  8.         sheets("Feuil9" ).activate
  9.         Cells(activecell.Row + 1, activecell.Column).EntireRow.Insert
  10.         Cells(activecell.Row + 1, activecell.Column).formula = activecell.Formula       
  11.         sheets("Feuil11" ).activate
  12.         Cells(activecell.Row + 1, activecell.Column).EntireRow.Insert
  13.         Cells(activecell.Row + 1, activecell.Column).formula = activecell.Formula             
  14.     next
  15. end if
  16. end sub
 

Je ne suis, par contre, pas sur de savoir si tu veux que les formules, ainsi que la position de départ, dans la feuille 11 soient prit à partir de la cellule active de la feuille 11 ou bien de la feuille 9...


Message édité par Moonschild le 11-08-2009 à 09:07:18

---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Marsh Posté le 11-08-2009 à 14:04:01    

A partir de la cellule active de la feuille 9

Reply

Marsh Posté le 11-08-2009 à 14:06:56    

Bonjour,
Je te remercie pour ton aide.
Quand j'essaie ta macro ,un message apparait :
"l'indice ne correspond pas à la selection"

Reply

Marsh Posté le 11-08-2009 à 14:11:48    

J'ai modifié légèrement le code pour coller à ce que tu demandes, donc il prend comme point de départ la cellule active dans la feuille 9 et insère des lignes en dessous, et dans la feuille 11 au même endroit, avec la même formule que la cellule active.
 

Code :
  1. Sub Macro2()
  2. Dim i, NbLigne As Integer
  3. Application.ScreenUpdating = False
  4. NbLigne = InputBox("How many rows do you want to add? ", "Nombre de lignes à inserer" )
  5. If IsNumeric(NbLigne) And NbLigne > 0 Then 'Verifie que la valeur entrée est un nombre superieur à 0
  6.     For i = 1 To NbLigne
  7.         Sheets("Nom_de_ta_feuille_9" ).Activate
  8.         Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert
  9.         Cells(ActiveCell.Row + 1, ActiveCell.Column).Formula = ActiveCell.Formula
  10.         Sheets("Nom_de_ta_feuille_11" ).Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert
  11.         Sheets("Nom_de_ta_feuille_11" ).Cells(ActiveCell.Row + 1, ActiveCell.Column).Formula = ActiveCell.Formula
  12.     Next
  13. End If
  14. End Sub


 
Testé et approuvé :)
PS : oublie pas de changer "nom_de_ta_feuille_"... par le nom des feuilles correspondantes ;)


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Marsh Posté le 11-08-2009 à 14:42:29    

De plus j'ai essayé ta macro dans deux feuilles elle insére le nombre de ligne sur l'onglet 9 mais pas sur l'onglet 11.
Sur l'onglet 9 elle insére le nombre de ligne choisit par l'utilisateur et elles insére des lignes en plus.
J'aimerais que les fomules évoluent aussi car l'onglet 9 fait référence à une autre feuille.
Par exemple si en onglet 9,la cellule active est F8 :
dans cette cellule ,la formule est =feuille 1!F8 + feuille2!F8
Si j'ajoute deux lignes en dessous de cette cellule,les formules des deux lignes ajouté doivent être :
F9=feuille 1!F9+ feuille2!F9
F10=feuille 1!F10+ feuille2!F10
 
 
Merci
 

Reply

Marsh Posté le 11-08-2009 à 15:04:36    

Essaye ceci
 

Code :
  1. Sub Macro2()
  2. Dim i, j, NbLigne As Integer
  3. Application.ScreenUpdating = False
  4. NbLigne = InputBox("How many rows do you want to add? ", "Nombre de lignes à inserer" )
  5. If IsNumeric(NbLigne) And NbLigne > 0 Then 'Verifie que la valeur entrée est un nombre superieur à 0
  6.     For i = 1 To NbLigne
  7.         Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert
  8.         Sheets("Nom_Feuille_11" ).Cells(ActiveCell.Row + 1, ActiveCell.Column).EntireRow.Insert
  9.     Next
  10.     i = ActiveCell.Row
  11.     j = ActiveCell.Column
  12.     Selection.AutoFill Destination:=Range(ActiveCell, Cells(ActiveCell.Row + NbLigne, ActiveCell.Column)), Type:=xlFillDefault
  13.     Sheets("Nom_Feuille_9" ).Range(ActiveCell, Cells(i + NbLigne, j)).Copy
  14.     Sheets("Nom_Feuille_11" ).Activate
  15.     Cells(i, j).Select
  16.     Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
  17.         SkipBlanks:=False, Transpose:=False
  18. End If
  19. End Sub


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Marsh Posté le 11-08-2009 à 15:17:56    

Là ça me met erreur 400.
Et en fait ,j'aimerais recopier toutes les formules de la ligne de la cellule active sur les lignes insérées.
Dans la feuille 9,il y a des formules différentes de celles de la feuille 11.
Chaque feuilles doit garder ses propres formules ,c'est juste le point de départ,le nombre de lignes ajouté,l'action de copie coller formules qui sont les mêmes.
Je suis désolé ,je manque de précision dans ma demande...
 
Merci.

Reply

Marsh Posté le 11-08-2009 à 15:41:54    

Peux-tu préciser le texte de l'erreur et quelle ligne est surlignée, car ce code fonctionne chez moi...
 
Par contre, je suis désolé, je ne comprend pas ce que tu désires. J'espère que ce que je t'ai donné pourra quand même t'aider...


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Marsh Posté le 11-08-2009 à 15:51:36    

Je ne veux pas la copie que des formules de la cellule active mais la copie de toutes les formules de la ligne de la cellule active.
Merci tu m'a bien aidé.

Reply

Marsh Posté le 11-08-2009 à 15:51:36   

Reply

Marsh Posté le 11-08-2009 à 16:00:00    

kro24 a écrit :

Je ne veux pas la copie que des formules de la cellule active mais la copie de toutes les formules de la ligne de la cellule active.
Merci tu m'a bien aidé.


Dans ce cas, essaye en changeant

Code :
  1. Selection.AutoFill Destination:=Range(ActiveCell, Cells(ActiveCell.Row + NbLigne, ActiveCell.Column)), Type:=xlFillDefault
  2.     Sheets("Nom_Feuille_9" ).Range(ActiveCell, Cells(i + NbLigne, j)).Copy


par

Code :
  1. Selection.EntireRow.Select
  2. Selection.AutoFill Destination:=Rows(i & ":" & i + NbLigne), Type:=xlFillDefault
  3. Sheets("Nom_Feuille_9" ).Rows(i & ":" & i + NbLigne).Copy


---------------
Si Le Travail C'est La Santé, Donnez Le Mien A Quelqu'un De Malade
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed