J'ai un document Excel qui copie une feuille de modèle dans une nouvelle feuille lors de sa première utilisation. Toutes les feuilles supplémentaires qui suivent ce modèle sont ajoutées à la feuille nouvellement créée.
Je reçois l'erreur dans le titre dans cette section de code:
If Worksheets("User Configuration").Cells(9, 15).Value = 1 Then
Worksheets("Cable Cards Template").Range("A1:J33").Copy
With Worksheets("Cable Cards")
**.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues**
.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlFormats
End With
Worksheets("Cable Cards Template").Shapes("Picture 1").Copy
Worksheets("Cable Cards").Paste Cells(RangeStartRow, RangeStartColumn)
Call Sheets.FormatCableCardRows
End If
Fondamentalement, si l'instruction If
est vraie (la cellule = 1), une plage d'une feuille particulière doit être copiée et collée dans la nouvelle feuille dans la plage indiquée à l'aide de PasteSpecial
pour les valeurs et le formatage. Suite à cela, la feuille "nouvellement créée" doit avoir une image copiée dans la cellule en haut à gauche du modèle, puis un sous-programme est appelé pour formater les lignes de la nouvelle feuille.
Je reçois l'erreur au premier appel .Range
après l'instruction With Worksheets("Cable Cards")
. J'ai essayé de ne pas utiliser l'instruction With
, de copier les valeurs directement au lieu de coller-spécial, etc. Ce qui est étrange, c'est que cela fonctionnera du premier coup, lorsque la nouvelle feuille sera créée via:
If (RangeStartRow = 1) Then
Worksheets.Add().Name = "Cable Cards" ' Create new sheet with given name only on first cable card
Columns(1).ColumnWidth = 9.43
Columns(6).ColumnWidth = 11
Columns(10).ColumnWidth = 9
Call FormatForA5Printing("Cable Cards", 71)
End If
mais au 2e tour, cela échoue complètement, avec le Run Time Error 1004 'Application Defined or Object Defined Error'
. J'apprécierais toute aide.
Votre objet de cellules n'est pas pleinement qualifié. Vous devez ajouter un DOT
avant l'objet de cellules. Par exemple
With Worksheets("Cable Cards")
.Range(.Cells(RangeStartRow, RangeStartColumn), _
.Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues
De même, qualifiez pleinement tous vos objets Cells.
Solution n ° 1 : Votre déclaration
.Range(Cells(RangeStartRow, RangeStartColumn), Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues
ne fait pas référence à un Range
approprié pour agir. Au lieu,
.Range(.Cells(RangeStartRow, RangeStartColumn), .Cells(RangeEndRow, RangeEndColumn)).PasteSpecial xlValues
fait (et de même dans certains autres cas).
Solution n ° 2 : activez Worksheets("Cable Cards")
avant d'utiliser ses cellules.
Explication: Cells(RangeStartRow, RangeStartColumn)
(exemple) vous donne un Range
, qui serait ok, et c’est pourquoi vous voyez souvent Cells
utilisé de cette façon. Mais comme il n'est pas appliqué à un objet spécifique, il s'applique à la variable ActiveSheet
. Ainsi, votre code tente d'utiliser .Range(rng1, rng2)
, où .Range
est une méthode d'un objet Worksheet
et rng1
et rng2
sont dans un Worksheet
différent.
Vous pouvez effectuer deux vérifications pour rendre cela tout à fait évident:
Activez votre Worksheets("Cable Cards")
avant d'exécuter votre Sub
et il commencera à fonctionner (vous disposez maintenant de références bien formées à Range
s). Pour le code que vous avez posté, ajouter .Activate
juste après With...
constituerait une solution, même si vous rencontrez peut-être un problème similaire ailleurs dans votre code lorsque vous vous référez à Range
dans un autre Worksheet
.
Avec une feuille autre que Worksheets("Cable Cards")
active, définissez un point d'arrêt sur la ligne générant l'erreur, démarrez votre Sub
et, en cas de rupture de l'exécution, écrivez dans la fenêtre immédiate.
Debug.Print Cells(RangeStartRow, RangeStartColumn).Address(external:=True)
Debug.Print .Cells(RangeStartRow, RangeStartColumn).Address(external:=True)
et voir les différents résultats.
Conclusion: Utiliser Cells
ou Range
sans objet spécifié (par exemple, Worksheet
ou Range
) peut être dangereux, surtout si vous travaillez avec plus d'un Sheet
, à moins que vous ne sachiez exactement ce que Sheet
est actif.
L'attribution d'une valeur qui commence par un "=" lancera l'évaluation de la formule et générera dans mon cas l'erreur n ° 1004 mentionnée ci-dessus. Le pré-prévoir avec un espace était le billet pour moi.