Macro récalcitrante ne fonctionne pas partout...?
Bonjour le forum, bonjour à tous,
J'ai créé avec l'enregistreur de macro la macro suivante:
[quote]Sub Macro1()
'
Sub RAZ()
Range("A3").Select
ActiveCell.FormulaR1C1 = "Article1"
Selection.AutoFill Destination:=Range("A3:A7"), Type:=xlFillDefault
Range("A3:A7").Select
Selection.AutoFill Destination:=Range("A3:D7"), Type:=xlFillDefault
Range("A3:D7").Select
Range("B3:B7").Select
With Selection.Font
.color = -16776961
.TintAndShade = 0
End With
Range("D3:D7").Select
With Selection.Font
.color = -16776961
.TintAndShade = 0
End With
Range("E8").Select
End Sub
d'abord dans mon classeur de travail, commandée par le bouton "RAZ" en 'Feuil1" ou elle me signale une "erreur de compilation : Membre de méthode ou de données introuvable" sur "Autofill".
puis dans un classeur nouvellement créé ou elle fonctionne parfaitement bien...
Quelqu'un à t-il une explication à ce problème...?
Merci de votre aide...
Mon fichier joint:
Bonjour,
Abstiens-toi de sélectionner, cela n'en ira que mieux !
Bonjour,
Et de "parenter" les objets (ici Range) pour éviter les fausses manoeuvres :
Sub RAZ()
With Worksheets("Feuil1") '<--- adapter le nom de la feuille !
.Range("A3").FormulaR1C1 = "Article1"
.Range("A3").AutoFill .Range("A3:A7"), xlFillDefault
.Range("A3:A7").AutoFill .Range("A3:D7"), xlFillDefault
With .Range("B3:B7", "D3:D7").Font
.Color = -16776961
.TintAndShade = 0
End With
End With
End Sub
Et de "parenter" les objets
Merci beaucoup Theze et MFerrand pour votre aide...
MFerrand, ta macro fonctionne parfaitement,
Que veut tu dire par "parenter" les objets ?
Je comprend l'idée, mais je ne sais pas voir dans ma macro ou et le lien de parenté...
Peut être Selection" parent de "Range"...? c'est ça ?
Merci de m'expliquer...
Bonsoir,
Rend à César... Je n'ai pas mis ma macro !
cela ne m'explique pas pourquoi la même macro crée avec l'enregistreur (sans modification de ma part) fonctionne dans un classeur vierge et pas dans mon classeur de travail...
Ce n'est pas un cas unique, et je ne t'expliquerai pas pourquoi Excel refuse à un endroit ce qu'il laisse passer ailleurs... quand cela arrive on ne peut que contourner en formulant autrement.
Cela arrive même quand on "parente" (pour utiliser l'expression de Theze)...
Sous ce terme, il faut savoir et bien se pénétrer de l'idée que lorsque tu écris une expression destinée à renvoyer un objet Excel, tu n'appelles pas directement l'objet mais tu l'invoques par une propriété de l'objet parent, lequel est lui-même invoqué à partir d'une propriété de son objet parent... Tu navigues ainsi dans une arborescence d'objet affiliés qui remonte jusqu'à l'objet Application. Pour un code propre et efficace, le parent doit être explicite. S'il fait défaut, ce sera implicitement Application, pour les propriétés qui peuvent être également des propriétés de Application et pour lesquelles son indication peut demeurer implicite. C'est le cas pour les principaux objets : classeurs, feuilles, cellules, et également le cas pour Selection, mais dans ces cas VBA doit rechercher à partir de Application l'élément actif qui peut être visé.
Cette écriture entraîne donc une perte de rapidité de l'exécution quand ça fonctionne, et parfois cela refuse d'aboutir pour des raisons que l'on peut identifier ou pas ! Par exemple la feuille active n'est plus celle qu'on croit, ou la sélection s'est modifiée... Mais parfois aussi rien ne paraît s'opposer à la bonne exécution et ça n'aboutit pas.
Donc tu "parentes" pour mettre toutes les chances de ton côté, et le cas échéant tu ajustes la formulation pour retenir celle qu'Excel accepte.
Cordialement.
Oups !, effectivement la macro est bien celle de Thèse...
Qu'il veuille bien pardonner ma méprise, merci à lui...
Et merci à toi MFerrand pour ton explication...