OVH Cloud OVH Cloud

erreur 1004

2 réponses
Avatar
Andrea Parker
bonjour,

j'ai préparé une macro en enregistrement qui a bien fonctionné


Sheets("mensuel").Select
Selection.CurrentRegion.Select

Selection.ClearContents
Sheets("caisse").Select
ActiveSheet.Unprotect
Range("A25").Select
Selection.ClearContents
Range("A27").Select
Selection.CurrentRegion.Select
Selection.Copy
Sheets("mensuel").Activate
ActiveSheet.Paste
Rows("1:1").Select

mais lorsque maintenant j'essaie de la faire fonctionner

elle bloque à la ligne
Rows("1:1").Select


avez vous une explication

est-ce parceque je l'ai déplacée du module à la feuille ?

merci d'avance en l'attente je continue à tester

2 réponses

Avatar
michdenis
Bonjour Andréa,

Si tu écris une macro dans le module de la feuille, tu dois obligatoirement tout au long de ton programme écrire la
référence complète des objets. Contrairement au module Standard, le module de la feuille prend pour acquis que les
objets "Range" et autres appartiennent à la feuille où tu écris le code. Si c'est objet appartient à une autre feuille,
tu dois le spécifier explicitement.

Exemple : Tu écris le code en module de la feuil1 et tu veux faire référence à une cellule de la Feuil2

A = Worksheets("Feuil2").range("A25")

Si tu te contente d'écrire :
A = range("A25")

La valeur retournée sera celle de la cellule de la feuille 1 , pas celle de la feuille 2


Il y a probablement possible de raccourcir ce code ...mais je n'ai pas le détail de ce que tu veux faire ...!

Cette façon d'écrire la procédure fonctionne peu importe que tu sois dans le module feuille ou module standard
'------------------------------
Sub copier()

Application.ScreenUpdating = False
With Sheets("mensuel")
.Select
ActiveCell.CurrentRegion.ClearContents
End With

With Sheets("caisse")
.Select
.Unprotect
.Range("A25").ClearContents
.Range("A27").CurrentRegion.Select
Selection.copy
End With

With Sheets("mensuel")
.Activate
ActiveSheet.Paste
Rows("1:1").Select
End With
End Sub
'------------------------------


Salutations!



"Andrea Parker" a écrit dans le message de news:
bonjour,

j'ai préparé une macro en enregistrement qui a bien fonctionné


Sheets("mensuel").Select
Selection.CurrentRegion.Select

Selection.ClearContents
Sheets("caisse").Select
ActiveSheet.Unprotect
Range("A25").Select
Selection.ClearContents
Range("A27").Select
Selection.CurrentRegion.Select
Selection.Copy
Sheets("mensuel").Activate
ActiveSheet.Paste
Rows("1:1").Select

mais lorsque maintenant j'essaie de la faire fonctionner

elle bloque à la ligne
Rows("1:1").Select


avez vous une explication

est-ce parceque je l'ai déplacée du module à la feuille ?

merci d'avance en l'attente je continue à tester
Avatar
Andrea Parker
merci
j'ai résolu le problème en la laissant dans le module
et l'appeler de la feuille

mais j'ai bien compris tes explications
merci
cela fonctionne

si cela intéresse quelqu'un
c'est une petite application
pour "faire" la caisse chaque soir d'une petite boutique
calcul des espèces, répartitions des cb cheque dans une banque ou l'autre
calcul du fond caisse, journal de caisse et impression pour le comptable

cela serait peut-etre à simplifier mais cela fonctionne
cordialement

michdenis a écrit:
Bonjour Andréa,

Si tu écris une macro dans le module de la feuille, tu dois obligatoirement tout au long de ton programme écrire la
référence complète des objets. Contrairement au module Standard, le module de la feuille prend pour acquis que les
objets "Range" et autres appartiennent à la feuille où tu écris le code. Si c'est objet appartient à une autre feuille,
tu dois le spécifier explicitement.

Exemple : Tu écris le code en module de la feuil1 et tu veux faire référence à une cellule de la Feuil2

A = Worksheets("Feuil2").range("A25")

Si tu te contente d'écrire :
A = range("A25")

La valeur retournée sera celle de la cellule de la feuille 1 , pas celle de la feuille 2


Il y a probablement possible de raccourcir ce code ...mais je n'ai pas le détail de ce que tu veux faire ...!

Cette façon d'écrire la procédure fonctionne peu importe que tu sois dans le module feuille ou module standard
'------------------------------
Sub copier()

Application.ScreenUpdating = False
With Sheets("mensuel")
.Select
ActiveCell.CurrentRegion.ClearContents
End With

With Sheets("caisse")
.Select
.Unprotect
.Range("A25").ClearContents
.Range("A27").CurrentRegion.Select
Selection.copy
End With

With Sheets("mensuel")
.Activate
ActiveSheet.Paste
Rows("1:1").Select
End With
End Sub
'------------------------------


Salutations!



"Andrea Parker" a écrit dans le message de news:
bonjour,

j'ai préparé une macro en enregistrement qui a bien fonctionné


Sheets("mensuel").Select
Selection.CurrentRegion.Select

Selection.ClearContents
Sheets("caisse").Select
ActiveSheet.Unprotect
Range("A25").Select
Selection.ClearContents
Range("A27").Select
Selection.CurrentRegion.Select
Selection.Copy
Sheets("mensuel").Activate
ActiveSheet.Paste
Rows("1:1").Select

mais lorsque maintenant j'essaie de la faire fonctionner

elle bloque à la ligne
Rows("1:1").Select


avez vous une explication

est-ce parceque je l'ai déplacée du module à la feuille ?

merci d'avance en l'attente je continue à tester