Ce forum est maintenant fermé, seule cette archive statique reste consultable.
  FORUM Rue-Montgallet.com
  Programmation
  VB - VBA

  Macro pour inserer une ligne et recopier des formules sous Excel

 Page :   1  2
Page Précédente
Auteur Sujet :

Macro pour inserer une ligne et recopier des formules sous Excel

n°11418
jerry
Profil : Jeune recrue
Posté le 10-02-2005 à 16:54:12  
 

Bonjour a tous,
 
 
 
J'aurais besoin d'une macro pour faire la chose suivante:
 
 
Je voudrais une macro qui insere une ligne entre les lignes 2 et 3 et qui recopie la formule contenue dans l'ex cellule C3
 
 
  ¦        A        ¦        B        ¦        C        ¦
  ¦-----------------¦-----------------¦-----------------¦
1 ¦        1        ¦        2        ¦      =A1*B1     ¦
  ¦-----------------¦-----------------¦-----------------¦
2 ¦        2        ¦        2        ¦      =A2*B2     ¦
  ¦-----------------¦-----------------¦-----------------¦
3 ¦                 ¦                 ¦      =A3*B3     ¦
  ¦-----------------¦-----------------¦-----------------¦
 
 
Insertion d'une ligne entre les lignes 2 et 3  
 
  ¦        A        ¦        B        ¦        C        ¦
  ¦-----------------¦-----------------¦-----------------¦
1 ¦        1        ¦        2        ¦      =A1*B1     ¦
  ¦-----------------¦-----------------¦-----------------¦
2 ¦        2        ¦        2        ¦      =A2*B2     ¦
  ¦-----------------¦-----------------¦-----------------¦
3 ¦                 ¦                 ¦                 ¦
  ¦-----------------¦-----------------¦-----------------¦
4 ¦                 ¦                 ¦      =A4*B4     ¦
  ¦-----------------¦-----------------¦-----------------¦
 
 
Recopie de la formule contenue dans l'ex cellule C3
 
 
  ¦        A        ¦        B        ¦        C        ¦
  ¦-----------------¦-----------------¦-----------------¦
1 ¦        1             ¦        2             ¦      =A1*B1          ¦
  ¦-----------------¦-----------------¦-----------------¦
2 ¦        2        ¦        2        ¦      =A2*B2     ¦
  ¦-----------------¦-----------------¦-----------------¦
3 ¦                 ¦                 ¦      =A3*B3     ¦
  ¦-----------------¦-----------------¦-----------------¦
4 ¦                 ¦                 ¦      =A4*B4     ¦
  ¦-----------------¦-----------------¦-----------------¦
 
 
J'ai trouve une macro qui insere la ligne comme je veux mais je ne sais pas comment recopier la formule.
 
Sub InsertRow()
  Dim irow As Long, vcurrent As String, i As Long
 '// find last used cell in Column A
  irow = Cells(Rows.Count, "A" ).End(xlUp).Row
 '// get value of  that cell in Column A (column 1)
  vcurrent = Cells(irow, 1).Value
 '// rows are inserted by looping from bottom
  Rows(irow).Insert
End Sub
 
 
Merci beaucoup.
 
 
Jerry


Message édité par jerry le 10-02-2005 à 16:58:50
mood
Pub
Posté le 10-02-2005 à 16:54:12  
 

n°11434
galopin01
Profil : Membre
Posté le 11-02-2005 à 10:31:14  
 

bonjour,
Après ...
Rows(irow).Insert  
Cells(irow, 3).FormulaR1C1 = Cells(irow - 1, 3).FormulaR1C1
A+

n°11455
jerry
Profil : Jeune recrue
Posté le 11-02-2005 à 14:09:29  
 

Merci pour ton aide GALOPIN01.
 
Est il possible de modifier ta formule pour que la macro recopie toutes les formules de la ligne du dessous et pas seulement de la colonne 3?
 
Sinon j'ai trouve une macro qui fait presque ce que je voudrais a un detail pres.
 
