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:

16it31pro.xlsm (63.12 Ko)

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, mais 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...

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 ! Elle était juste un peu plus courte que celle de Theze parce je n'ai mis qu'une ligne pour la couleur, en supprimant TintAndShade et en mettant vbRed, plus parlant que la valeur numérique que personne ne retiendra... Je n'avais aucun besoin de répéter le même code, identique pour l'essentiel.

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... aussi.

Rechercher des sujets similaires à "macro recalcitrante fonctionne pas partout"