[Catégorie modifiée VB6 -> VBA] Importation de donnée fichier .txt => Excel [VBA

Résolu
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012 - 25 mai 2011 à 10:56
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 - 25 mai 2011 à 14:47
Bonjour à tous,

Pour la première fois de ma vie je pose une question sur un forum . J'espère que quelqu'un saura éclairer ma lanterne =)

Je suis actuellement entrain de faire un fichier Excel permettant de traiter des données enregistrées sous format .txt. Je souhaite faire des graphique de productivité de différente machine. Ces machines génère automatiquement un fichier d'état machine .txt. Chaque jours = un nouveau fichier.

Dans le nom de chaque fichier contient la date à la quelle il à été enregistrer. L'utilisateur peux choisir de visualiser les états machine entre deux dates (exemple: du 22.02.2011 au 03.04.2011).

Pour le moment j'arrive sans problème à importer les données dans Excel. Via une boucle FOR je peux changer le nom du fichier à importer et incrémenter mon tableau au fur et à mesure.
mais voila, ces machines ne fonctionne pas 7/7 donc durant les week-end, aucun fichier n'est généré. Dans ma boucle pour sélectionner le fichier suivant, je fais DateActu +1 (dateActu est la variable ou est inscrit la date du fichier à importer). Je désire savoir comment je peux contrôler l'existence d'un fichier en fonction du lien avant d'essayer de l'importer et que la traditionnel erreur #400 n'apparaisse.

Je voudrais faire qqch comme sa:

Le lien ci-dessous est un exemple

For i = 1 to nombreDeJour

IF "TEXT;S:\Industrialisation\AMELIORATION CONTINU\TPM_Log = existe pas then (le programme saute à la dernière ligne d'instruction)

...
...
...
(le prg reprend ici)
DateActu = date Actu +1
next i
End_sub

20 réponses

4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 12:59
Alors l c un peut plus compliqué.

Je me base sur le code que tu as posté pour te signalé les problème suivants :

1) cheminKomax1 = "TEXT;S:\..." n'est pas un path valide je ne sais pas à quoi sert le TEXT; mais tu ne peut pas l'utiliser dans la fonction dir.

2) "cheminKomax1,NomFichier" n'est pas un code de concaténation. Comme il sagit de variable tu dois mettre cheminKomax1 & NomFichier

3) cheminKomax1 et NomFichier n'ont pas des valeurs conquérantes. Je t déjà parler du problème avec TEXT dans cheminKomax1 mais sur tout si je concatène cheminKomax1 et NomFichier (avec DateSelec = "01012011")j'ai la chaine suivante. "S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300\TPM_Log_TPM_Log_01012011".

Conclusion :

Il faut que tu revoie la construction de ton path. il faut que au final tu aie un string du style (avec DateSelec = "01012011")

"S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300\TPM_Log_\01012011,txt"

Pour que ton if sois valable.
3
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 13:49
Tu demande "Comment fait tu pour voir entièrement le contenu d'une variable". en mode arrêt il faut cliquez sur la fenètre immédiate (Généralement c la fenêtre tout en bas) que tu peux afficher en cliquant dans le bouton View->Immediate Win...

Là tu tape ?(le nom de ta variable) et tu presse sur la touche Entrer de ton clavier.

La valeur entier de ta var va s'affichier.

Bien sur il faut arrété le programme après la ligne ou la variable à une valeur.
3
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 14:47
C bien !!!! Bonne journée a toi aussi !!!
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 237
25 mai 2011 à 11:12
Bonjour,

sers-toi donc de la fonction Dir (à voir dans ton aide).
Regarde ce que fait ceci, par exemple. Et sers-t'en
MsgBox Dir("D:\totoa.bmp") <> ""


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 11:15
J'ai lu deux fois ton problèmes. Deux fois car je pense que la solution et trop simple par rapport a tout les mots que tu as utilisé. Si ce n'est pas le cas excuse moi, stp soi plus précis sur le problème.

D'après l'exemple (Je prend des pinces pour évité de me payé la honte o k ou )

For i = 1 to nombreDeJour
IF "TEXT;S:\Industrialisation\AMELIORATION CONTINU\TPM_Log = existe pas then (le programme saute à la dernière ligne d'instruction)

...
...
...
(le prg reprend ici)
DateActu = date Actu +1
next i

Je pense que la solution est

