OVH Cloud OVH Cloud

Comment Copier toutes les formules d'un coup

2 réponses
Avatar
Bartez
Bonjour à tous,

Je recherche une façon de faire pour copier l'ensemble des formules d'une
feuille sur une autre (dans un même classeur) qui soit plus rapide que mon
code ci-desous :

'dépose les formules aux emplacement prévus
With ActiveSheet
Set Rg =
Sheets(Dernier_Mois).UsedRange.SpecialCells(xlCellTypeFormulas)

For Each c In Rg
If c.HasArray = False Then
.Range(c.Address).FormulaLocal = _
Worksheets(Dernier_Mois).Range(c.Address).FormulaLocal
Else
.Range(c.Address).FormulaArray = _
Worksheets(Dernier_Mois).Range(c.Address).FormulaLocal
End If
'ce test est rajouté pour supprimer
'toutes les cellules contenant la formule =""
If .Range(c.Address).FormulaLocal = "=" & Chr$(34) &
Chr$(34) Then
.Range(c.Address).Clear
End If
Next

End With

Cette boucle fonctionne bien, mais est extrèmement lente étant donné que
j'ai beaucoup de formules à copier.

J'aimerais trouver quelque chose comme, sélectionner toutes les cellules
contenant une formule dans la feuille source, puis faire un simple copier
sur la feuille destination...Mais pour le moment tous mes essais ne
fonctionnent pas :-(

Merci de votre aide si vous avez une idée.

@+
Bartez

2 réponses

Avatar
michdenis
Bonjour Bartez,


'--------------------------------
Sub CopierFormule()

Dim Rg As Range
Dim Tblo As Variant

On Error Resume Next
With Feuil1 'Source
Set Rg = .Range("A1:G10").SpecialCells(xlCellTypeFormulas)
If Err <> 0 Then Err = 0: Exit Sub
Tblo = Rg.Formula
End With

With Feuil2 'Destination
.Range(Rg.Address) = Tblo
End With

End Sub
'------------------------------------



Salutations!



"Bartez" a écrit dans le message de news: ei$
Bonjour à tous,

Je recherche une façon de faire pour copier l'ensemble des formules d'une
feuille sur une autre (dans un même classeur) qui soit plus rapide que mon
code ci-desous :

'dépose les formules aux emplacement prévus
With ActiveSheet
Set Rg Sheets(Dernier_Mois).UsedRange.SpecialCells(xlCellTypeFormulas)

For Each c In Rg
If c.HasArray = False Then
.Range(c.Address).FormulaLocal = _
Worksheets(Dernier_Mois).Range(c.Address).FormulaLocal
Else
.Range(c.Address).FormulaArray = _
Worksheets(Dernier_Mois).Range(c.Address).FormulaLocal
End If
'ce test est rajouté pour supprimer
'toutes les cellules contenant la formule =""
If .Range(c.Address).FormulaLocal = "=" & Chr$(34) &
Chr$(34) Then
.Range(c.Address).Clear
End If
Next

End With

Cette boucle fonctionne bien, mais est extrèmement lente étant donné que
j'ai beaucoup de formules à copier.

J'aimerais trouver quelque chose comme, sélectionner toutes les cellules
contenant une formule dans la feuille source, puis faire un simple copier
sur la feuille destination...Mais pour le moment tous mes essais ne
fonctionnent pas :-(

Merci de votre aide si vous avez une idée.

@+
Bartez
Avatar
Bartez
Salut MichDenis,

Je te remerci pour ton code, mais je n'arrive pas à le faire fonctionner
pourtant pour le tester j'ai changé peu de chose, mais c'est peut être déjà
trop ;-)

ça ne me copie qu'une seule formule, et ça répette cette formule dans les
autres cellules qui doivent recevoir leur propre formule.

Autre chose, j'aimerais pouvoir copier directement toute les cellules d'une
feuille et pas seulement de A1 à G10 j'ai donc tester avec A1: IV65535, mais
il y a surement mieux à faire.

Merci de ton aide et de tes lumières !
@+
Bartez

Sub CopierFormule()

Dim Rg As Range
Dim Tblo As Variant

On Error Resume Next
With Workbooks("Classeur1").Sheets("Feuil1") 'Source
Set Rg = .Range("A1:G10").SpecialCells(xlCellTypeFormulas)
If Err <> 0 Then Err = 0: Exit Sub
Tblo = Rg.Formula
End With

With Workbooks("Classeur1").Sheets("Feuil2") 'Destination
.Range(Rg.Address) = Tblo
End With

End Sub


"michdenis" a écrit dans le message de news:
%
Bonjour Bartez,


'--------------------------------
Sub CopierFormule()

Dim Rg As Range
Dim Tblo As Variant

On Error Resume Next
With Feuil1 'Source
Set Rg = .Range("A1:G10").SpecialCells(xlCellTypeFormulas)
If Err <> 0 Then Err = 0: Exit Sub
Tblo = Rg.Formula
End With

With Feuil2 'Destination
.Range(Rg.Address) = Tblo
End With

End Sub
'------------------------------------



Salutations!



"Bartez" a écrit dans le message de news:
ei$
Bonjour à tous,

Je recherche une façon de faire pour copier l'ensemble des formules d'une
feuille sur une autre (dans un même classeur) qui soit plus rapide que mon
code ci-desous :

'dépose les formules aux emplacement prévus
With ActiveSheet
Set Rg > Sheets(Dernier_Mois).UsedRange.SpecialCells(xlCellTypeFormulas)

For Each c In Rg
If c.HasArray = False Then
.Range(c.Address).FormulaLocal = _
Worksheets(Dernier_Mois).Range(c.Address).FormulaLocal
Else
.Range(c.Address).FormulaArray = _

Worksheets(Dernier_Mois).Range(c.Address).FormulaLocal
End If
'ce test est rajouté pour supprimer
'toutes les cellules contenant la formule =""
If .Range(c.Address).FormulaLocal = "=" & Chr$(34) &
Chr$(34) Then
.Range(c.Address).Clear
End If
Next

End With

Cette boucle fonctionne bien, mais est extrèmement lente étant donné que
j'ai beaucoup de formules à copier.

J'aimerais trouver quelque chose comme, sélectionner toutes les cellules
contenant une formule dans la feuille source, puis faire un simple copier
sur la feuille destination...Mais pour le moment tous mes essais ne
fonctionnent pas :-(

Merci de votre aide si vous avez une idée.

@+
Bartez