Problème VBA

Aloha

XLDnaute Accro
Bonjour,

Un problème a surgi dans l'exécution d'un code VBA.
Dans un fichier, se trouvant sur le serveur, il y a un bout de code qui vérifie si dans un dossier déterminé, se trouvant au même endroit, il y a des fichiers se terminant en .xls. S'il y en a ils sont ouverts et refermés l'un après l'autre et certaines données sont importées. S'il n'y en a pas il y a un message disant qu'il n'y en a pas.
Depuis un certain temps, lorsque j'ouvre le fichier en faisant un double click dessus, Excel prétend ne pas trouver de fichiers.
Par contre, si j'ouvre d'abord Excel, et puis le fichier contenant le code depuis Excel, il trouve les fichiers à importer.
Le fichier principal contenant le code et le dossier avec les fichiers à importer se trouvent donc sur le serveur.
Si, par contre, je copie le fichier et le dossier sur le bureau du PC, alors il n'y a pas de différence entre la première et la deuxième situation: Excel trouve toujours le dossier et les fichiers.

Quelqu'un d'entre vous aurait-il une idée où pourrait résider le problème?

Il est assez difficile de joindre un fichier exemple, il est très complexe et il serait très onéreux de l'anonymiser.
Bonne journée

Aloha
 

jhlamoustache

XLDnaute Occasionnel
Re : Problème VBA

Bonjour Aloha

Tu peux peut-être essayer d'exécuter les deux procédures (celle qui ne fonctionne pas normalement et celle qui est correcte) en mode pas à pas détaillé pour repérer un écart de chemin ou de noms de fichiers recherchés.
 

camarchepas

XLDnaute Barbatruc
Re : Problème VBA

Bonjour Aloha , Moustache,

Une idée toute bête mais bon des fois les anomalies c'est ça .

N'y aurait-il pas eu une montée en version transformant les fichiers .xls en xlsx par exemple.

Ou bien , es tu sur que la macro tourne correctement ?

Enifin , il est sur que sans le code c'est pas évitant .

Juste avec le code on aurait au moins pu voir la méthode utilisée et faire quelques simulations .
 

Aloha

XLDnaute Accro
Re : Problème VBA

Bonjour,

Merci pour vos réponses.
J'ai exécuté pas à pas et j'ai aussi vérifié si c'e sont bien des fichiers .xls, ce qui était même superflu puisque avec l'autre méthode cela fonctionne.
Je pense qu'il faudra que je m'adresse à la firme qui a installé le serveur.

Voici le code. Le bout en gras et souligné assure qu'Excel regarde toujours dans le bon dossier ("ToBeCopied"), qui est toujours au même niveau que le fichier contenant le code ("Base", contenant e.a. une feuille "Database" dans laquelle un certain nombre de données (66) sont copiées). Il ne peut donc pas y avoir un problème de dossier.


Sub CopyDataToDatabase()
Dim Pfad As String, SuchPfad As String
Dim wbQuelle As Workbook, wbZiel As Workbook
Dim rngZelle As Range
Dim varData(66) As Variant
Dim I As Integer, n As Integer

Set wbZiel = Workbooks("Base.xls")
Pfad = ActiveWorkbook.Path
SuchPfad = Pfad & "\TobeCopied"
ChDir SuchPfad

'---upfront check----
msg = "You are about to copy all data " & Chr(13) & _
"from the folder" & Chr(13) & "<TobeCopied>" & _
Chr(13) & "to the database list."
If MsgBox(msg, vbOKCancel) = vbCancel Then Exit Sub

'---check if there are files to be copied----
FNames = Dir("*.xls")
If Len(FNames) = 0 Then
MsgBox "No files in the Directory"
ChDir Pfad
Exit Sub
End If

'Application.ScreenUpdating = False

'---open the files to be copied----
Application.Calculation = xlCalculationManual


Do While FNames <> ""
Set wbQuelle = Workbooks.Open(FNames)

For n = 1 To wbQuelle.Sheets.Count
wbQuelle.Sheets(n).Activate

'----Copy data into an array and close book----
varData(0) = ActiveSheet.Range("A5").Value 'Mois
varData(1) = ActiveSheet.Range("U1").Value 'Nom