For i = 1 to nombreDeJour
IF dir("S:\Industrialisation\AMELIORATION CONTINU\TPM_Log)<> "" as then
...
...
...
end if
(le prg reprend ici)
DateActu = date Actu +1
next i

Si suis tout a coté c que g pas compris donc stp sois plus précis.
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 11:17
ucfoutu tu as étais plus serin que moi sur son problème (note que même le titre du poste n'a rien à voir avec le problème)
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 237
25 mai 2011 à 11:22
note que même le titre du poste n'a rien à voir avec le problème

bonjour, 4u4me4us,
parfaitement d'accord avec toi. C'est malheureusement trop souvent le cas.
Ton titre, Vorens, aurait du être du genre :
"Vérifier l'existence d'un fichier"
et ton message, du genre :
"Comment subordonner l'exécution d'instructions à l'existence d'un fichier"
Car c'était bien là ton problème (qu'il te fallait isoler, tout le reste ne nous regardant point)


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 11:44
Merci pour vos réponses rapide, j'explore la voie de la fonction DIR.

En ce qui concerne les remarques sur le titre et la longueur du post j'en prends bonne note et ferais beaucoup mieux la prochaine fois, je manque cruellement d'expérience dans le posage de question sur forum. Mais vous avez tout de même bien cerné mon problème.

J'ai juste fait un petit test et j'ai une incompatibilité de type en message d'erreur mais je vais vite trouver ou j'ai merdouillé.

(Y'a pas moyen d'éditer le titre et le contenu du post après coup ?)
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 11:51
Tu dis "(Y'a pas moyen d'éditer le titre et le contenu du post après coup ?)". Non pas moyen mais je pense que si ton soucis ce trouve bien là, moi et ucfoutu, pourrons t'aider.

Pour l'erreur, si tu l'as au niveau du if alors soir sur qu'il soit ainsi if dir(path du fichier et nom du fichier) <> "" then

Bien sur tu peux poster la ligne ou tu as l'erreur.
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 12:01
Re,

L'erreur se situe effectivemnt au niveau di IF. voici un bout du code

ElseIf Range("J5").Select =  "00440 - ROBOT COULAGE EPOXY TR 300" Then
        cheminKomax1 = "TEXT;S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300\TPM_Log_"
    End If
    
  'Séléction de la date mise en forme________________________________________________________________________________________
        Sheets("Calcul").Activate
        DateSelec = Range("F3").Value
        
  'Début de la boucle qui s'éxecute x fois en fonction du nombre de jours que l'on veux importer.
        
 For i = 1 To nombreJour
  
  
'Construction du lien______________________________________________________________________________________________________

        CheminFini = cheminKomax1 & DateSelec & ".txt"


'Construction du nom de fichier à interoger_________________________________________________________________________________

        NomFichier = "TPM_Log_" & DateSelec
  
'Vérification du lien (si date de week end alors le programme saute à la dernière instruction "Date + 1"

 If Dir("cheminKomax1,NomFichier" <> "") Then


'Paramètrage de la page ou coller les données (séléection du mois)et de la ligne___________________________________________________________
 
        Sheets("Calcul").Activate
If Range("H6").Value = 1 Then
        Sheets("Janvier").Activate
        valeurA2 = Range("A2").Value
        
'Selection prochaine ligne vide (La fonction ce répete pour chaque mois)




J'ai regardé l'exemple de Microsoft, mais je ne saisi pas bien la ligne en gras


' Affiche les noms dans C:\\ représentant des dossiers.
MyPath = 'c:\\' ' Définit le chemin d'accès.
MyName = Dir(MyPath, vbDirectory) ' Extrait la première entrée.
Do While MyName <> '' ' Commence la boucle.
' Ignore le dossier courant et le dossier
' contenant le dossier courant.
If MyName <> '.' And MyName <> '..' Then
' Utilise une comparaison au niveau du bit pour
' vérifier que MyName est un dossier.
If (GetAttr(MyPath & MyName) _
And vbDirectory) = vbDirectory Then
Debug.Print MyName ' Affiche l'entrée uniquement si elle
End If ' représente un dossier.
End If
MyName = Dir ' Extrait l'entrée suivante.
Loop
wally

Et plus particulièrement vbDirectory à quoi sa correspond ?
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 12:13
T tout mimi (Sans vouloir être méchant)
Tu as mis
if Dir("cheminKomax1,NomFichier" <> "") Then
il faut mettre
if Dir("cheminKomax1,NomFichier") <> "" Then

exemple si tu veux savoir sir le fichier savon.txt existe dans le dossier I:\Bains

if Dir("I:\Bains\savon.txt") <> "" Then
msgbox "Oui il existe"
else
msgbox "Non il existe pas"
end if
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 12:37
Nan mais tu peux être méchant, pas voir sa tout seul c'est la honte :/

Plus d'erreur, mais la condition IF n'est jamais =true meme si le fichier existe donc il n'éxecute pas le programme. Il faut que je trouve pourquoi il ne reconnais pas le fichier. Surement un petit truc à changer dans ("cheminKomax1,NomFichier").

Merci pour la patience dont vous avez fait preuve pour répondre é mes questions de newbie.
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 13:03
M"*ç% j'ai fais une faute de frappe

Il faut que tu revoie la construction de ton path. il faut que au final tu aie un string du style (avec DateSelec = "01012011")

"S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300\TPM_Log_\01012011.txt"

sorry
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 13:28
Le problème vient surement du point 3) que t'as cité. J'ai changé la construction du path en virant le "Text;s/

Comment fait tu pour voir entièrement le contenu d'une variable (a part mettre la souris sur la variable en mode arrêt ) technique qui marche pas si la chaine de caractère est trop longue.

Car si effectivement, j'obtiens aussi quelque chose du style "S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300\TPM_Log_TPM_Log_01012011".

