Erreur d'exécution 1004

Voici un début de programme:

Private Sub CommandButton1_Click()

Sheets("ACCUEIL").Select

n = Cells(2, 2).Value

‘ ici on a effectivement n=2

If n = 2 Then a = Int(1 + Rnd * (8 - 1 + 1))

Sheets("mots+définitions").Select

Cells(a, 4).Select erreur d’exécution 1004 erreur définie par l’application ou par l’objet

Selection.Copy

Sheets("ACCUEIL").Select

Range("C5:M5").Select

ActiveSheet.Paste

ce début de programme bloque sur la ligne : Cells(a, 4).Select

je ne voie pas pourquoi

Bonsoir,

sans fichier...

Sinon un essai tout de même avec une simplification du code pour ce que j'en ai compris :

Private Sub CommandButton1_Click()
    n = Sheets("ACCUEIL").Cells(2, 2).Value
    If n = 2 Then a = Int(Rnd * 8) + 1
    ' ATTENTION ! si n n'est pas égale à 2 alors a = 0 et ligne 0 n'existe pas !
    Sheets("mots+définitions").Cells(a, 4).Copy Destination:=Sheets("ACCUEIL").Range("C5:M5")
End Sub

Comme dit, si n différente de 2 alors a vaut 0 ! Et une ligne n'existe pas sous Excel !

A savoir, il n'est pas nécessaire de sélectionner pour travailler sur les feuilles du classeurs lorsque l'on travail avec Excel car on peut cibler les cellules par les coordonnées en nommant la feuille où elles se trouvent, contrairement à ce que l'on fait avec la souris où il faut choisir la feuille (sélectionner) puis choisir la cellule... C'est ce qu'enregistre l'enregistreur de macro. Le code qui en ressort doit être nettoyé, car sinon trop lourd !

@ bientôt

LouReeD

Bonjour,

Un grand merci pour tes conseils et pour ton code moins lourd qui fonctionne parfaitement.

Mes meilleurs voeux pour 2026

Et ... si n<>2, alors a=???? peut-être 0 ??? >>>> ERREUR ???

Bonsoir,

merci pour ce retour et remerciement !

Pour éviter le problème du a=0 :

Private Sub CommandButton1_Click()
    If Sheets("ACCUEIL").Cells(2, 2) = 2 Then _
    Sheets("mots+définitions").Cells(Int(Rnd * 8) + 1, 4).Copy Destination:=Sheets("ACCUEIL").Range("C5:M5")
End Sub

@ bientôt

LouReeD

Une proposition de l'erreur de votre autre post :

Sub LouReeD()
    n = 5
    Select Case n 'on sélectionne le bout de code à "jouer" en fonction de la valeur de n

        Case 2 ' si n=2
            a = Int(1 + Rnd * (8 - 1 + 1))
            Sheets("mots+définitions").Cells(a, 4).Copy Destination:=Sheets("ACCUEIL").Range("B6")
            With Range("B6")
                .Font.Name = "Script MT Bold"
                .Font.Size = 28
                .HorizontalAlignment = xlCenter
            End With

        Case 3 ' si n=3
            a = Int(9 + Rnd * (74 - 9 + 1))
            Sheets("mots+définitions").Cells(a, 4).Copy Destination:=Sheets("ACCUEIL").Range("B6")

        Case Else ' pour tout autre valeur de n
            a = 1
            Sheets("mots+définitions").Cells(a, 4).Copy Destination:=Sheets("ACCUEIL").Range("B6")

    End Select
End Sub

En passant par un Select, il est facile de mettre en place différentes fonctionnalité d'une procédure en fonction de la valeur d'une variable.

@ bientôt

LouReeD

Bonsoir,

Merci pour tes conseils pertinents. Select est plus agréable à utiliser que If et ElseIf. Tout fonctionne très bien. Peu à peu je vais pouvoir simplifier mes programmes

@plus

Rechercher des sujets similaires à "erreur execution 1004"