[etc etc jusqu'à varData(66)]

'----copy data in array into database----
wbZiel.Sheets("Database").Activate
Set rngZelle = Cells(wbZiel.Sheets("Database").Range("A65536").End(xlUp).Row + 1, 1)
rngZelle.Activate
For I = 0 To 66
rngZelle.Offset(0, I).Value = varData(I)
Next I

Next n

wbQuelle.Close False

FNames = Dir()
Loop

Application.Calculation = xlCalculationAutomatic

'Application.ScreenUpdating = True
wbZiel.Sheets("Database").Activate
MsgBox "Database has been updated"

End Sub


Bonne journée

Aloha
 

jhlamoustache

XLDnaute Occasionnel
Re : Problème VBA

Bonjour Aloha, camarchepas

Il manque peut-être

If MsgBox(msg, vbOKCancel) = vbCancel Then
set wbZiel = Nothing
Exit Sub
End if

et

MsgBox "Database has been updated"

set mgZelle = Nothing
set wbZiel = Nothing


End Sub

Ou bien tu ne l'as pas écrit pour ne pas surcharger le post
camarchepas : qu'en penses-tu ?
Bon dimanche
 

camarchepas

XLDnaute Barbatruc
Re : Problème VBA

Bonjour Moustache, Aloha,

C'est toujours effectivement plus propre de supprimer les objets crées , mais la le problème est tout autre.

En local , tout fonctionne parfaitement, sur le serveur cela fonctionnait, donc

je pense que c'est un problème de configuration serveur , ou lié à une montée en version d'un élément de celui ci.

Et là s'arrête notre aide , bien que si le problème réel est connu, j'aimerais bien le connaitre ..., sans pouvoir investir ce serveur et ses réglages ( Ce qui est bien sûr hors de question ) , pas moyen d'avancer dans le diagnostique
 

eriiic

XLDnaute Barbatruc
Re : Problème VBA

Bonjour à tous,

Ca ne serait pas un problème de chemin ?
Parfois il est préférable d'utiliser le nom du lecteur réseau plutôt que sa lettre.
\\nom_du_lecteur_reseau\etc\etc\
plutôt que
R:\etc\etc\ , ce que te retourne thisworkbook.path

eric
 

Docmarti

XLDnaute Occasionnel
Re : Problème VBA

Bonsoir Aloha, Tous.

Tu pourrais être plus précis concernant le chemin dans DIR et dans MsgBox :

Code:
ChDir SuchPfad
chemin = SuchPfad & "\"
'---upfront check----
msg = "You are about to copy all data " & Chr(13) & _
"from the folder" & Chr(13) & chemin & _
Chr(13) & "to the database list."
If MsgBox(msg, vbOKCancel) = vbCancel Then Exit Sub

'---check if there are files to be copied----
FNames = Dir(chemin & "*.xls")

Cordialement

Docmarti
 

Aloha

XLDnaute Accro
Re : Problème VBA

Bonjour et merci,
Le système actuel n'est-il pas plus flexible? Excel devrait regarder toujours dans le bon dossier. Ce qui est évidemment contredit par le fait qu'il ne trouve pas de fichiers alors qu'il y en a bien. Ce que je trouve mystérieux, c'est qu'il ne dit pas qu'il ne trouve pas le dossier, ce qui devrait être le cas s'il suit un mauvais chemin; il doit donc pas trouver le dossier. S'il trouve le chemin vers le dossier, pourquoi ne trouve-t-il pas les fichiers dans le dossier??
Bonne journée

Aloha
 

jhlamoustache

XLDnaute Occasionnel
Re : Problème VBA

Bonjour Aloha, et le forum

Sans aucune prétention, je te copie partiellement l'aide de la fonction DIR. En espérant éclairer le débat. Bon courage

Remarques

Dans Microsoft Windows, La fonction Dir permet d'utiliser des jokers ou caractères génériques (* ou ?) pour sélectionner plusieurs fichiers. Sur le Macintosh, ces caractères sont considérés comme des caractères de noms de fichiers valides et ne peuvent être utilisés comme caractères génériques pour spécifier des fichiers multiples.

Étant donné que le Macintosh ne gère pas les caractères génériques, utilisez le type de fichier pour identifier les groupes de fichiers. Vous pouvez utiliser la fonction MacID pour indiquer le type de fichier au lieu d'utiliser les noms de fichier. Par exemple, l'instruction suivante renvoie le nom du premier fichier TEXT dans le dossier courant :

Dir("Chemin d'accès", MacID("TEXT"))

Pour faire une itération sur tous les fichiers d'un dossier, indiquez une chaîne vide :

Dir("")

Si vous utilisez la fonction MacID à l'aide de l'instruction Dir dans Microsoft Windows, une erreur se produit.

Toute valeur de l'argument attribute supérieure à 256 est considérée comme une valeur MacID.

Vous devez définir l'argument pathname lors du premier appel de la fonction Dir, ou une erreur se produit. Si vous indiquez des attributs de fichier, l'argument pathname doit être présent.

La fonction Dir renvoie le premier nom de fichier correspondant à l'argument pathname. Pour extraire d'autres noms de fichier correspondant à l'argument pathname, appelez de nouveau la fonction Dir sans préciser d'arguments. Quand tous les fichiers ont été indiqués, la fonction Dir renvoie une chaîne de longueur nulle (""). Lorsqu'une chaîne de longueur nulle a été renvoyée, vous devez indiquer l'argument pathname dans les appels ultérieurs de la fonction ou une erreur se produit. Vous pouvez indiquer un nouvel argument pathname sans avoir extrait tous les noms de fichier correspondant à l'argument pathname courant. Il est cependant impossible d'appeler la fonction Dir de manière récursive. Les appels Dir comportant l'attribut vbDirectory ne renvoient pas continuellement les sous-dossiers.

Conseil Les noms de fichiers extraits n'étant pas classés, vous pouvez les stocker dans un tableau, puis trier ce dernier.
 

Discussions similaires

Réponses
14
Affichages
479
Réponses
8
Affichages
161

Membres actuellement en ligne

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 185
dernier inscrit
salhit