Je voudrais que cette macro detecte automatiquement quelle est la derniere ligne utilisee dans la colonne A (comme dans la macro du premier message).
Voici la macro que j'ai trouve:
 
 
Sub InsertRowsAndFillFormulas()
 
   Dim x as long  
   ActiveCell.EntireRow.Select  'So you do not have to preselect entire row
   If vRows = 0 Then
    vRows = Application.InputBox(prompt:= _
      "How many rows do you want to add?", Title:="Add Rows", _
      Default:=1, Type:=1) 'Default for 1 row, type 1 is number
    If vRows = False Then Exit Sub
   End If
 
 
   Dim sht As Worksheet, shts() As String, i As Integer
   ReDim shts(1 To Worksheets.Application.ActiveWorkbook. _
       Windows(1).SelectedSheets.Count)
   i = 0
   For Each sht In _
       Application.ActiveWorkbook.Windows(1).SelectedSheets
    Sheets(sht.Name).Select
    i = i + 1
    shts(i) = sht.Name
 
    x = Sheets(sht.name).UsedRange.Rows.Count 'lastcell fixup
 
    Selection.Resize(rowsize:=2).Rows(2).EntireRow. _
     Resize(rowsize:=vRows).Insert Shift:=xlDown
 
    Selection.AutoFill Selection.Resize( _
     rowsize:=vRows + 1), xlFillDefault
 
    On Error Resume Next    'to handle no constants in range -- John McKee 2000/02/01
    ' to remove the non-formulas -- 1998/03/11 Bill Manville
    Selection.Offset(1).Resize(vRows).EntireRow. _
     SpecialCells(xlConstants).ClearContents
   Next sht
   Worksheets(shts).Select
End Sub


Message édité par jerry le 11-02-2005 à 14:10:22
n°11460
galopin01
Profil : Membre
Posté le 11-02-2005 à 21:15:38  
 

bonsoir,
...
Rows(irow).Insert  
y = ActiveSheet.UsedRange.Columns.Count
For i = 1 To y
Cells(irow - 1, i).FormulaR1C1 = Cells(irow, i).FormulaR1C1
Next
...
 
Ok ?


Message édité par galopin01 le 13-01-2007 à 18:54:15
n°11472
jerry
Profil : Jeune recrue
Posté le 14-02-2005 à 13:13:50  
 

Merci beaucoup pour ton aide, ca marche impec.
 
Jerry

n°18171
nono le go​lfeur
Profil : Jeune recrue
Posté le 09-01-2007 à 14:33:31  
 

Merci pour les posts précédents et cette Macro très utile.
 
La seul difficulté que je rencontre c'est que si la cellulle selectionée ne se trouve pas sur la dernière ligne alors la ligne s'insere n'importe ou ....
Par exemple si après avoir remplis une ligne, par automatisme vous selectioner une cellule en desous de vos tableau, la ligne se rajoute et ne sert à rien   :heink:  :heink:  :heink:  
 
Merci d'avance ,
 


---------------
When there is a will, There is a way, Go ON !!!
 
NoNo
n°18178
galopin01
Profil : Membre
Posté le 13-01-2007 à 18:53:13  
 

Bonjour,
je vois pas bien le rapport avec la ligne active sauf si tu as fais une mayonnaise avec la deuxième macro.  
Essaie ça :

Code :
  1. Sub InsertRow()
  2. Dim iR&, i&, k&
  3. iR = Cells(Rows.Count, "A" ).End(xlUp).Row
  4. Rows(iR).Insert
  5. k = ActiveSheet.UsedRange.Columns.Count
  6. For i = 1 To k
  7. Cells(iR, i).Formula = Cells(iR + 1, i).Formula
  8. Next
  9. End Sub


Bon c'est perfectible, mais c'est un point de départ. Le résultat est le même quel que soit la ligne active : insérer une ligne avant la dernière ligne.et y mettre les mêmes formules.
A+


Message édité par galopin01 le 13-01-2007 à 18:57:47
n°18993
gelen75
Profil : Jeune recrue
Posté le 02-10-2007 à 09:27:19  
 

Bonjour,
 
j'ai essayé d'adapter les conseils si dessus afin de créer ma propre macro mais je n'arrive pas à la faire fonctionner. Mes connaissances en VBA sont faibles et je voudrais créer une macro qui excécute la chose suivante:
 
Insérer une ligne en reprenant les formules présentes dans les colonnes.  
Exemple:
 
 
  ¦        A        ¦        B        ¦        C            ¦  
  ¦-----------------¦-----------------¦-------------------------¦  
