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ération de texte dans une variable [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut Récupération de texte dans une variable
    Bonjour,

    A partir de mon classeur actif, je tente de récupérer du texte issu d'un fichier texte dans une variable. Le problème est que le fichier en question est assez mal fait, dans le sens où le texte à récupérer se répartit sur plusieurs lignes (pour une même phrase). Ci-joint un modèle du fichier enregistré sous Excel pour vous donner une idée.

    Mon but est d'obtenir le texte qui début en dessous de "Description", jusqu'au dernier mot. Je précise que si dans cet exemple le texte se termine ligne 11, cela peut différer d'un fichier à l'autre.

    J'ai voulu commencer en tentant déjà de récupérer ne serait-ce que la première ligne dans une variable, impossible en faisant ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim texte As Variant 'ou String, mais ça ne change rien...
     
    texte = Workbooks(mon_fichier).Cells(3, 1) 'j'ai également essayé avec Range, rien n'y fait
    Auriez-vous quelque chose à me suggérer ?

    Merci d'avance !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    J'ai précisé la feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
    Dim texte As String
        With Worksheets("Feuil1") ' A adapter
            For i = 2 To Range("A" & .Rows.Count).End(xlUp).Row
                texte = texte & " " & .Cells(i, 1)
            Next i
        End With
        MsgBox texte
    End Sub
    Cordialement.

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Pour ouvrir un fichier Excel et récupérer des données dans la colonne A de la première feuille à partir de la cellule contenant le mot Description
    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
    Private Function MonTexte(Fichier As String) As String
    Dim Wbk As Workbook
    Dim c As Range
    Dim LastLig As Long, i As Long
    Dim Texte As String
     
    Application.ScreenUpdating = False
    Set Wbk = Workbooks.Open(Fichier)
    With Wbk.Worksheets(1)
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        Set c = .Range("A1:A" & LastLig).Find("Description", LookIn:=xlValues, Lookat:=xlPart)
        If Not c Is Nothing Then
            If LastLig > c.Row Then
                For i = c.Row + 1 To LastLig
                    If .Range("A" & i).Value <> "" Then Texte = Texte & " " & Trim(.Range("A" & i))
                Next i
            End If
            Set c = Nothing
        End If
    End With
    Wbk.Close False
    Set Wbk = Nothing
    MonTexte = Trim(Texte)
    End Function
     
    Private Sub TEST()
     
    Debug.Print MonTexte("C:\Users\user\Desktop\modele.xls")
    End Sub

  4. #4
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Bonsoir,

    Merci à tous les deux pour vos réponses !
    Je regarde ça en détails demain matin, et je fais un retour dans la foulée.
    Tout de même.. Pouvez-vous m'expliquer pourquoi avec mon code je ne pouvais récupérer de texte (pas d'erreur au niveau de l'ouverture et/ou de la sélection du bon classeur/feuille, j'avais contrôlé).

    Bonne soirée !

  5. #5
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Bonjour !

    Je viens de jeter un oeil aux deux codes, et de les tester.

    Vos deux codes me rendent le même "résultat", l'avantage de celui de mercatog étant que s'il se trouvait que le commencement du texte venait à changer de ligne, le fait de chercher Description et de récupérer ce que l'on trouve après peut éviter certaines déconvenues.

    Cependant, je ne saisis pas à quoi servent la ligne suivante, que j'ai d'ailleurs placée en commentaire car elles me fait planter à l'exécution:

    Dernier point: comme vous l'aurez remarqué, le texte "s'organise" en paragraphes, débutant chacun par un tiret. Dans un souci de clarté, j'aimerais bien faire un ou deux saut de ligne entre chaque paragraphe... Là encore, j'ignore combien il y en aura selon le fichier. Je crois savoir que l'instruction vbCrLf pourra être utile. Mais je ne vois pas comment m'y prendre pour rechercher le fameux tiret...

    Merci d'avance !

  6. #6
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Wbk est une variable objet, on lui affect l'objet classeur qu'on a ouvert ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Wbk = Workbooks.Open(Fichier)
    A la fin du code, on vide cette variable par:
    EDIT

    Pour un retours en ligne avant le -
    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
    Private Function MonTexte(Fichier As String) As String
    Dim Wbk As Workbook
    Dim c As Range
    Dim LastLig As Long, i As Long
    Dim Texte As String, Phrase As String, Sep As String
     
    Application.ScreenUpdating = False
    Set Wbk = Workbooks.Open(Fichier)
    With Wbk.Worksheets(1)
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        Set c = .Range("A1:A" & LastLig).Find("Description", LookIn:=xlValues, Lookat:=xlPart)
        If Not c Is Nothing Then
            If LastLig > c.Row Then
                For i = c.Row + 1 To LastLig
                    Phrase = .Range("A" & i).Value
                    If Phrase <> "" Then
                        If Left(Phrase, 1) = "-" Then
                            Sep = vbCrLf
                            Phrase = Mid(Phrase, 2)
                        Else
                            Sep = " "
                        End If
                        Texte = Texte & Sep & Trim(Phrase)
                    End If
                Next i
            End If
            Set c = Nothing
        End If
    End With
    Wbk.Close False
    Set Wbk = Nothing
    MonTexte = Trim(Texte)
    End Function

  7. #7
    Membre éclairé Avatar de m@tix
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    304
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 304
    Par défaut
    Ok, merci pour l'explication, ainsi que pour le nouveau code. Juste parce que je suis un peu pointilleux : les tirets disparaissent du coup avec le nouveau code... Si je souhaite les conserver, et mettre un espace entre chaque tiret et le début de la phrase ?

    Edit: et même une dernière remarque ! On a bien un saut de ligne entre les deux "phrases", mais on en trouve malheureusement un autre avant le premier... C'est un peu ennuyeux, dans le sens où si l'on trouve beaucoup de messages, il y aura un grand espace au début... Est-ce possible de corriger ceci ?

    Désolé pour toutes questions d'un coup, et merci d'avance !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 05/11/2014, 14h36
  2. Problème de récupération de texte dans une variable
    Par LeoBeutel dans le forum Cpcdos
    Réponses: 11
    Dernier message: 04/11/2014, 18h41
  3. [RegEx] Récupération de texte dans une variable
    Par JQuinn dans le forum Langage
    Réponses: 4
    Dernier message: 17/09/2008, 20h35
  4. Réponses: 3
    Dernier message: 06/09/2006, 09h06
  5. Plusieurs lignes de texte dans une variable texte
    Par Loko dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 15/12/2005, 12h51

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