Ouvrir un classeur depuis un autre classeur et l'activer

Bonjour à tous,

J'ai un classeur Excel 2010 depuis lequel je souhaite ouvrir un autre classeur et activer ce dernier.

Bien entendu cela ne fonctionne pas.

Voici un extrait de mon code :

...
'choix du fichier, ajout et sélection de la feuille
chaine1 = "Tableaux"
resultat1 = Ouvre()
Workbooks(resultat1).Activate
...

Function Ouvre()
Dim wbMyWb As Workbook
Dim Nom_Fichier As Variant

Nom_Fichier = Application.GetOpenFilename("Fichiers Excel , *.xls; *.xlsx")
If Nom_Fichier <> False Then
 Set wbMyWb = Workbooks.Open(Nom_Fichier)
 ' wbMyWb.Activate
 Ouvre = Nom_Fichier
End If

End Function

L'erreur est erreur 9 indice n'appartient pas à la sélection

Merci de votre aide

Bonjour,

Essayer ce code :

    'choix du fichier, ajout et sélection de la feuille
    chaine1 = "Tableaux"
    resultat1 = Ouvre()
    If resultat1 <> Empty Then Workbooks(resultat1).Activate
    '...

Function Ouvre()
    Dim wbMyWb As Workbook
    Dim Nom_Fichier As Variant

    Nom_Fichier = Application.GetOpenFilename("Fichiers Excel , *.xls; *.xlsx")
    Ouvre = Empty
    If Nom_Fichier <> False Then
        Set wbMyWb = Workbooks.Open(Nom_Fichier)
        Ouvre = wbMyWb.Name
    End If
End Function

Merci pour ce bout de code. Il n'y a plus l'erreur. Par contre la feuille (chaine1) s'ajoute dans le fichier dans lequel il y a le code mais pas dans le fichier que je viens d'ouvrir et, à priori, d'activer.

...
chaine1 = "Tableaux"
resultat1 = Ouvre()
If resultat1 <> Empty Then Workbooks(resultat1).Activate

resultat2 = ajout_feuille(chaine1)
With Worksheets(chaine1)
.Activate
End With
...
Function ajout_feuille(Nom)
Dim i As Byte, Verif As Boolean

Verif = False
If Nom = "" Then Exit Function

For i = 1 To Sheets.Count
 If Sheets(i).Name = Nom Then Verif = True
Next
Select Case Verif
 Case Is = True
  MsgBox "la feuille " & Nom & " existe déjà, veuillez choisir un autre nom"
 Case Else
  Sheets.Add(after:=Sheets(Sheets.Count)).Name = Nom
End Select
End Function

Bonjour,

Alors, essayer plutôt ce code

    Dim resultat1 As Workbook, nom As String

    'choix du fichier, ajout et sélection de la feuille
    chaine1 = "Tableaux"
    Call Ouvre(resultat1)
    If Not resultat1 Is Nothing Then
        resultat1.Activate
        nom = chaine1: Call ajout_feuille(ActiveWorkbook, nom)
        If nom <> Empty Then ActiveWorkbook.Sheets(nom).Activate
    End If
    '...

Sub Ouvre(wbMyWb As Workbook)
    Dim Nom_Fichier As Variant

    Nom_Fichier = Application.GetOpenFilename("Fichiers Excel , *.xls; *.xlsx")
    If Nom_Fichier <> False Then Set wbMyWb = Workbooks.Open(Nom_Fichier)
End Sub

Sub ajout_feuille(classeur As Workbook, nom As String)
    Dim i As Byte, Verif As Boolean

    If nom = Empty Then Exit Sub

    Verif = False
    For i = 1 To classeur.Sheets.Count
        If Sheets(i).Name = nom Then Verif = True
    Next
    Select Case Verif
        Case True
            MsgBox "la feuille " & nom & " existe d?j?, veuillez choisir un autre nom"
            nom = Empty
        Case False
            classeur.Sheets.Add(after:=Sheets(Sheets.Count)).Name = nom
    End Select

End Sub

Merci Thev.

Il exécute bien le call ouvre(resultat1) sauf qu'un espion sur resultat1 renvoi du vide à priori et sur le Workbooks(resultat1).Activate il y a l'erreur 13 incompatibilité de type...

Je deviens fou avec ce truc qui semble simple pourtant...

Il exécute bien le call ouvre(resultat1) sauf qu'un espion sur resultat1 renvoi du vide à priori et sur le Workbooks(resultat1).Activate il y a l'erreur 13 incompatibilité de type...

Dans la nouvelle version du code que je t'ai transmise, resultat1 n'est plus une variable chaîne mais une variable objet de type WorkBook. Donc : "resultat1.Activate" et non "Workbooks(resultat1).Activate"

Oups...oui en effet mille excuse...je suis allé un peu vite dans la recopie du code donné.

Merci cela fonctionne.

En fait cela fonctionnait car les deux classeurs avaient le même nombre de feuille.

J'ai modifié la ligne

If Sheets(i).Name = nom Then Verif = True

par

If classeur.Sheets(i).Name = nom Then Verif = True

et cela fonctionne.

Merci encore.

Rechercher des sujets similaires à "ouvrir classeur activer"