1¦        1        ¦        2        ¦      =A1*B1      ¦  
  ¦-----------------¦-----------------¦-------------------------¦  
2¦        2        ¦        2        ¦      =A2*B2      ¦  
  ¦-----------------¦-----------------¦-------------------------¦  
n¦                 ¦                 ¦      =An*Bn        ¦  
  ¦-----------------¦-----------------¦-------------------------¦  
 
 
je veux insérer une ligne dans le tableau ci dessus, pour choisir l'emplacement de l'insertion de la ligne je selectionne un ligne et la ligne s'inserrerait au dessus (normalement).
 
Par contre je veut que dasn la colonne ou j'ai une fonction RECHERCHEV() la formule soit reprise automatiquement dans la ligne insérée.
 
D'avance je vosu remercie de votre aide.

n°18994
galopin01
Profil : Membre
Posté le 02-10-2007 à 12:08:52  
 

bonjour,
supprimé...
A+


Message édité par galopin01 le 02-10-2007 à 12:24:42
n°18995
galopin01
Profil : Membre
Posté le 02-10-2007 à 12:22:21  
 

Sorry je viens de comprendre...
Je peux avoir un aperçu du RECHERCHEV ?
A+


Message édité par galopin01 le 02-10-2007 à 12:25:54
n°19061
Artarof
Profil : Jeune recrue
Posté le 22-11-2007 à 15:02:43  
 

Bonjour à tous
 
J'ai plus ou moins la même question que Jerry mis à part que je voudrais choisir l'endroit ou inserer ma nouvelle ligne (avec mes formules)  dans mon tableau.
 
Enfin je souhaiterai que cette macro s'effectue sur toutes les feuilles simultanément.
 
Voila j'espère avoir été clair et je vous remercie par avance.

n°19065
galopin01
Profil : Membre
Posté le 23-11-2007 à 10:49:54  
 

bonjour,
Au lieu de  
iR = Cells(Rows.Count, "A" ).End(xlUp).Row
mettre
...
iR = ActiveCell.Row
puis faire une boucle sur toute les feuilles avant d'insérer...
 
k = ActiveSheet.UsedRange.Columns.Count
For x = 1 to Worksheets.Count
For i = 1 To k
Worksheets(x).Rows(iR).Insert
Worksheets(x).Cells(iR, i).Formula = Worksheets(x).Cells(iR + 1, i).Formula
Next
Next
End Sub
 
Même observation : c'est rudimentaire, à perfectionner (si les formules sont horizontales ça ne pose pas de problème, s'il y a des références verticales préférer les plages nommées ou dynamique sinon attention aux $ $)
 
Nota : non vérifié, codé à la hache et avec le pied ! Essayez plutôt de comprendre la logique et adaptez !
A+


Message édité par galopin01 le 23-11-2007 à 10:51:51
n°19066
Artarof
Profil : Jeune recrue
Posté le 23-11-2007 à 17:08:26  
 

Bonjour à tous
Tout d'abord je tiens à remercier Galopin01 pour son aide précieuse et rapide
J'ai réussi à faire exactement ce que je voulais.  
Mais car il y a souvent un "MAIS" c'est maintenant que je me rend compte que c'est pas super pratique, désolé...
En fait serait il possible d'insérer toujours la même ligne (une ligne type placée tout à la fin de ma feuille par exemple)  tout en choisissant toujours l'endroit ou insérer cette ligne?
Encore merci

n°19067
galopin01
Profil : Membre
Posté le 23-11-2007 à 17:35:38  
 

ça, c'est pas vraiment une riche idée...  :non:  
Tu peux bien la placer ou tu veux sauf "tout à la fin de la feuille"
Je te laisse réfléchir à pourquoi !
 
ça ne change rien à la macro... sauf que
si x = TonNuméroDeLignePréférée
alors :
 
Worksheets(x).Cells(iR, i).Formula = Worksheets(x).Cells(x , i).Formula  
 
A+


Message édité par galopin01 le 23-11-2007 à 17:36:06
n°19068
Artarof
Profil : Jeune recrue
Posté le 23-11-2007 à 18:23:50  
 

Salut
Merci pour ton aide mais je suis novice et je lutte un peu...
J'ai réfléchi et pour la dernière ligne j'ai compris pourquoi.
 
En fait j'ai fait 2 macros:
 
la première étant la tienne:
 
    Sub nouvelleligne()
    Dim iR&, i&, k&
    iR = ActiveCell.Row
    Rows(iR).Insert
    k = ActiveSheet.UsedRange.Columns.Count
    For i = 1 To k
    Cells(iR, i).Formula = Cells(iR + 1, i).Formula
    Next
    End Sub

 
Et la deuxième pour appliquer la première à toutes les feuilles:
 
 
 Sub nouvellelignesurchaquefeuille()
Dim sh As Worksheet
 
 
 
   For Each sh In Sheets
        sh.Select
        nouvelleligne
    Next sh
End Sub

 
Mais je n'arrive pas à insérer  
[]Worksheets(x).Cells(iR, i).Formula = Worksheets(x).Cells(x , i).Formula[/] dans ma macro
 
Voila après j'arrête de t'embêter, promis!

n°19069
galopin01
Profil : Membre
Posté le 23-11-2007 à 19:05:38  
 

désolé, je t'ai dis je code avec le pied : x était déjà utilisé pour worksheets(x) donc y fallait prendre une autre variable (xyz) pour TonNuméroDeLignePréférée :
Worksheets(x).Cells(iR, i).Formula = Worksheets(x).Cells(xyz , i).Formula
A+


Message édité par galopin01 le 23-11-2007 à 19:05:58
n°19070
Artarof
Profil : Jeune recrue
Posté le 23-11-2007 à 20:16:44  
 

ok merci  
je vais essayer de comprendre ou et comment insérer cette formule dans ma macro.
Encore merci pour ton aide et bonne continuation.

n°19071
galopin01
Profil : Membre
Posté le 23-11-2007 à 20:37:10  
 

ça c'est si tu veux continuer à utiliser tes 2 macros :
 
Sub nouvelleligne2()  
Dim iR&, i&, j&, k&  
iR = ActiveCell.Row  
j = TonNuméroDeLignePréférée
Rows(iR).Insert  
k = ActiveSheet.UsedRange.Columns.Count  
For i = 1 To k  
Cells(iR, i).Formula = Cells(j , i).Formula  
Next  
End Sub  
 
Pour regrouper les 2 macros en 1 :
 
Sub nouvelleligne1()  
Dim iR&, i&, j&, k&, x%
iR = ActiveCell.Row  
j = TonNuméroDeLignePréférée
k = ActiveSheet.UsedRange.Columns.Count  
For x = 1 to Worksheets.Count  
For i = 1 To k  
Worksheets(x).Rows(iR).Insert  
Worksheets(x).Cells(iR, i).Formula = Worksheets(x).Cells(j, i).Formula  
Next  
Next  
End Sub  
 
C'est plus clair ?
A+

n°19072
Artarof
Profil : Jeune recrue
Posté le 24-11-2007 à 14:05:00  
 

Salut
En fait si j'utilise ta macro, elle insère plusieurs lignes dans ma première feuille et pas de lignes dans mes autres feuilles.
Par contre j'ai remodifié mes macros comme ça et ça marche:
 
 
Sub nouvelleligne()
   
    Dim iR&, i&, k&
    iR = ActiveCell.Row
    Rows(iR).Insert
    k = ActiveSheet.UsedRange.Columns.Count
    For i = 1 To k
    Cells(iR, i).FormulaR1C1 = Cells(1, i).FormulaR1C1
    Next
    End Sub

 
et
 
 
Sub nouvellelignesurchaquefeuille()
Dim sh As Worksheet
 
 
   For Each sh In Sheets
        sh.Select
        nouvelleligne
    Next sh
End Sub

 
Par contre il faut toujours que je sélectionne toutes mes feuilles avant de la lancer...
Mais bon au final ça marche alors encore un grand merci Galopin01 pour ton aide.

n°19076
galopin01
Profil : Membre
Posté le 24-11-2007 à 22:57:59  
 

Bonsoir,  
j'ai pas revérifié, mais je persiste à penser que tu n'as pas trop gratté sur ma réponse de 23-11-2007 à 20:37:10 mébon si ça te suffit comme ça...
A+


Message édité par galopin01 le 24-11-2007 à 22:58:45
n°19470
Lili Poupe​tte
Profil : Jeune recrue
Posté le 05-03-2009 à 08:21:49  
 

Salut,
Bon je trouve que cette macro d'insertion de ligne est vraiment génial, malheureusement vu que je n'y comprend pas grand chose je n'arrive pas à rectifier une petite erreur. La macro reprend bien la formule précédente ou suivante sauf que les cellules ne suivent pas.  
 
Si j'insere la ligne 29 par exemple je me retrouve avec la formule mais les cellules de la ligne de reprise SI(H30<>"";G30*H30*I30;"" ).
'
Dim iR&, i&, k&
iR = ActiveCell.Row
Rows(iR).Insert
k = ActiveSheet.UsedRange.Columns.Count
For i = 1 To k
Cells(iR, i).Formula = Cells(iR + 1, i).Formula
Next
End Sub
 
Je pense que la bidouille serai peut-être de rendre anonyme mes cellules de formule mais comment faire??
 
Merci d'avance

n°19471
Lili Poupe​tte
Profil : Jeune recrue
Posté le 05-03-2009 à 11:57:26  
 

C bon g trouvé!!! lol

n°19720
Chris3211
Profil : Jeune recrue
Posté le 22-01-2010 à 21:45:07  
 

Comment faire pour insérer une ligne dans un tableau? Num_Parcelle  
 
  A                              B
Nature_Local Nom_Propriétaire
437  
186  
186  
186  
435  
187  
187  
Si A1 = A2 insérer une ligne entre A1 et A2 Si A1 différent de A3 alors il compare A3 a A4 ect Dans la colone A il y a à peu pres 500 lignes
Merci de votre aide!

n°19721
galopin01
Profil : Membre
Posté le 22-01-2010 à 22:45:49  
 

Bonjour,
Question incompréhensible,
Veuillez faire un effort d'explication et éviter de squatter des sujets anciens.
A+

n°19723
Chris3211
Profil : Jeune recrue
Posté le 24-01-2010 à 08:09:32  
 

J'explique de nouveau! :)  
Je travaille sur de la numérotation de maisons dans des rues. J'ai donc un classeur avec deux feuilles de calcul.  
 
la première feuille comporte les champs suivants
 
Numéro de parcelle          Nom des propriétaires
150                                  dupont
120                                  durant
120                                  Pierre
19                                    charlotte
28                                      robert
76                                       alexandre
 
 
la deuxieme feuille comporte les champs suivants
 
Numéro de parcelle          nom des propriétaires
150
120
19
 
Je voudrais faire une macro qui fait les actions suivantes
 
1) qui compare les numéro de parcelle de la feuille un et ceux de la feuille deux.
Qd les numéros sont identique alors la macro recopie les noms du propriétaires qui correspond et qui est ds la feuille 1 dans le nom du propriétaire ds la feuille 2
 
 
2) Dans la feuille 1 un s'il y a plusieurs fois le mm numéro de parcelle alors la macro insere une ligne dans la feuille 2, recopie le numéro de parcelle et le deuxieme non de propriétaire.
 
MERCI! J'espère que c'est plus clair!

n°20056
benemma
Profil : Jeune recrue
Posté le 17-01-2011 à 15:11:13  
 

bonjour
 
J'ai un peu le même besoin!!!
 
Je souhaite grâce à un bouton inséré dans une feuille excel, automatiser l'insertion d'une ligne mais en incrémentant les formules
 
 A    B        C                  
1   = A1 * B1  
2   = A2 * B2  
3                       =somme(C1:C2)
 
Je souhaite donc que lorsque j'appuie sur le bouton, une ligne s'insère automatiquement avant la ligne 3, avec comme formule en C3 : =A3 * B3
 
 A    B        C                  
1   = A1 * B1  
2   = A2 * B2  
3   = A3 * B3  
3                       =somme(C1:C3)
 
Merci d'avance pour votre aide.
 
Cordialement

n°20151
galopin01
Profil : Membre
Posté le 20-05-2011 à 11:53:48  
 

Bien que la dernière question remonte à quelques temps déjà (C'est l'inconvénient de poser des questions sur un sujet déjà ancien...)
je donne néanmoins une réponse car cette question revient souvent et elle peut être résolue rapidement d'une manière générique.
Soit une formule "compliqué" en C1...
Une fois que vous avez mis au point cette formule : Nommez là
Imaginons que vous avez mis au point cette formule pour C1 :
= A1+C1
Pour Excel 2003 à partir de cette cellule faites Insertion / Nom / Définir
Dans les version ultérieure (Vista, W7... Onglet Formules / Définir un nom )
Choisissez comme nom "galopin" (par exemple)  et dans la zone fait référence à, entrez votre formule (dans mon exemple : = A1+C1 )
 
