Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1073 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  macro insertion lignes dans deux feuilles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

macro insertion lignes dans deux feuilles

n°1913684
kro24
Posté le 10-08-2009 à 19:49:44  profilanswer
 

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

mood
Publicité
Posté le 10-08-2009 à 19:49:44  profilanswer
 

n°1913815
Moonschild
Posté le 11-08-2009 à 09:06:40  profilanswer
 

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
n°1913972
kro24
Posté le 11-08-2009 à 14:04:01  profilanswer
 

A partir de la cellule active de la feuille 9

n°1913974
kro24
Posté le 11-08-2009 à 14:06:56  profilanswer
 

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

n°1913976
Moonschild
Posté le 11-08-2009 à 14:11:48  profilanswer
 

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
n°1913991
kro24
Posté le 11-08-2009 à 14:42:29  profilanswer
 

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
 

n°1913995
Moonschild
Posté le 11-08-2009 à 15:04:36  profilanswer
 

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
n°1914006
kro24
Posté le 11-08-2009 à 15:17:56  profilanswer
 

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.

n°1914034
Moonschild
Posté le 11-08-2009 à 15:41:54  profilanswer
 

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
n°1914046
kro24
Posté le 11-08-2009 à 15:51:36  profilanswer
 

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é.

mood
Publicité
Posté le 11-08-2009 à 15:51:36  profilanswer
 

n°1914053
Moonschild
Posté le 11-08-2009 à 16:00:00  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  macro insertion lignes dans deux feuilles

 

Sujets relatifs
problème d'insertion[Résolu] Macro - Importation .csv en UTF-8
Création fichier log retraçant le déroulement d'une macroProblème dans une macro devant faire un tri
Catcher une alerte dans une macro excelMacro Excel : tableau dynamique
Bouton Excel associé à une macro[PHP]Insertion d'une image dans SQL Serveur
[RESOLU] [VBS] copier uniquement les lignes filtrées sous Excelproblème de filtre vba macro Excel
Plus de sujets relatifs à : macro insertion lignes dans deux feuilles


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR