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

Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 10:56 - Dernière réponse : 4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention
- 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
Afficher la suite 

20 réponses

Répondre au sujet
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 12:59
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de 4u4me4us
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 13:49
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de 4u4me4us
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 14:47
+3
Utile
C bien !!!! Bonne journée a toi aussi !!!
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de 4u4me4us
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 mai 2011 à 11:12
0
Utile
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
Commenter la réponse de ucfoutu
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 11:15
0
Utile
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.
Commenter la réponse de 4u4me4us
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 11:17
0
Utile
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)
Commenter la réponse de 4u4me4us
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 25 mai 2011 à 11:22
0
Utile
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
Commenter la réponse de ucfoutu
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 11:44
0
Utile
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 ?)
Commenter la réponse de Vorens
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 11:51
0
Utile
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.
Commenter la réponse de 4u4me4us
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 12:01
0
Utile
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 ?
Commenter la réponse de Vorens
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 12:13
0
Utile
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
Commenter la réponse de 4u4me4us
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 12:37
0
Utile
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.
Commenter la réponse de Vorens
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 13:03
0
Utile
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
Commenter la réponse de 4u4me4us
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 13:28
0
Utile
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.
Commenter la réponse de Vorens
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 13:31
0
Utile
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)
Commenter la réponse de Vorens
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 13:59
0
Utile
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
Commenter la réponse de Vorens
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 14:03
0
Utile
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.
Commenter la réponse de 4u4me4us
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 14:04
0
Utile
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
Commenter la réponse de Vorens
4u4me4us 781 Messages postés lundi 22 janvier 2007Date d'inscription 30 octobre 2013 Dernière intervention - 25 mai 2011 à 14:17
0
Utile
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
Commenter la réponse de 4u4me4us
Vorens 42 Messages postés mardi 24 mai 2011Date d'inscription 12 juin 2012 Dernière intervention - 25 mai 2011 à 14:24
0
Utile
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 !!
Commenter la réponse de Vorens

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.