Qu'est ce qui ne va pas dans mon code - VBA excel

Salut tout le monde
Voila g un code mais il ne fonctionne pas comme je le voudrai !
Pourquoi ?
Il a l’air si bien !!

le truc ki plante c que les dates ne changent pas…
d et m ne tourne pas…
Pourquoi ?
Voici le code

Sub essai()

Sheets("Feuil1").Activate
n = 2
For m = 1 To 12
For d = 1 To 31

fichier = "C:\Divers\Bilanj\ & d & _ & m & _06.bil"
If FichierExiste(fichier) Then

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\Divers\Bilanj\ & d & _ & m & _06.bil", Destination:=Cells(4, n))
    .Name = "d_m_06"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 1252
    .TextFileStartRow = 44
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileOtherDelimiter = "|"
    .TextFileColumnDataTypes = Array(9, 9, 1, 9)
    .TextFileDecimalSeparator = "."
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

Else
End If
    n = n + 1
    
Next d
Next m

End Sub

Si tu exécutes ton code pas à pas, tu devrais voir les valeurs de d et de m tourner.
En revanche, tu devrais aussi voir que ton code est certainement faux au niveau des noms de fichiers.

Essaye avec ça :

A priori la variable n ne sert à rien. :wink:

Merci pour ton aide mais je l’avais deja essayer comme ca mais sans resultat…
La variable n me sert a changer de colonne…
As tu d’autres suggestions ?

J’ ai peut oublier de vous dire ce qu’etait ma fonction fichierexiste.
voila le code enntier:

Code

Function FichierExiste(filespec)
’ --------------------------------
’ Vérifie l’existence d’un fichier
’ Renvoie True si le fichier existe
’ --------------------------------
Dim fso, msg
Set fso = CreateObject(“Scripting.FileSystemObject”)
FichierExiste = IIf(fso.FileExists(filespec), True, False)
End Function

Sub essai()

Sheets("Feuil1").Activate
n = 2
For m = 1 To 12
For d = 1 To 31

fichier = "C:\Divers\Bilanj\" & d & "_" & m & "_06.bil"
If FichierExiste(fichier) Then

With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;C:\Divers\Bilanj\" & d & "_" & m & "_06.bil", Destination:=Cells(4, n))
    .Name = d & "_" & m & "_06"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = False
    .RefreshOnFileOpen = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .RefreshPeriod = 0
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = 1252
    .TextFileStartRow = 44
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = False
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = False
    .TextFileOtherDelimiter = "|"
    .TextFileColumnDataTypes = Array(9, 9, 1, 9)
    .TextFileDecimalSeparator = "."
    .TextFileTrailingMinusNumbers = True
    .Refresh BackgroundQuery:=False
End With

Else
End If
    n = n + 1
    
Next d
Next m

End Sub

Ouppps ! Oui, pardon, je n’avais pas vu le “n” dans l’expression “Destination:=Cells(4, n)”…
La variable n est donc bien utile.

As-tu exécuté pas à pas ta macro et vérifié que comme je te le disais m et d changeaient bien de valeur ?

En revanche, c’est peut-être la logique de ta macro qui n’est pas bonne.
Il faudrait savoir ce que tu veux réellement faire .

Comment vois tu que d et m prenne telle ou telle valeur ?
G essayer plusieur petite chose pour voir ce qui ne marchait pas.
et j’ai observe que les problemes viennentde:


fichier = "C:\Divers\Bilanj\" & d &"_" & m & "_06.bil"
    If FichierExiste(fichier) Then
    
    With ActiveSheet.QueryTables.Add(Connection:= _
        "TEXT;"C:\Divers\Bilanj\ "& d &" _ "& m & "_06.bil"", Destination:=Cells(4, n))


Pour suivre les valeurs, j’utilise une méthode très arcaïque, mais qui fonctionne.

Commence par mettre un point d’arrêt par exemple sur la ligne “Next m”.
Pour cela tu mets ton curseur sur cette ligne et tu appuies sur la touche <F9>.
En suite tu lances la macro et quand elle passera sur le point d’arrêt, elle s’arrêtera.
déplace alors le pointeur de la souris sur la variable dont tu veux connaitre la valeur à cet instant (pas besoin de cliquer).

Donc si tu mets ton pointeur de souris sur la variable d, tu verras qu’elle vaut bien 32.

Les valeur de d et m varie bien.

C’est bien ce que je te disais, ces valeurs varient. :wink:

En revanche, c’est peut-être la logique de ta macro qui n’est pas bonne.
Il faudrait savoir ce que tu veux réellement faire .

Ben j’aimerai que les noms des fichiers tounent et qd il va ouvrir le fichier ca marche …
Suis je assez clair ?

Les noms de fichiers tournent, c’est certain, nous l’avons vérifié plus haut. :wink:

Désolé, je ne peux t’aider car je ne sais pas à quoi sert la ligne

ActiveSheet.QueryTables.Add(Connection:= "TEXT;C:\Divers\Bilanj\" & d & "_" & m & "_06.bil", Destination:=Cells(4, n))

Je sais bien à quoi sert le “with” par rapport aux lignes suivantes jusqu’à “EndWith”, mais je ne sais pas ce que fait le “QueryTables.Add(…)”.

[edit]
Une petite idée tout de même :

Tes fichiers existent-ils réellement et sont-ils bien “détectés” par ta fonction “FichierExiste” ?
Pour le savoir, met un point d’arrêt sur la ligne “If FichierExiste(fichier) Then”, puis lance ta macro et exécute-là pas à pas (touche <F8>).

Les noms de fichiers recherchés ne comportent pas de zéro (ex : C:\Divers\Bilanj\5_7_06.bil pour le fichier du 5 juillet 2006).
Tes fichiers réels en comportent-ils (ex : C:\Divers\Bilanj\05_07_06.bil pour le fichier du 5 juillet 2006) ?
[/edit]