Blocage bouton macro

Bonjour à tous,

Lorsque j'active mon bouton pour lancé ma macro, elle bloque au niveau de cette ligne en gras, il m'affiche un message d'erreur objet requis :

Sub FormuleL()
Dim d As Long
With Sheets("SUIVTRANS EN COURS").Activate
    [b][u]d = .Range("A" & Rows.Count).End(xlUp).Row[/u][/b]

     .Range("L3").Select
    ActiveCell.FormulaR1C1 = _
    "=IF(RC[-3]="""",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],5)=""REGLT"",""REGLT"",IF(LEFT(RC[-3],1)=""G"",""TAXE DE GESTION"",IF(LEFT(RC[-3],1)=""P"",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""R"",""RECOURS ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""F"",""FRAIS""))))))"
    .Range("L3").AutoFill Destination:=Range("L3:L" & d)

    Calculate
End With
End Sub

Je pense que c'est au niveau de la feuille car le bouton je l'ai mis sur une feuille à part donc peut être il reconnait pas mon With...

C'est très étrange car quand, je fais ma macro, pas à pas avec "F8" ça fonctionne très bien !

With Sheets("SUIVTRANS EN COURS").Activate

Bonjour,

".Activate" n'a rien à faire là, et ça bloque ensuite car :

Sub Exemple()
Sheets("MaFeuille").Activate.Range("A1") 'n'est pas une instruction valide
Sheets("MaFeuille").Range("A1") 'à l'inverse de celle-ci qui est correcte
End Sub

PS :

 .Range("L3").Select
    ActiveCell.FormulaR1C1 = _
'Peut s'écrire :
.Range("L3").FormulaR1C1 = _

Bonjour pedro,

Malgrès la modification du Range ça fonctionne pas ! ca bloque ici a cause du With je pense :

d = .Range("A" & Rows.Count).End(xlUp).Row

Bonjour pedro,

Malgrès la modification du Range ça fonctionne pas ! ca bloque ici a cause du With je pense :

d = .Range("A" & Rows.Count).End(xlUp).Row

Post ton nouveau code complet, je pense que tu n'as pas bien saisie où était la bonne modification...

PS : merci d'indiquer aussi à quel endroit du fichier (module VBA) tu as placé ton code.

Voici le code après modification ca bloque a la ligne en gras, celle ci : d = .Range("A" & Rows.Count).End(xlUp).Row

Sub FormuleL()
Dim d As Long
With Sheets("SUIVTRANS EN COURS").Range("L3")
   [b][u] d = .Range("A" & Rows.Count).End(xlUp).Row[/u][/b]

    .Range("L3").ActiveCell.FormulaR1C1 = _
    "=IF(RC[-3]="""",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],5)=""REGLT"",""REGLT"",IF(LEFT(RC[-3],1)=""G"",""TAXE DE GESTION"",IF(LEFT(RC[-3],1)=""P"",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""R"",""RECOURS ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""F"",""FRAIS""))))))"
    .Range("L3").AutoFill Destination:=Range("L3:L" & d)

    Calculate
End With
End Sub
With Sheets("SUIVTRANS EN COURS").Range("L3")

J'ai dit que ".Activate" n'avait rien à faire là, je n'ai jamais dit qu'il fallait ajouter ".Range("L3")" !

L'objectif initial de cette instruction est de dire que tu vas travailler sur un même objet. L'objet en question est ici une feuille, pas une cellule spécifique.

Et encore une fois :

Sub Exemple()
    Sheets("MaFeuille").Range("L3").Range("A1") 'n'est pas une instruction valide
    Sheets("MaFeuille").Range("A1") 'à l'inverse de celle-ci qui est correcte
End Sub

L'objectif de "With" est d'éviter les répétitions inutiles :

Truc.Instruction1
Truc.Instruction2
Truc.Instruction3

'Devient :
With Truc
   '.Instruction1
   '.Instruction2
   '.Instruction3
End With

Etant donné que c'est pas la première fois que tu viens demander de l'aide, je te conseille d'abord de (re)voir les bases du langage VBA plutôt que de lancer dans des codes que tu maîtrises pas (avec tous les risques que ça implique pour un usage professionnel).

Ça t'évitera aussi de venir nous voir toutes les 5 minutes pour que l'on fasse avancer ton travail !

Je rappelle qu'il y a des sections de cours sur le site (et sur d'autres sites aussi...) :

https://www.excel-pratique.com/fr/cours.php

https://www.excel-pratique.com/fr/vba.php

Pédro je suis d'accord avec toi mais ca devrais marché même si j'ai mis un with même si j'ai pas plusieurs instruction... :

Pédro je suis d'accord avec toi mais ca devrais marché même si j'ai mis un with même si j'ai pas plusieurs instruction... :

Mais lis les messages jusqu'au bout, tu as l'explication sous le nez ! Et 2 fois en plus ! Je te la remet une troisième et dernière fois...

J'ai dit que ".Activate" n'avait rien à faire là, je n'ai jamais dit qu'il fallait ajouter ".Range("L3")" !

Je précise que tu n'as toujours pas répondu à mon autre question, à savoir : où est placé ton code dans ton fichier ?

Pedro ca bloque toujours malgré les modification, j'ai du rajouté Acitvate car j'ai inséré le bouton sur une autre feuille :

Sub FormuleL()
Dim d As Long

