OVH Cloud OVH Cloud

Comment copier toutes les formules d'un seul coup ?

6 réponses
Avatar
Bartez
Bonjour à tous,

Je n'arrive pas à le faire fonctionner correctement le code suivant :

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

Ce code doit pourtant bien fonctionner car il m'a été proposé par Michdenis
donc je pense qu'il doit être OK ;-) mais chez moi ç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 pour votre aide !
@+
Bartez


"michdenis" <michdenis@hotmail.com> a écrit dans le message de news:
%23JrsQf9XGHA.1228@TK2MSFTNGP02.phx.gbl...
> 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" <Bartez@free.fr> a écrit dans le message de news:
> ei$NLZ9XGHA.5004@TK2MSFTNGP02.phx.gbl...
> 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
>
>
>

6 réponses

Avatar
lSteph
Bonjour "Bartez",

Effectivement , amha si c'est MichDenis qui a écrit cela,
cela doit faire précisément ce qu'il a compris de ta demande initiale.

A lire ton présent post et après avoir testé la macro j'en déduis que
peut-être tu veux plutôt
recopier depuis une sélection de cellules de Feuil1 Uniquement les formules
en même place de Feuil2
Donc je n'ai pas spécifié de plage particulière cela fonctionne sur
sélection d'une plage:

Sub SetFormulas()
Dim c As Range, myr As String
myr = Selection.Address
For Each c In Feuil1.Range(myr).Cells
If c.Formula Like "*=*" Then
Feuil2.Range(c.Address).Formula = Feuil1.Range(c.Address).Formula
End If
Next
End Sub

'lSteph

"Bartez" a écrit dans le message de news:

Bonjour à tous,

Je n'arrive pas à le faire fonctionner correctement le code suivant :

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

Ce code doit pourtant bien fonctionner car il m'a été proposé par
Michdenis
donc je pense qu'il doit être OK ;-) mais chez moi ç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 pour votre aide !
@+
Bartez


"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











Avatar
Bartez
Salut lSteph et merci de ton aide !

Je viens d'éxécuter ton code, et effectivement il copie bien toutes les
formules mais il oblige à passer par un test et une boucle pour chaque
cellule à copier comme je le faissais au paravant avec mon code perso.

En fait, j'ai plus de 520 formules à copier d'une feuille sur 70 autres
feuilles, ce qui est beaucoup trop long. C'est bien pour cela que je
recherche une astuce chose qui puisse me copier les formules d'un seul bloc
comme si je faisais un copier coller de l'intégralité de la feuille mais en
ne posant par la suite que les formules.

Un truc qui serait bien, c'est de faire copier (tout) et ensuite collage
spéciale (juste les formules), mais quand on fait ça avec les options, Excel
considère les valeurs simples comme des formules....domage :-(

Pourquoi je ne veut pas copier les valeurs simple : parce que les valeurs
existe déjà sur les feuilles destination. Cette macro me permettrait de
mettre à jour sur toutes les feuilles, les formules qui ont été modifiées
sur une feuille de test. Mais surtout sans avoir de perte de données sur ces
dernières.

Je sais pas si je suis bien clair ;-)

Peut être que c'est impossible de trouver une astuce pour faire ça et dans
ce cas tampis je conserverais mon code qui fait le boulot demandé mais qui
me bloque l'ordi pendant plus de 2 heures à chaque fois :-(

Merci de votre aide à tous !
Bartez

J'ai en effet
"lSteph" a écrit dans le message de news:

Bonjour "Bartez",

Effectivement , amha si c'est MichDenis qui a écrit cela,
cela doit faire précisément ce qu'il a compris de ta demande initiale.

A lire ton présent post et après avoir testé la macro j'en déduis que
peut-être tu veux plutôt
recopier depuis une sélection de cellules de Feuil1 Uniquement les
formules en même place de Feuil2
Donc je n'ai pas spécifié de plage particulière cela fonctionne sur
sélection d'une plage:

Sub SetFormulas()
Dim c As Range, myr As String
myr = Selection.Address
For Each c In Feuil1.Range(myr).Cells
If c.Formula Like "*=*" Then
Feuil2.Range(c.Address).Formula = Feuil1.Range(c.Address).Formula
End If
Next
End Sub

'lSteph

"Bartez" a écrit dans le message de news:

Bonjour à tous,

Je n'arrive pas à le faire fonctionner correctement le code suivant :

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

Ce code doit pourtant bien fonctionner car il m'a été proposé par
Michdenis
donc je pense qu'il doit être OK ;-) mais chez moi ç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 pour votre aide !
@+
Bartez


"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















