Variable de la sub non définie, lié au chemin pas assez explicite ?

Bonjour,

Le code bloque sur les variables d'entrée de la sub RecopieBExh que j'appelle dans TestTest(). Il m'indique une "erreur de compilation: variable non définie". Les msgbox montrent que wsTarget est directement le nom de l'onglet (sans nom du fichier), wbSource le nom du fichier excel (sans chemin du répertoire). Est-ce que çà pourrait être le problème ? Comment le résoudre ?

Sub TestTest() 'Obj : test de RecopieBExh

Dim WbDataCSV As Workbook 'wbBook où on agglomère les données pour l'export CSV
Dim wbSource As Workbook 'sera le fichier de W Source du répertoire sur lequel on ira chercher les données
Dim wsTarget As Worksheet 'onglet où compil des data avant export CSV

Set WbDataCSV = ThisWorkbook
With WbDataCSV
Set wsTarget = .Sheets("data vers csv")
MsgBox wsTarget.Name
End With

'aller chercher les fichiers dans le répertoire
Dim Chemin As String, NomFichier As String, BotaExh As String 'Fichier = nom du fichier Source (ie un Relevé)

'Définit le répertoire contenant les fichiers source de données
Chemin = ThisWorkbook.Path

'Boucle sur tous les fichiers excel du répertoire.
NomFichier = Dir(Chemin & "\" & "*.xlsx") 'ou "*.*

Workbooks.Open Chemin & "\" & NomFichier 'ouvre le fichier source FS
Set wbSource = ActiveWorkbook
MsgBox wbSource.Name
Call RecopieBExh(8, wsTarget, wbSource)

End Sub

Sub RecopieBExh(j As Integer, Target As Worksheet, Source As Workbook)

Bonjour,

Bien vouloir utiliser la balise </> avant d’insérer un code VBA.

Cette balise facilite la lecture et l’utilisation de ce code par vos interlocuteurs.

Dans la mesure du possible joignez plutôt un fichier réduit et anonymisé plutôt que des fragments de code qui ne permettent guère de test.

Pour ce sujet (et tout autre sujet ultérieur) : Indiquez quel ligne se met en surbrillance et le message d’erreur exact de VBA à ce moment.

Enfin il me semble que vous devrez également joindre la macro : « RecopieBExh » afin de bien comprendre la situation.

« Target » me semble impropre à cette macro (En règle générale il est déconseillé d’utiliser le vocabulaire de VBA pour créer des variables…

A+

Merci galopin01, je réessaie un post plus facile à utiliser pour le forum en espérant avoir plus de succès :-)

Sub RecopieFichiers()

    Dim WbDataCSV As Workbook 'wbBook où on agglomère les données pour l'export CSV
    Dim wbSource As Workbook  'sera le fichier de W Source du répertoire sur lequel on ira chercher les données
    Dim wsTarget As Worksheet 'onglet où compile des data avant export CSV
    Dim Chemin As String

    'Définit le répertoire contenant les fichiers source de données
    Chemin = ThisWorkbook.Path

    Set WbDataCSV = ThisWorkbook
    Set wsTarget = WbDataCSV.Sheets("data vers csv")
    With WbDataCSV
        Set wsTarget = .Sheets("data vers csv")
    End With

    'aller chercher les fichiers dans le répertoire
    Dim NomFichier As String, BotaExh As String 'Fichier = nom du fichier Source (ie un Relevé)
    Dim NumRelevé As Integer, n As Integer

    n = 200 'les données qu'on ne sait pas où ranger seront rangées à partir de la ligne 200

    NomFichier = Dir(Chemin & "\" & "*.xlsx") 'ou "*.*

    Do While Len(NomFichier) > 0

        'on cherche sur quelle ligne on va coller les données
        NumRelevé = InputBox(NomFichier & "  Quel est le numéro de ligne où coller les données ? (en tapant sur entrée, l'outil affectera un numéro après la ligne 200)", "Numéro de Relevé : ", n)
        MsgBox ("Numéro de Relevé enregistré : " & NumRelevé)

        Workbooks.Open Chemin & "\" & NomFichier   'ouvre le fichier source
        Set wbSource = ActiveWorkbook

        'on choisit la fonction de copie suivant que BotaExh ou Florelec
        Dim BExh As Variant
        BExh = InStr(NomFichier, "Exhaustive")
        MsgBox (BExh)

        If BExh = 0 Then  'cas Florelec
            Call RecopieValeurs(NumRelevé, wsTarget, wbSource)

        Else               'cas BotaExhaustive
           Call RecopieBExh(NumRelevé, wsTarget, wbSource)

        End If

        wbSource.Close False 'ferme le fichier source

        NomFichier = Dir() 'permet d'itérer sur le fichier suivant du du dossier ou NomFichier = Dir(Chemin & "\" & "*.xlsx") 'ou "*.* ?

        If NumRelevé = n Then
                n = n + 1
        End If

    Loop

End Sub

Sub RecopieBExh(j As Integer, Target as Worksheet, Source As Workbook)
'recopie des valeurs de fichiers type BExh

    Dim i As Integer, cpt As Integer

     Target.Sheets("data vers csv").Range("BX" & j).Value = Source.Sheets("Futaie").Range("D3:D100").End(xlDown).Row
     cpt = 0

End Sub

Sub RecopieValeurs(j As Integer, FTarget As Worksheet, FSource As Workbook)
'recopie des valeurs de fichiers type Florelec

    Call Milieux(j, FTarget, FSource)
End Sub

çà bloque quand VBA appelle la fonction RecopieBExh(NumRelevé, wsTarget, wbSource) sur Target.Sheets

(C'est le 1er fichier de mon répertoire, peut-être que çà bloquerait pareil vers RecopieValeurs.)

VBA indique

Erreur de compilation: membre de méthode ou de données introuvable

Je me demande s'il ne faudrait pas que je spécifie en plus avant Target le nom du chemin du fichier où est le worksheet ? Si oui je me demander comment le faire avec une variable.

Erreur trouvée, il ne fallait pas mettre :

 Target.Sheets("data vers csv").Range("BX" & j).Value = Source.Sheets("Futaie").Range("D3:D100").End(xlDown).Row

Mais

Target.Range("BX" & j).Value = Source.Sheets("Futaie").Range("D3:D100").End(xlDown).Row
Rechercher des sujets similaires à "variable sub definie lie chemin pas assez explicite"