Sheets("SUIVTRANS EN COURS").Activate
    d = Range("A" & Rows.Count).End(xlUp).Row

    Range("L3").ActiveCell.FormulaR1C1 = _
    "=IF(RC[-3]="""",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],5)=""REGLT"",""REGLT"",IF(LEFT(RC[-3],1)=""G"",""TAXE DE GESTION"",IF(LEFT(RC[-3],1)=""P"",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""R"",""RECOURS ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""F"",""FRAIS""))))))"
    Range("L3").AutoFill Destination:=Range("L3:L" & d)

    Calculate

End Sub

Mon code est sur ma feuille bouton mais le code doit être éffectué sur la feuille "SUIVTRANS EN COURS"

Mais pourquoi tu as viré "With...End With" ? Pourquoi tu as ajouté ceci : "Range("L3").ActiveCell.FormulaR1C1" ?

Tu ajoutes des erreurs là où il n'y en a pas, et tu ne fais même pas la seule et unique modification nécessaire, comme indiqué dans mes réponses précédentes.

Ok très bien pédro, après modification on revient à cela, sauf que ca bloque à cette ligne la :

  "=IF(RC[-3]="""",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],5)=""REGLT"",""REGLT"",IF(LEFT(RC[-3],1)=""G"",""TAXE DE GESTION"",IF(LEFT(RC[-3],1)=""P"",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""R"",""RECOURS ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""F"",""FRAIS""))))))"

Voici le code en entier :

Sub FormuleL()
Dim d As Long

With Sheets("SUIVTRANS EN COURS")
    d = .Range("A" & Rows.Count).End(xlUp).Row

    .Range("L3").ActiveCell.FormulaR1C1 = _
  [b][u]  "=IF(RC[-3]="""",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],5)=""REGLT"",""REGLT"",IF(LEFT(RC[-3],1)=""G"",""TAXE DE GESTION"",IF(LEFT(RC[-3],1)=""P"",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""R"",""RECOURS ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""F"",""FRAIS""))))))"[/u][/b]
    .Range("L3").AutoFill Destination:=Range("L3:L" & d)

    Calculate
End With
End Sub

Cette nouvelle écriture est correcte et résout bien le problème initiale. Il s'agit maintenant de "réparer" la nouvelle erreur que tu as ajouté. Je t'invite à relire ceci :

Le problème :

Pourquoi tu as ajouté ceci : "Range("L3").ActiveCell.FormulaR1C1" ?

La solution :

 .Range("L3").Select
    ActiveCell.FormulaR1C1 = _
'Peut s'écrire :
.Range("L3").FormulaR1C1 = _

Bien joué Pédro, ca avance : maintenant ça bloque à cette ligne

.Range("L3").AutoFill Destination:=Range("L3:L" & d)

Bien joué Pédro, ca avance : maintenant ça bloque à cette ligne

.Range("L3").AutoFill Destination:=Range("L3:L" & d)

Quand tu dis "ça bloque", que t'affiche exactement VBA ?

Je ne vois pas d'erreur sur cette ligne, à moins que le problème vienne de la variable "d". Quelle valeur prend cette variable au moment de l’exécution ?

Il m'affiche un message d'erreur en me disant la méthode AutoFill de la classe Range à échoué. Non je ne pense pas que ce soit la variable d car elle est bonne. Oui moi aussi la ligne me parait correcte

Il m'affiche un message d'erreur en me disant la méthode AutoFill de la classe Range à échoué. Non je ne pense pas que ce soit la variable d car elle est bonne. Oui moi aussi la ligne me parait correcte

"Elle est bonne" ça ne veut rien dire (en tout cas dans ce contexte...) ! J'ai besoin de savoir quelle valeur prend cette variable.

Peux-tu fournir un fichier pour mieux illustrer tout ça ?

Pédro je peux pas t'envoyer un fichier trop lourd. Mais en, fait cette ligne veut dire que je veux faire un copier coller jusqu'à la dernière ligne. Donc es ce que tu sais comment on pourrait l'écrire autrement stp

Pédro ça fonctionne presque, sauf qu'il me le fait sur la feuille ou ya mon bouton est non la feuille "SUIVTRANS EN COURS"

Voici mon code :

Sub FormuleL()
Dim d As Long

With Sheets("SUIVTRANS EN COURS")
    d = .Range("A" & Rows.Count).End(xlUp).Row

    .Range("L3").FormulaR1C1 = _
    "=IF(RC[-3]="""",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],5)=""REGLT"",""REGLT"",IF(LEFT(RC[-3],1)=""G"",""TAXE DE GESTION"",IF(LEFT(RC[-3],1)=""P"",""PRINCIPAL ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""R"",""RECOURS ""&MID(RC[3],9,8),IF(LEFT(RC[-3],1)=""F"",""FRAIS""))))))"
    .Range("L3").Copy Destination:=Range("L3:L" & d)

    Calculate
End With
End Sub

Pédro je peux pas t'envoyer un fichier trop lourd. Mais en, fait cette ligne veut dire que je veux faire un copier coller jusqu'à la dernière ligne. Donc es ce que tu sais comment on pourrait l'écrire autrement stp

J'ai bien compris à quoi elle sert, je veux juste savoir quel nombre est stocké dedans quand tu exécutes ta macro.

Pas besoin d'avoir ton fichier original complet, un bon fichier à juste besoin d'être représentatif !

Rechercher des sujets similaires à "blocage bouton macro"