Sur clic - La méthode select de la classe range a échoué

Bonjour.

J'ai le code ci-dessous ("Private Sub CommandButton1_Click()"):

-------------------------------

Sheets("Feuil1").Select
Range("B1").Select
A = ActiveCell.Value

Sheets("Feuil2").Select
Range("A1").Select
-------------------------------

J'ai, sur la dernière ligne, le message d'erreur "La méthode select de la classe range a échoué.".

J'y ai mis le temps, mais j'ai fini par comprendre pourquoi il y a une erreur:

- J'ai mis ce code dans un "Bouton de commande Contrôle Active X" (bouton présent dans la feuille "Feuil1"). Il y a alors erreur.

- Si je crée une macro et mets ce code dans la macro, puis que je crée un bouton "Contrôle de formulaire", associé à cette macro, tout fonctionne correctement.

Le code est donc bon. C'est ma manière de l'appeler (type de bouton) qui pose problème.

Ma question: est-il possible de compléter ce code, de manière à ce qu'il fonctionne correctement si il est appelé via un "Bouton de commande Contrôle Active X" ?

Un grand merci d'avance.

Bonjour,

Essaies d'activer tes feuilles avant de faire ton select sur la cellule :

With Sheets("Feuil2")
    .Activate
Range("A1").select

End with

et si nécessaire à la fin revenir sur la première feuille  :

With Sheets("Feuil1")
    .Activate
end with

Merci pour votre réponse rapide.

Hélas l'erreur persiste (sur la ligne "Range("A1").Select"):

----------------------

With Sheets("Feuil1")
.Activate
Range("B1").Select
A = ActiveCell.Value
MsgBox (A)
End With

With Sheets("Feuil2")
.Activate
Range("A1").Select
B = ActiveCell.Value
MsgBox (B)
End With

With Sheets("Feuil1")
.Activate
End With

----------------------

Et si je mets le code dans une macro, aucun problème.

Encore merci.

Et on se demande pourquoi il faut joindre un fichier...


A+

17quel-bouton.zip (156.29 Ko)

Bonjour.

Voici un fichier joint qui pourrait en effet vous être utile.

Désolé.

Merci d'avance.

TU ne fais pas des "select" juste pour récupérer la valeur de la cellule active ensuite j'espère ?

A = Worksheets("Feuil1").Range("B1").value
B=Worksheets("Feuil2").Range("A1").value

Salut jeanbrico,
Salut Xmenpl,

je comprends l'intérêt de ta question à laquelle je n'ai d'ailleurs pas de réponse...
Au-delà de cette interrogation et de l'étonnement bien compréhensible de Xmenpl, j'espère, moi aussi, que ta prose était plus un test qu'un code réel...

Pas besoin d'Activate ni de Select pour accéder aux données d'une autre feuille que celle active !

' Bouton "Contrôle Active X".
MsgBox ("Feuil1 - cellule B1:" & [B1])
MsgBox ("Feuil2 - cellule A1:" & Worksheets("Feuil2").[A1])


A+

6quel-bouton-v2.zip (177.89 Ko)

Bonsoir.

J'ai été un peu long. J'ai testé vos solutions, et essayé de résumer cela dans un fichier.

Ne perdez pas surtout pas de temps à regarder. Votre aide est déjà précieuse.

Je suis un peu coincé car "je dois" utiliser la syntaxe qui plante avec un bouton Active X. J'avais espoir qu'en complétant avec une instruction (sélection de feuille, autre...), cela fonctionnerait. Je vais donc "supprimer" mes boutons Active X et basculer tout cela sous des boutons "Contrôles de formulaires". Pas de problèmes.

Par contre, vous écrivez: "Tu ne fais pas des "select" juste pour récupérer la valeur de la cellule active ensuite j'espère ?". Je sens que ce n'est pas la bonne solution.

Oui et non... Je l'utilise aussi pour parcourir des colonnes, trouver la 1ère case vide et rajouter une valeur (ici aussi "je dois utiliser", même si votre remarque sème le doute...).

Encore merci pour tout.

Ne vous embêtez pas plus loin, c'est déjà bien d'avoir répondu à ces questions.

Bonne continuation.

Salut JeanBrico,

"je dois utiliser"

? ? ? ?

Et "utiliser" un code propre et approprié te serait reproché par... qui ?


A+

Bonjour.

Mon patron aurait pu m'imposer ce code ("Tout le monde ici programme comme cela !").

Mais dans ce cas c'est pour une formation: les correcteurs utilisent ce code. Les étudiants doivent donc le connaître.

Eventuellement: très rapidement, quel code serait "propre" (avec quelques mots clés je devrais y arriver) ? Je ne pourrai rien changer au niveau de cette formation, mais pour ma pratique personnelle, ou dans d'autres cas, cela me serait très utile.

Encore merci pour tout.

Rebonjour,

Pour respecter point par point les lignes de codes existantes :

Sachant que :

- Actuellement le code se trouve sur un bouton activeX qui lui même se trouve dans une seule feuille.

Le seul moyen de garder exactement la même syntaxe c'est de déplacer le code dans un module ( donc dans une macro qui ne sera pas attribuée à une seule page )

Ensuite votre bouton ne fera qu'appeler cette macro... ainsi vous sortez votre code de la feuille1

Private Sub bt_feuill1_Click()
Macro1
End Sub
Sub Macro1()
Dim A As Integer
Dim B As Integer
With Sheets("Feuil1").Activate

    Range("B1").Select
    A = ActiveCell.Value
    MsgBox ("Feuil1 - cellule B1:" & A)
End With

With Sheets("Feuil2").Activate
    Range("A1").Select
    B = ActiveCell.Value
    MsgBox ("Feuil2 - cellule A1:" & B)
    MsgBox (B)
End With

With Sheets("Feuil1")
    .Activate
End With

End Sub

Vous pourrez toujours préciser lors de votre formation que cette méthode n'est que rarement utilisée pour récupérer la valeur d'une cellule dont on connait déjà l'adresse.

(On se sert plus souvent de "ActiveCell" pour faire un décalage de cellule en fonction d'un variable)

Rechercher des sujets similaires à "clic methode select classe range echoue"