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 RecopieBExhDim 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).RowMais
Target.Range("BX" & j).Value = Source.Sheets("Futaie").Range("D3:D100").End(xlDown).Row