IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupérer des valeurs d'un fichier dat


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Billets dans le blog
    1
    Par défaut Récupérer des valeurs d'un fichier dat
    Bonjour,

    Il faut que je récupère dans un fichier excel certaines valeurs qui sont stockées dans un fichier dat (que j'ouvre avec le blocnote)
    Les données se présentent comme suit :
    $
    0001710602 060 22.11.07 01.04 08:38
    0489 376 2003 0513
    0489 401 2674 0585
    0480 492 7948 0583
    0467 422 5108 0561
    0520 373 1655 0278
    $
    5000221105 001 22.11.07 01.04 10:33
    0423 342 0186 0281
    0422 378 1601 0424
    0459 369 5558 0319
    0364 304 1060 0445
    Je veux récupérer les 4 premiers chiffres des valeurs qui sont sous la ligne qui commence par un 5 soit : 0423, 0422, 0459, 0364
    je ne sais pas si c'est clair mais c'est pas facile à expliquer

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Tu commences par importer le fichier texte dans Excel en précisant le type de délimiteur (espaces, dans ce cas ci), ce qui te créera une feuille nommée comme ton fichier texte, sans l'extension.
    Dans cette feuille, tu cherches la cellule qui contient la valeur référence. Par la suite, tu n'as qu'à copier les valeurs situées en dessous et à la droite de cette cellule dans une autre feuille que tu nommes comme tu veux.
    Voila pour la description des opérations. Pour ce qui est du code, ça c'est ton boulot.

    À moins que tu ne saches vraiment pas comment utiliser VBA...

  3. #3
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Billets dans le blog
    1
    Par défaut
    ... à moins que je ne sache pas utiliser vba.... ça me correspond bien!!
    effectivement, je commence à m'y intéresser car je m'aperçois que ça pourrait résoudre pas mal de problème que je rencontre au quotidien.
    Donc je veux bien un petit coup de pouce pour démarrer!
    merci

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Le problème est que c'est plus qu'un petit bout de code que tu demandes. Je vais voir ce que je peux faire, sans promesse.

  5. #5
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Billets dans le blog
    1
    Par défaut
    merci

  6. #6
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut
    bonjour

    En supposant que tu n'as que 6 lignes entre chaque $.
    Adapte le chemin et teste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub recherche5()
    Open "C:\Users\Fred\Desktop\1.dat" For Input As #1
    While Not EOF(1)
    Line Input #1, a$
      If Left(a$, 1) Like "5" Then
        For i = 1 To 5
          Line Input #1, a$
          If i = 1 Then text1 = Left(a$, 4) Else text1 = text1 & ", " & Left(a$, 4)
        Next
      End If
    Wend
    Close #1
    Debug.Print text1
    MsgBox text1
    End Sub
    cordialement

  7. #7
    Membre émérite
    Avatar de fred65200
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 901
    Par défaut Parti trop vite
    Bonour Singular,

    Cette ligne est là car
    Citation Envoyé par elnipal Voir le message
    Je veux récupérer les 4 premiers chiffres des valeurs qui sont sous la ligne qui commence par un 5 soit : 0423, 0422, 0459, 0364
    Mais comme je l'ai écrit ce code n'est pas optimisé, ton code est plus synthétique

    Cordialement

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Ah! Bien vu, fred65200

  9. #9
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Billets dans le blog
    1
    Par défaut
    je n'ai peut être pas été très clair dans mes explications: je veux récupérer mes données à la suite les unes des autres sans cellule vide, sans $.
    Maintenant, j'ai un autre problème! : dans mon ficher DAT, les lignes qui commencent par le 5 sont existantes dans un fichier excel mais pas forcément dans l'ordre de mon fichier DAT.
    Entre chaque lot (puisque ces lignes commençant par 5 sont des numéros de lot) j'ai un certain nombre d'articles qui est égal au nombre de données à récupérer!
    Dans le fichier xls joint, les lots sont dans le même ordre dans les 2 fichiers donc ça marche, mais ce n'est pas toujours le cas.
    Fichiers attachés Fichiers attachés

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    Si le format final des données n'a pas à être respecté, la méthode la plus simple est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Sub RecupererDonneesDansFichierTexte()
        Dim sRef As String
        Dim sLigne As String
        Dim nLigne As Integer
        Dim sChemin As String
        Dim sNomFichier As String
        Dim sExtFichier As String
        Dim sCheminFichier As String
        Dim sDelimiteur As String
        Dim sColonne As String
     
        sChemin = "C:\Documents and Settings\VALERIE\Mes documents\MGMPLDAT.DAT"    sNomFichier = "MGMPLDAT"
        sExtFichier = ".DAT"
        sCheminFichier = sChemin & sNomFichier & sExtFichier
        sRef = "0000000005"
        sDelimiteur = "$"
        sColonne = "B"
     
        nLigne = 3
        Open sCheminFichier For Input As #1
        While Not EOF(1)
            Line Input #1, sLigne
            If Left(sLigne, Len(sRef)) = sRef Then
                Do
                    Line Input #1, sLigne
                    If sLigne = sDelimiteur Then Exit Do
                    Range(sColonne & CStr(nLigne)).Value = "'" & sLigne
                    Range(sColonne & CStr(nLigne)).Parse Destination:=Range(sColonne & CStr(nLigne))
                    nLigne = nLigne + 1
                Loop
            End If
        Wend
        Close #1
        ActiveSheet.Name = sRef
    End Sub
    Note de modif : J'ai changé le chemin, le Like pour un =.

  11. #11
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Billets dans le blog
    1
    Par défaut
    qu'entends-tu par format final des données?
    moi je veux juste avoir mes 4 premiers chiffres!

Discussions similaires

  1. Réponses: 13
    Dernier message: 09/11/2011, 13h06
  2. VBS, récupérer des valeurs dans un fichier texte
    Par hugodu13 dans le forum VBScript
    Réponses: 2
    Dernier message: 09/12/2010, 21h04
  3. (Débutant VB) Récupérer des valeurs d'un fichier .settings
    Par clem67 dans le forum Visual Studio
    Réponses: 2
    Dernier message: 30/10/2010, 19h28
  4. Récupérer des valeurs d'un fichier text
    Par Maaaks dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 28/04/2010, 09h45
  5. Réponses: 1
    Dernier message: 05/09/2006, 18h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo