Recopier une ligne avec ses formules - MACRO
Résolu/Ferménathan01983 Messages postés 345 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 5 décembre 2024 - 20 nov. 2023 à 17:01
- Recopier une ligne avec ses formules - MACRO
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Aller à la ligne excel - Guide
- Partager photos en ligne - Guide
- Formules - Télécharger - Études & Formations
- Vente en ligne particulier - Guide
5 réponses
Modifié le 8 nov. 2023 à 09:03
Bonjour à tous.
J'ai trouvé sur un autre forum la réponse à ma solution encore mieux que ce que j'espérais.
Ce code permet d'insérer une ligne en dessous de la dernière ligne avec les même critères en conservant les formules et les mises en formes qui sont dans la ligne voulu.
Sub insérer_ligne()
Dim cell As Range, cell1 As Range
Dim i As Integer, j As Integer
With ActiveSheet
' recherche dans tableau de suivi de la dernière cellule correspondant à la catégorie produit sélectionnée
Set cell = .Columns("B").Find(.Range("$B$8"), SearchDirection:=xlPrevious)
If Not cell Is Nothing Then
'recherche dans tableau de suivi de la dernière ligne correspondant à la catégorie produit et type produit sélectionné
Set cell1 = cell
Do
i = cell.Row 'numéro de ligne du tableau
If .Cells(i, "C") = .Range("$C$8") Then Exit Do
Set cell = .Columns("B").FindPrevious(cell)
Loop Until cell.Address = cell1.Address
'ajout nouvelle ligne tableau derrière la dernière trouvée
i = i + 1
.Rows(i).Insert
.Cells(i, "B") = .Range("$B$8")
.Cells(i, "C") = .Range("$C$8")
For j = .Columns("B").Column To .Columns("T").Column
If .Cells(i - 1, j).HasFormula Then .Cells(i - 1, j).Copy .Cells(i, j)
Next j
End If
End With
End Sub
Voilà le fichier : https://www.cjoint.com/c/MKih6qvoeAu
Cordialement
20 nov. 2023 à 14:14
1. J'insère une ligne qui décale le tableau vers le bas donc, la ligne 5 devient la ligne 6 et donc ma nouvelle ligne vide sera la ligne 5)
2. avec une formule en B5
Sub Macro1() ' insertion d'une ligne vide aavant la ligne 5 Rows("5:5").Select Selection.Insert Shift:=xlDown ' recopie de la formule de B4 en B5 Range("B4").Select Selection.AutoFill Destination:=Range("B4:B5"), Type:=xlFillDefault End Sub
Cdlmnt
20 nov. 2023 à 17:01
Je l'ai un peu modifié car elle ne copiait pas la formule mais cela m'a BEAUCOUP
aidé
Sub Macro1()
' insertion d'une ligne vide aavant la ligne 5
Rows("5:5").Select
Selection.Insert Shift:=xlDown
' recopie de la formule de B4 en B5
Range("B6").Select
Selection.AutoFill Destination:=Range("B6:B5"), Type:=xlFillDefault
End Sub
Merci bcp CCM81
7 nov. 2023 à 15:52
Bonjour
Pour insérer une ligne avant la lige 3 et recopier la ligne 2, formules comprises, l'éditeur de macro donne ceci
Sub Macro1() Rows("3:3").Select Selection.Insert Shift:=xlDown Range("A2:C2").Select Selection.AutoFill Destination:=Range("A2:C3"), Type:=xlFillDefault End Sub
Cdlmnt
8 nov. 2023 à 08:34
Merci :)
20 nov. 2023 à 10:09
Bonjour à vous.
J'essais d'adapter ce code à un nouveau tableau mais je coince.
J'ai un bouton qui m'insère une ligne au dessus, mais il ne copie pas la formule qui se trouve dans B5.
Sub Insert_ligne_Formule()
Dim CurrentSheet As Object
For Each CurrentSheet In ActiveWindow.SelectedSheets
CurrentSheet.Range("B5:E5").EntireRow.Insert
Next CurrentSheet
End Sub
Sauriez vous comment faire ? car je n'arrive pas à adapter votre code
Cordialement
20 nov. 2023 à 10:45
Bonjour
Essaies ceci
Public Sub ins_ligne() With ActiveSheet Rows("5:5").Select Selection.Insert Shift:=xlDown .Cells(5, 1).Select End With End Sub
Cdlmnt
20 nov. 2023 à 11:41
Merci pour ta réponse
Toutefois ca me copie la ligne mais sans la formule :/
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionModifié le 20 nov. 2023 à 11:59
Désolé, j'ai mal lu !
Des questions toutefois au sujet de "la formule"
1. y a t'il une ou plusieurs formules à copier, et dans quelles cellules sont elles ?
2. les cellules ne contenant pas de formule doivent être vides ?
3. Si la formule à copier fait référence à la même ligne (du genre C5 = B5+1), ça ira (à peu près avec ça)
Sub Macro1() Rows("5:5").Select Selection.Insert Shift:=xlDown Range("A4:C4").Select Selection.AutoFill Destination:=Range("A4:C5"), Type:=xlFillDefault End Sub
4. sinon (du genre C5 = C4+1) il faudra la recopier jusqu'en bas
5. Le mieux serait d'envoyer un bout de fichier avec le résultat souhaité
Cdlmnt
Modifié le 20 nov. 2023 à 12:26
1 - Il y a une seule formule présente dans la colonne B5
2 - Oui les cellules ne contenant rien doivent rester vide
J'essaierais d'envoyer le fichier, mais là je suis "bloqué" au boulot avec la sécurité info.
Après je ne sais pas si j'ai été clair dans ma description du fonctionnement.
- Ma première ligne est la ligne 5 (avec une formule en B5)
- J'insère une ligne qui décale le tableau vers le bas donc, la ligne 5 devient la ligne 6 et donc ma nouvelle ligne vide sera la ligne 5)
... dès que je pourrais j'envoie le fichier vidé de ses infos ;)
En tous les cas merci pour le temps que tu passes à me répondre.