Avec 2 fois le TMP_LOG c'est la que sa coince mais je ne peux pas le confirmer.
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 13:31
Code actuel

ElseIf Range("J5").Select = "00440 - ROBOT COULAGE EPOXY TR 300" Then
        CheminVerif = "S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300"
        cheminKomax1 = "TEXT;S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300\TPM_Log_"
    End If
    
  'Séléction de la date mise en forme________________________________________________________________________________________
        Sheets("Calcul").Activate
        DateSelec = Range("F3").Value
        
  'Début de la boucle qui s'éxecute x fois en fonction du nombre de jours que l'on veux importer.
        
 For i = 1 To nombreJour
  
  
'Construction du lien______________________________________________________________________________________________________

        CheminFini = cheminKomax1 & DateSelec & ".txt"
       
'Construction du nom de fichier à interoger_________________________________________________________________________________

        NomFichier = "TPM_Log_" & DateSelec
        NomFichierExist = "TPM_Log_" & DateSelec & ".txt"
        
'Vérification du lien (si date de week end alors le programme saute à la dernière instruction "Date + 1"

 If Dir("CheminVerif & NomFichierExist") <> "" Then


'Paramètrage de la page ou coller les données (séléection du mois)et de la ligne___________________________________________________________
 
        Sheets("Calcul").Activate
If Range("H6").Value = 1 Then
        Sheets("Janvier").Activate
        valeurA2 = Range("A2").Value
        
'Selection prochaine ligne vide (La fonction ce répete pour chaque mois)
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 13:59
Oi merci pour l'info =)

J'ai tenté sa

'Vérification du lien (si date de week end alors le programme saute à la dernière instruction "Date + 1"

 If Len(Dir(CheminTest)) <> "" Then


Mnt, il me dit "nom ou numéro du fichier incorect" sauf qu'il n'est pas incorrect. Je pense que j'utilise pas la bonne inscruction
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 14:03
Non, excuse mais c faut
len retourne un nombre donc ne peut pas être comparait à un string ("")
garde la sytaxe suivante
If Dir(CheminTest) <> "" Then

mais sois sur que CheminTest aie une valeur correcte.
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 14:04
Valeur de CheminTest

CheminTest : "S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00006 - SEMI-AUTOMATE INSERTION CONTACTS MALES\TPM_Log_110518.txt" : Variant/String

Tirée de la fnètre des variables
0
4u4me4us Messages postés 781 Date d'inscription lundi 22 janvier 2007 Statut Membre Dernière intervention 30 octobre 2013 3
25 mai 2011 à 14:17
Si g bien compris la variable vaut S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00006 - SEMI-AUTOMATE INSERTION CONTACTS MALES\TPM_Log_110518.txt

Donc fait un truc tou bête. Copie la chaine et colle la de le "run ou executé" de windows (Dans le menu du bouton démarrer".
soit ta chaine et correcte donc ton fichier va s'ouvrir soit elle ne l'ai pas et windows va te dire ou il y a un problème
0
Vorens Messages postés 42 Date d'inscription mardi 24 mai 2011 Statut Membre Dernière intervention 12 juin 2012
25 mai 2011 à 14:24
Oui c'est ce que j'ai fais.

En modifiant la syntaxe et en utilisant d'autre variable pour la construction du path ( variables utilisée uniquement pour la fonction DIR donc plus les mêmes que pour la construction du path de la fonction qui me sers a importer les données, sa fonctionne niquel !!!!

Donc code final

 ElseIf Range("J5").Select = "00440 - ROBOT COULAGE EPOXY TR 300" Then
        CheminVerif = "S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300"
        cheminKomax1 = "TEXT;S:\Industrialisation\AMELIORATION CONTINU\ETATS EQUIPEMENTS\00440 - ROBOT COULAGE EPOXY TR 300\TPM_Log_"
    End If
    
  'Séléction de la date mise en forme________________________________________________________________________________________
        Sheets("Calcul").Activate
        DateSelec = Range("F3").Value
        
  'Début de la boucle qui s'éxecute x fois en fonction du nombre de jours que l'on veux importer.
        
 For i = 1 To nombreJour
  
    
'Construction du lien______________________________________________________________________________________________________

        CheminFini = cheminKomax1 & DateSelec & ".txt"
       
'Construction du nom de fichier à interoger_________________________________________________________________________________

        NomFichier = "TPM_Log_" & DateSelec
        NomFichierExist = "TPM_Log_" & DateSelec & ".txt"
        CheminTest = CheminVerif & NomFichierExist
'Vérification du lien (si date de week end alors le programme saute à la dernière instruction "Date + 1"

 If Dir(CheminTest) <> "" Then


'Paramètrage de la page ou coller les données (séléection du mois)et de la ligne___________________________________________________________
 
        Sheets("Calcul").Activate
If Range("H6").Value = 1 Then
        Sheets("Janvier").Activate
        valeurA2 = Range("A2").Value
        
'Selection prochaine ligne vide (La fonction ce répete pour chaque mois)



Un très grand merci à toi pour avoir pris le temps de répondre à mon problème ! =). Je te souhaite une très bon fin d'après midi !!
0