Fichiers introuvables via VBA

Bonjour à tous,
j'ai un fichier excel qui recense les activités des collaborateurs, et un fichier différent dans lequel ils entrent leurs congés.
Je veux récupérer les valeurs entrées dans le tableau des congés dans mon fichier des activités.
Coller avec liaison ne fonctionne pas, il me dit que le fichier depuis lequel je copie n'existe pas... spoiler : si.

J'ai donc tenté de l'écrire en vba pour débugger le truc, et voilà que j'ai le même problème.

J'ai essayé en chemin relatif et absolu. En local et sur serveur, les deux en local, les deux sur serveur (le résultat souhaité est celui-ci), un en local un sur serveur...
mais rien à faire.

Le plus rageant, c'est que "coller avec liaison" a fonctionné un temps sur ce fichier, puis plus du tout. Qu'est-ce que je ne sais pas sur le fonctionnement d'Excel qui peut bloquer sa capacité à repérer mon autre fichier ? J'ai l'impression d'avoir épluché internet sans trouver de réponse, mais j'ai peut être raté un truc évident ? :/

Merci d'avance !

Sub UpdateConges()

  Dim sourceWorkbook As Workbook
    Dim targetWorkbook As Workbook
    Dim sourceSheet As Worksheet
    Dim targetSheet As Worksheet
    Dim sourceRange As Range
    Dim targetRange As Range
    Dim lastRow As Long
    Dim lastColumn As Long
    Dim wbcongespath As String
    '
    'relative path
    'servername\subservername
    '   00__conges
    '       Conges2023.xlsm ==> J'ai bien vérifié l'extension.
    '   01_Pilotage
    '       02-PDC
    '           ThisWorkbook
    '
    'wbcongespath = "D:\Utilisateurs\username\Downloads\Conges2023.xlsm" ==> le chemin absolu ne fonctionne pas 
    wbcongespath = ThisWorkbook.Path & "\..\..\00_conges\Conges2023.xlsm" ==> le chemin relatif non plus
    Debug.Print wbcongespath ==> Alors qu'à chaque fois je le vérifie et mon chemin est correct.
    Set sourceWorkbook = Workbooks(wbcongespath)

    Set targetWorkbook = ThisWorkbook

    ' Set the source and target sheets
    Set sourceSheet = sourceWorkbook.Sheets("Totaux")
    Set targetSheet = targetWorkbook.Sheets("Jessy")

    ' Set the source and target ranges
    Set sourceRange = sourceSheet.Range("CB33:CM33")
    Set targetRange = targetSheet.Range("K6:V6")

    ' Copy and link values
    targetRange.Value = sourceRange.Value

    ' Clean up
    Set sourceRange = Nothing
    Set targetRange = Nothing
    Set sourceSheet = Nothing
    Set targetSheet = Nothing
    Set sourceWorkbook = Nothing
    Set targetWorkbook = Nothing

End Sub

bonjour,

quel message d'erreur précis reçois-tu ? tes fichiers sont-ils déjà ouverts en excel au moment d'exécuter la macro? Si c'est le cas, il n'est pas nécessaire de préciser le chemin. Si ce n'est pas le cas, il manque une instruction pour ouvrir le(s) fichier(s).

Bonjour à tous,

Une proposition : si le fichier n'est pas ouvert, on l'ouvre.

    Dim wB As Workbook, sourceWorkbook As Workbook, targetWorkbook As Workbook
    Dim sourceSheet As Worksheet, targetSheet As Worksheet
    Dim sourceRange As Range, targetRange As Range
    Dim lastRow As Long, lastColumn As Integer
    Dim wbcongespath As String
    Dim fileClosed As Boolean

    wbcongespath = "D:\Utilisateurs\username\Downloads\Conges2023.xlsm"
    fileClosed = True
    For Each wB In Workbooks
        If wB.Name = "Conges2023.xlsm" Then
            fileClosed = False
            Set sourceWorkbook = wB
            Exit For
        End If
    Next wB

    If Not fileClosed Then
        Workbooks.Open (wbcongespath)
        Set sourceWorkbook = ActiveWorkbook
    End If

etc.

Bonjour,
merci pour vos réponses !

J'ai testé avec les fichiers ouverts, et en ajoutant l'ouverture des fichiers dans la macro. Ca ne fonctionne pas mieux.

J'ai toujours "Erreur d'exécution '9' : L'indice n'appartient pas à la sélection.

L'ouverture des fichiers fonctionne bien (donc c'est bien que le chemin est correct et que le fichier existe, non mais !), mais pas la macro.
J'avais des macros qui s'ouvraient au démarrage dans le fichier congés, j'ai essayé de les désactiver, mais ça ne résout rien non plus.

Merci encore de votre aide, je m'arrache les cheveux sur ce truc si simple !

Bonjour,

Votre instruction est incomplète, celle-ci devrait fonctionner :

Set sourceWorkbook = Workbooks.Open(wbcongespath)

bonjour,

J'ai toujours "Erreur d'exécution '9' : L'indice n'appartient pas à la sélection.

pour quelle instruction reçois-tu ce message d'erreur ?

Si les 2 fichiers sont bien ouverts, alors c'est qu'il ne trouve pas une des 2 feuilles (donc soit la feuille Totaux dans sourceworkbook, soit la feuille Jessy dans targetworkbook.

D:\Utilisateurs me fait douter (pourquoi le lecteur D:\ ?
Si ce fichier se trouve dans le dossier de téléchargement de l'utilisateur, alors il faut utiliser une variable d'environnement du type :

Workbooks.Open Environ("USERPROFILE") & "\Downloads\Conges2023.xlsm"

Bonsoir,

Tu as un pb avec le nom du classeur, il ne faut pas mettre le chemin mais uniquement le nom du fichier, un truc du genre :

Workbooks.Open MonChemin & "\MonFichier.xlsm"
Set sourceWorkbook = Workbooks("MonFichier.xlsm")

Le mieux est soit de boucler sur les classeurs pour voir si le classeur est déjà ouvert, soit utiliser la gestion des erreurs.

Thev avait apporté un début de réponse, mais cela sous entend que le classeur est fermé. Il faut faire le test d'ouverture avant d'ouvrir le fichier.

Benead

Merci beaucoup pour votre aide, c'était bien une problématique d'ouverture du fichier avant de s'en servir !

Rechercher des sujets similaires à "fichiers introuvables via vba"