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

Signaler
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012
-
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
-
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

Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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.
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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.
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
C bien !!!! Bonne journée a toi aussi !!!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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.
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
229
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
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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 ?)
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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.
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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 ?
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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.
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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.
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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)
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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.
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
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
Messages postés
42
Date d'inscription
mardi 24 mai 2011
Statut
Membre
Dernière intervention
12 juin 2012

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 !!