Avatar
Youky
Bonjour Bartez
ceci fait gagner en rapidité, surtout pour des formules à copier, si tu ne
l'as pas deja fait
Application.Calculation = xlManual
'ta macro
Application.Calculation = xlAutomatic
Youky
"Bartez" a écrit dans le message de news:

Salut lSteph et merci de ton aide !

Je viens d'éxécuter ton code, et effectivement il copie bien toutes les
formules mais il oblige à passer par un test et une boucle pour chaque
cellule à copier comme je le faissais au paravant avec mon code perso.

En fait, j'ai plus de 520 formules à copier d'une feuille sur 70 autres
feuilles, ce qui est beaucoup trop long. C'est bien pour cela que je
recherche une astuce chose qui puisse me copier les formules d'un seul
bloc comme si je faisais un copier coller de l'intégralité de la feuille
mais en ne posant par la suite que les formules.

Un truc qui serait bien, c'est de faire copier (tout) et ensuite collage
spéciale (juste les formules), mais quand on fait ça avec les options,
Excel considère les valeurs simples comme des formules....domage :-(

Pourquoi je ne veut pas copier les valeurs simple : parce que les valeurs
existe déjà sur les feuilles destination. Cette macro me permettrait de
mettre à jour sur toutes les feuilles, les formules qui ont été modifiées
sur une feuille de test. Mais surtout sans avoir de perte de données sur
ces dernières.

Je sais pas si je suis bien clair ;-)

Peut être que c'est impossible de trouver une astuce pour faire ça et dans
ce cas tampis je conserverais mon code qui fait le boulot demandé mais qui
me bloque l'ordi pendant plus de 2 heures à chaque fois :-(

Merci de votre aide à tous !
Bartez

J'ai en effet
"lSteph" a écrit dans le message de news:

Bonjour "Bartez",

Effectivement , amha si c'est MichDenis qui a écrit cela,
cela doit faire précisément ce qu'il a compris de ta demande initiale.

A lire ton présent post et après avoir testé la macro j'en déduis que
peut-être tu veux plutôt
recopier depuis une sélection de cellules de Feuil1 Uniquement les
formules en même place de Feuil2
Donc je n'ai pas spécifié de plage particulière cela fonctionne sur
sélection d'une plage:

Sub SetFormulas()
Dim c As Range, myr As String
myr = Selection.Address
For Each c In Feuil1.Range(myr).Cells
If c.Formula Like "*=*" Then
Feuil2.Range(c.Address).Formula = Feuil1.Range(c.Address).Formula
End If
Next
End Sub

'lSteph

"Bartez" a écrit dans le message de news:

Bonjour à tous,

Je n'arrive pas à le faire fonctionner correctement le code suivant :

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

Ce code doit pourtant bien fonctionner car il m'a été proposé par
Michdenis
donc je pense qu'il doit être OK ;-) mais chez moi ç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 pour votre aide !
@+
Bartez


"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



















Avatar
Bartez
Merci Youky pour ta commande je l'ai appliquée mais ça ne me diminu pas le
temps de façon significative.