Dans toutes les cellules de la colonne C vous entrez maintenant
 = galopin
ça s'incrémente facilement...
 
Si vous insérez une ligne 3 par exemple vous pouvez facilement reconstituer une formule même compliquée en ajoutant une ligne VBA :
range("C3" ).Formula = "=galopin"
Et le tour est joué ! Pas de mise au point problématique de la formule dans VBA. C'est Excel qui fait tout le boulot à votre place... dans cette formule c'est dérisoire, mais imaginez une formule à rallonge de 3 ligne avec moulte SI, RECHERCHEV et autre joyeusetés, vous apprécierez surement.
 
Nota : Vous pouvez utiliser cette méthode (nommer une formule) dans tous vos classeurs même si vous n'avez aucune envie d'insérer quoi que ce soit...
C'est la base même d'une utilisation efficace d'Excel... Une fois assimilé ce principe je parie que vous ne voudrez plus vous en passer !
 
 :hello:


Message édité par galopin01 le 20-05-2011 à 11:54:58
n°20166
webyboy
Profil : Jeune recrue
Posté le 25-06-2011 à 20:59:55  
 

Je suis pure novice sur excel niveau macro & Visual Basic du type zero pointé donc je tente desesperement d'y voir clair en parcourant vos lumineuses soluces mais avec grand mal... serais bon client de "VBA pour les nulles" :) Voilà ce qui m'amene dans ce topic qui date mais toujours d'actualité. J'ai un tableau sous excel (classique) mais en fonction d'un numéros figurant sur une case cela détermine un nombre de ligne à insérer et recopier des données l'exemple ci dessous sera plus parlant :
 
  I     A      I       B          I         C         I     D   I     E     I    F    I  G  I
1I   1213   I   ANTOINE   I   LE TECLA   I   LAU  I   HEN   I   JB   I  3  I
2I   0125   I   PIERRE      I   TROUSSE  I           I            I         I  0  I
3I   1990   I   RAPHAEL    I   BATEAU    I  HEN   I   PAU   I         I  2  I
4I   0347   I   FABIEN      I   CAHIER     I  TREV  I           I         I  1  I
 
***** le résultat recherché un énorme tableau est celui-ci *****
 
    I    A       I       B         I         C         I     D   I     E     I    F    I  G  I
 1 I   1213   I   ANTOINE   I   LE TECLA   I   LAU  I   HEN   I  JB   I  3  I
 2 I   1213   I       LAU       I   LE TECLA   I          I            I         I     I
 3 I   1213   I       HEN      I   LE TECLA    I          I           I         I     I
 4 I   1213   I         JB       I   LE TECLA   I           I           I         I     I
 5 I   0125   I   PIERRE      I   TROUSSE   I          I            I       I  0  I
 6 I   1990   I   RAPHAEL   I   BATEAU     I  HEN  I   PAU   I        I  2  I
 7 I   1990   I   HEN          I   BATEAU     I          I            I        I      I
 8 I   1990   I   PAU         I   BATEAU      I          I            I        I      I
 9 I   0347   I   FABIEN    I   CAHIER      I TREV  I            I        I  1  I
10I   0347   I   TREV       I   CAHIER      I           I            I        I      I
 
*******************************************************
 
Mille merci de vos lumières de génie je ne parviens pas à concrétiser une solution au regard de vos précédents messages dans ce cas de figure : Merci aux specialistes...
Webyboy

n°20167
galopin01
Profil : Membre
Posté le 26-06-2011 à 07:45:44  
 

sorry...  :pt1cable:  
(pas de boule de cristal !)
 :hello:

n°20168
webyboy
Profil : Jeune recrue
Posté le 26-06-2011 à 11:28:04  
 

Cela veut dire Impossible ?

 Page :   1  2
Page Précédente
  FORUM Rue-Montgallet.com
  Programmation
  VB - VBA

  Macro pour inserer une ligne et recopier des formules sous Excel

© 2000-2024 Forum.rue-montgallet.com - Tous droits réservés