L'indice n'appartient pas à la sélection

Bonjour à tous, merci par avance pour l'aide que vous allez m'apporter.

ce titre de sujet existe déjà mais les réponses ne m'ont pas permit de solutionner le problème suivant.

Le code suivant me donne "L'indice n'appartient pas à la sélection" pour la ligne de code "Set wsSource = ..... "

          Dim moistraite, anneetraitee As Integer
          Dim zone As Range
          Dim wsSource, wsDest As Worksheet
          moistraite = InputBox("Mois du tableau à traiter en chiffre")
          anneetraitee = InputBox("Année à traiter")
          Set wsSource = ThisWorkbook.Worksheets("t" & moistraite)
          Set wsDest = ThisWorkbook.Worksheets("R" & moistraite)
          wsDest.Cells.ClearContents
          zone = wsSource.Range("A1").CurrentRegion
          zone.Copy Destination:=wsDest.Cells(1, 1)

Pouvez vous m'expliquer pourquoi ce code ne fonctionne pas. Merci

Bonjour

Macro à tester

Sub CopierDonnees()

    Dim moistraite As Integer
    Dim anneetraitee As Integer
    Dim zone As Range
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet

    moistraite = InputBox("Mois du tableau à traiter en chiffre")
    anneetraitee = InputBox("Année à traiter")

    ' Vérification de l'existence des feuilles
    If Not WorksheetExists("t" & moistraite) Then
        MsgBox "La feuille 't" & moistraite & "' n'existe pas."
        Exit Sub
    End If
    If Not WorksheetExists("R" & moistraite) Then
        MsgBox "La feuille 'R" & moistraite & "' n'existe pas."
        Exit Sub
    End If

    Set wsSource = ThisWorkbook.Worksheets("t" & moistraite)
    Set wsDest = ThisWorkbook.Worksheets("R" & moistraite)

    wsDest.Cells.ClearContents
    Set zone = wsSource.Range("A1").CurrentRegion
    zone.Copy Destination:=wsDest.Cells(1, 1)

End Sub

Function WorksheetExists(sheetName As String) As Boolean
    Dim ws As Worksheet
    On Error Resume Next
    Set ws = ThisWorkbook.Worksheets(sheetName)
    On Error GoTo 0
    WorksheetExists = Not ws Is Nothing
End Function

Joco7915, merci pour votre réponse.

J'ai commencer à regarder mais il semble que cela ne fonctionne pas je chercherais encore demain

paterbleutch

bonjour paterbleutch, salut Joco7915

un essai moins conventionel.

X et B ne sont pas déclarés et donc à ce moment "Variant/Empty".Après le "inputbox", X sera un "Variant/double" (pour un chiffre) ou "Variant/Boolean" (pour le croix ou "annuler"). B est "Variant/Empty" qui changera en "Variant/Boolean". Les 2 autres sont déclaré comme "Worksheet" et commencent en valeur "nothing" et changent éventuellement en un vrai "Worksheet". Avec ces connaissances, le traitement des erreurs est plus facile.

Sub CopierDonnees()

     Dim wsSource As Worksheet, wsDest As Worksheet, X, B

     On Error Resume Next
     Do
          X = Application.InputBox("Mois du tableau à traiter en chiffre" & vbLf & "0=arrêter", "MOIS", Month(Date), Type:=1)
          If X = False Or X = 0 Then Exit Sub        'on a choisi "0" ou "annuler" ou le croix
          Set wsSource = ThisWorkbook.Worksheets("t" & X)
          Set wsDest = ThisWorkbook.Worksheets("R" & X)
          B = (wsSource Is Nothing Or wsDest Is Nothing)
          If B Then If vbYes <> MsgBox("Feuille " & Chr(34) & "T" & X & Chr(34) & "  et/ou " & Chr(34) & "R" & X & Chr(34) & vbLf & "n'existe(nt) pas" & vbLf & vbLf & "Continuer=Oui", vbCritical + vbYesNo, "ERREUR") Then Exit Sub
     Loop While B
     On Error GoTo 0

     With wsDest
          .Cells.ClearContents               'RAZ destination
          wsSource.Range("A1").CurrentRegion.Copy .Cells(1, 1)     'copier&coller source
     End With
End Sub

Bonsoir,

ATTENTION ! la définition d'une variable n'est pas "collective"...
Dim wsSource, wsDest As Worksheet => ici seul wsDest est définie comme une feuille, wsSource est considérée comme Variant.
peut être que cela vient de là...

faites comme BsAlv : Dim wsSource As Worksheet, wsDest As Worksheet
il en est de même pour Dim moistraite, anneetraitee As Integer !

Alors si cela ne corrige pas l'erreur du code, cela corrige tout de même une façon de faire incorrecte.

@ bientôt

LouReeD

correction, petite erreur (chaque fois reset des variables avec "set ws...=nothing", sinon en cas d'erreur, il maintient le worksheet du boucle précédent)

Sub CopierDonnees()

     Dim wsSource As Worksheet, wsDest As Worksheet, X, B

     Do
          X = Application.InputBox("Mois du tableau à traiter en chiffre" & vbLf & "0=arrêter", "MOIS", Month(Date), Type:=1)
          If X = False Then Exit Sub     'on a choisi "0" ou "annuler" ou le croix (PS false=0)
          On Error Resume Next
          Set wsSource = Nothing: Set wsSource = ThisWorkbook.Worksheets("t" & X)
          Set wsDest = Nothing: Set wsDest = ThisWorkbook.Worksheets("R" & X)
          On Error GoTo 0
          B = (wsSource Is Nothing Or wsDest Is Nothing)
          If B Then If vbYes <> MsgBox("Feuille " & Chr(34) & "T" & X & Chr(34) & "  et/ou " & Chr(34) & "R" & X & Chr(34) & vbLf & "n'existe(nt) pas" & vbLf & vbLf & "Continuer=Oui", vbCritical + vbYesNo, "ERREUR") Then Exit Sub
     Loop While B

     With wsDest
          .Cells.ClearContents               'RAZ destination
          wsSource.Range("A1").CurrentRegion.Copy .Cells(1, 1)     'copier&coller source
     End With
End Sub
Rechercher des sujets similaires à "indice appartient pas selection"