je pense que c'est cette commande qu'il me faut revoir, mais j'ai beau la
retourner dans tous les sens, je ne lui fait poser que la 1ere formule et
les autres restent bien au chaud dans le tableau sans en sortir :-(

Feuil2.Range(Rg.Address) = Tblo

Si vous avez d'autres idées, merci d'avance.
Bartez


"Youky" a écrit dans le message de news:

Bonjour Bartez
ceci fait gagner en rapidité, surtout pour des formules à copier, si tu ne
l'as pas deja fait
Application.Calculation = xlManual
'ta macro
Application.Calculation = xlAutomatic
Youky
"Bartez" a écrit dans le message de news:

Salut lSteph et merci de ton aide !

Je viens d'éxécuter ton code, et effectivement il copie bien toutes les
formules mais il oblige à passer par un test et une boucle pour chaque
cellule à copier comme je le faissais au paravant avec mon code perso.

En fait, j'ai plus de 520 formules à copier d'une feuille sur 70 autres
feuilles, ce qui est beaucoup trop long. C'est bien pour cela que je
recherche une astuce chose qui puisse me copier les formules d'un seul
bloc comme si je faisais un copier coller de l'intégralité de la feuille
mais en ne posant par la suite que les formules.

Un truc qui serait bien, c'est de faire copier (tout) et ensuite collage
spéciale (juste les formules), mais quand on fait ça avec les options,
Excel considère les valeurs simples comme des formules....domage :-(

Pourquoi je ne veut pas copier les valeurs simple : parce que les valeurs
existe déjà sur les feuilles destination. Cette macro me permettrait de
mettre à jour sur toutes les feuilles, les formules qui ont été modifiées
sur une feuille de test. Mais surtout sans avoir de perte de données sur
ces dernières.

Je sais pas si je suis bien clair ;-)

Peut être que c'est impossible de trouver une astuce pour faire ça et
dans ce cas tampis je conserverais mon code qui fait le boulot demandé
mais qui me bloque l'ordi pendant plus de 2 heures à chaque fois :-(

Merci de votre aide à tous !
Bartez

J'ai en effet
"lSteph" a écrit dans le message de news:

Bonjour "Bartez",

Effectivement , amha si c'est MichDenis qui a écrit cela,
cela doit faire précisément ce qu'il a compris de ta demande initiale.

A lire ton présent post et après avoir testé la macro j'en déduis que
peut-être tu veux plutôt
recopier depuis une sélection de cellules de Feuil1 Uniquement les
formules en même place de Feuil2
Donc je n'ai pas spécifié de plage particulière cela fonctionne sur
sélection d'une plage:

Sub SetFormulas()
Dim c As Range, myr As String
myr = Selection.Address
For Each c In Feuil1.Range(myr).Cells
If c.Formula Like "*=*" Then
Feuil2.Range(c.Address).Formula = Feuil1.Range(c.Address).Formula
End If
Next
End Sub

'lSteph

"Bartez" a écrit dans le message de news:

Bonjour à tous,

Je n'arrive pas à le faire fonctionner correctement le code suivant :

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

Ce code doit pourtant bien fonctionner car il m'a été proposé par
Michdenis
donc je pense qu'il doit être OK ;-) mais chez moi ç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 pour votre aide !
@+
Bartez


"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























Avatar
michdenis
'------------------------------
Sub test()

With Feuil1
Set Rg = .UsedRange
With Feuil2
.Range(Rg.Address) = Rg.Formula
.Range(Rg.Address).SpecialCells(xlCellTypeConstants).Clear
End With
End With

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

OU

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

Dim Rg As Range, Are As Range
Dim Tblo As Variant
On Error Resume Next
With Sheets("Feuil1") 'Source
Set Rg = .UsedRange.SpecialCells(xlCellTypeFormulas)
If Err <> 0 Then Err = 0: Exit Sub
For Each Are In Rg.Areas
'Destination
With Sheets("Feuil2").Range(Are.Address)
.Formula = Are.Formula
End With
Next
End With

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




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

Je n'arrive pas à le faire fonctionner correctement le code suivant :

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

Ce code doit pourtant bien fonctionner car il m'a été proposé par Michdenis
donc je pense qu'il doit être OK ;-) mais chez moi ç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 pour votre aide !
@+
Bartez


"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





Avatar
Bartez
Alors là....Alors Là....je ne peux te dire qu'une chose,..."C'est Super !"

Mille fois merci Michedeni pour ton code, non seulement ça fait exactement
ce que j'espèrais, mais en plus, le temps d'exécution est tout simplement
impressionnant.Je suis descendu à quelques secondes contre presque 1h30
auparavant :)
Je m'apperçois qu'Excel bien maitrisé, c'est vraiement génial et pas
forcement lourd et lent.

Un regret....c'est que ce ne soit pas moi qui est écrit ces lignes de code,
GRrrrrr....
C'est conci, efficace, franchement je sais pas ou vous allez chercher tout
ça ? Moi qui mets un temps infini pour écrire une routine à grand coup de
If-Then-Else et de For-To-Next....C'est loud, c'est lent, c'est laid ....
Mais bon, à chacun ses compétences ;-)

Encore merci à toi
@mic
Bartez


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

'------------------------------
Sub test()

With Feuil1
Set Rg = .UsedRange
With Feuil2
.Range(Rg.Address) = Rg.Formula
.Range(Rg.Address).SpecialCells(xlCellTypeConstants).Clear
End With
End With

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

OU

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

Dim Rg As Range, Are As Range
Dim Tblo As Variant
On Error Resume Next
With Sheets("Feuil1") 'Source
Set Rg = .UsedRange.SpecialCells(xlCellTypeFormulas)
If Err <> 0 Then Err = 0: Exit Sub
For Each Are In Rg.Areas
'Destination
With Sheets("Feuil2").Range(Are.Address)
.Formula = Are.Formula
End With
Next
End With

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




"Bartez" a écrit dans le message de news:

Bonjour à tous,

Je n'arrive pas à le faire fonctionner correctement le code suivant :

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

Ce code doit pourtant bien fonctionner car il m'a été proposé par
Michdenis
donc je pense qu'il doit être OK ;-) mais chez moi ç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 pour votre aide !
@+
Bartez


"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