Comment changer de classeur en VBA

Bonjour

Je suis debutant en vba... Peut etre pourriez me donner un coup de main. Voilà mon soucis :

J'ai un classeur nommé "menu enregistrement.XLSM " avec des onglets programme, liste des contrats. Ce menu de départ m'oriente vers différents programmes qui ouvre des classeurs : facturation, contrats, questionnaire etc... Lorsque j'établis un contrat, j'appelle donc le classeur contrat d’engagement, mon code m’envoie un pdf correct à partir de ce classeur. (je suis sur le classeur "contrat d'engagement" onglet "convention"). L'enregistrement est fait automatiquement dans un dossier PDF CONTRAT.

Jusque là tout va bien. Maintenant je voudrais mettre à jour la liste de mes contrats sur le classeur "menu enregistrement.xlsm" onglet liste des contrats.

J'ai créé une macro (avec l'aide du net la lecture de mon dossier pdfcontrat. mais je suis bloqué car je n"arrive pas à activer mon onglet "liste contrat" du classeur menu enregistrement (qui est ouvert bien entendu en arrière plan). Voici la macro:

Sub Liste_contrats()

Worksheets("Menu enregistrement").Activate &&&& cela me sort une erreur à cet endroit
'Sheets("liste contrats").Activate
Dim xFSO As Object
Dim xFolder As Object
Dim xFile As Object
Dim xFiDialog As FileDialog
Dim xPath As String
Dim i As Integer
Set xFiDialog = Application.FileDialog(msoFileDialogFolderPicker)
If xFiDialog.Show = -1 Then
xPath = xFiDialog.SelectedItems(1)
End If
Set xFiDialog = Nothing
If xPath = "" Then Exit Sub
Set xFSO = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFSO.GetFolder(xPath)
ActiveSheet.Cells(1, 1) = "Chemin enregistrement"
ActiveSheet.Cells(1, 2) = "Nom du fichier"
ActiveSheet.Cells(1, 3) = "Extension"
i = 1
For Each xFile In xFolder.Files

i = i + 1
ActiveSheet.Cells(i, 1) = xPath
ActiveSheet.Cells(i, 2) = Left(xFile.Name, InStrRev(xFile.Name, ".") - 1)
ActiveSheet.Cells(i, 3) = Mid(xFile.Name, InStrRev(xFile.Name, ".") + 1)
Next


End Sub

Finalement c'est un problème d'activation d'un classeur à partir d'un autre classeur. J'ai du zappé quelquechose...

merci pour votre aide

Bonjour,

Pour un code propre, surtout lorsqu'on manipule plusieurs fichiers, il faut bien cibler le classeur sur lequel on travaille, puis la feuille, puis la plage.

Dans votre cas, il s'agit du classeur qui exécute le code, soit thisworkbook. Voici un essai d'adaptation :

Sub Liste_contrats()
'déclarations des variables
Dim oFile As Object, sPath As String, i As Integer, t()
'sélection dossier
with Application.FileDialog(msoFileDialogFolderPicker)
    If .Show = -1 Then
        sPath = .SelectedItems(1)
    End If
end with
If sPath = "" Then Exit Sub
'Liste des fichiers
with CreateObject("Scripting.FileSystemObject")
    For Each oFile In .GetFolder(sPath).Files
        temp = split(oFile.name, ".")
        i = i + 1: redim preserve t(1 to 3, 1 to i)
        t(1, i) = sPath
        t(2, i) = temp(0)
        t(3, i) = temp(1)
    Next oFile
end with
'Collage sur feuille
if i > 0 then
    with thisworkbook 'erreur 9 avait lieu car la feuille "Menu enregistrement" n'existe probablement pas
        with .Sheets("liste contrats")
            .range("A1:C1").value = array("Chemin enregistrement", "Nom du fichier", "Extension")
            .cells(2, 1).resize(i, 3).value = application.transpose(t)
        end with
    end with
else
    msgbox "aucun fichier"
end if
End Sub

Cdlt,

Ok. Merci j'essaie tout cela

CDL

Rechercher des sujets similaires à "comment changer classeur vba"