Erreur d'execution 9 sur un bouton de contrôle

Bonjour,

J'ai crée un bouton de contrôle (onglet S1) qui aurait vocation à copier coller la valeur d'une cellule dans une autre d'une autre feuille puis d'emmener le curseur vers une cellule.

Voici mon code :

Private Sub CommandButton1_Click()

Sheets("S1").Select

Range("E7").Select

ActiveSheet.Copy

Sheets("base").Select

Range("D2").Select

ActiveSheet.Paste

Sheets("S1").Select

Range("D8").Select

End Sub

Le message suivant apparait "Erreur d'execution L'indice n'appartient pas à la sélection"

Je fais débogage et la ligne sheets("base) .select passe en jaune.

Comment rendre ma macro correcte?

Merci d'avance

(Autre question sur le même "projet" : dans mon premier onglet j'ai associé ce code à ma liste déroulante :

Sub liste_deroulante()

If Sheets("accueil").Range("E1") = "S1" Then

Sheets("S1").Select

Range("E7").Select

ElseIf Sheets("accueil").Range("E1") = "S2" Then

Sheets("S2").Select

Range("E7").Select

ElseIf Sheets("accueil").Range("E1") = "S3" Then

Sheets("S3").Select

Range("E7").Select

ElseIf Sheets("accueil").Range("E1") = "S4" Then

Sheets("S4").Select

Range("E7").Select

Else

Sheets("S5").Select

Range("E7").Select

End If

End Sub

Problème il me renvoit toujours sur la 5e feuille!!)

Merci d'avance

12xl.zip (42.52 Ko)
14xl.zip (42.52 Ko)

Bonjour

Pour ta 1ère macro

Remplaces la par

Private Sub CommandButton1_Click()
  Range("E7").Copy Destination:=Sheets("base").Range("D2")
  Range("D8").Select
End Sub

Pour la 2ème macro

Il faut lier le contrôle à une cellule : Clic droit sur le contrôle --> Format de contrôle --> Onglet contrôle puis noter dans cellule liée la case voulue

dans l'exemple c'est C30

La case C30 contiendra le rang de la sélection faite par le contrôle (soit 1 à ....)

Macro (une idée de réalisation)

Sub liste_deroulante()
  Select Case Sheets("accueil").Range("C30")
    Case 1
      Application.Goto Sheets("S1").Range("E7")
    Case 2
      Application.Goto Sheets("S2").Range("E7")
    Case 3
      Application.Goto Sheets("S3").Range("E7")
    Case 4
      Application.Goto Sheets("S4").Range("E7")
    Case Else
      Application.Goto Sheets("S5").Range("E7")
  End Select
End Sub

Merci Banzai, les 2 codes marchent parfaitement.

Sans vouloir abuser de votre temps, pourrais tu me dire pourquoi mes première macro ne fonctionnaient pas ; celle ou je sélectionnais un onglet puis une cellule que j'activais et que je copiais et celle ou j'utilisais une structure if then elseif (depuis tes conseils j'avais ajouté la celulle E1 en cellule liée).

Je retiens en tout cas les 2 syntaxes, merci!

Bonsoir

Tu avais marqué

pikachu a écrit :

ActiveSheet.Copy

Regardes dans l'aide de Copy

Tu places ton curseur sur le mot Copy ensuite tu appuies sur F1

Il te faut lire le cas

Méthode Copy telle qu'elle s'applique aux objets Chart, Charts, Sheets, Worksheet et Worksheets.

tu trouveras:

expression.Copy(Before, After)

expression Obligatoire. Expression qui renvoie un des objets ci-dessus.

Before Argument de type Variant facultatif. Feuille avant laquelle la feuille copiée sera placée. Vous ne pouvez spécifier simultanément l'argument Before et l'argument After.

After Argument de type Variant facultatif. Feuille après laquelle la feuille copiée sera placée. Il est impossible d'utiliser simultanément l'argument After et l'argument Before.

Note

Si vous ne spécifiez ni l'argument Before ni l'argument After, Microsoft Excel crée un nouveau classeur contenant la feuille copiée.

C'est pour cela qu'il y avait création d'un nouveau classeur avec une seule page, celui ci devenait le classeur actif donc l'instruction suivante provoquait une erreur (CQFD)

Pour la 2ème si mes souvenirs sont exact il n'y avait pas de cellule liée

Et tu cherchais dans la cellule E1 la valeur (et non l'indice) de la liste déroulante

Rechercher des sujets similaires à "erreur execution bouton controle"