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 :

Insertion de guillemets dans mon résultat


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 22
    Par défaut Insertion de guillemets dans mon résultat
    Bonjour,

    Je vous expose mon problème: j'ai réalisé une macro avec Excel 2010 permettant de me générer automatiquement du code. Ma macro fonctionne et je n'ai pas de soucis particulier sauf que lorsque j'enregistre mon fichier crée au format ".txt" j'ai des guillemets qui s'incrustent à chaque début de ligne.
    Quelqu'un aurait-il la solution?

  2. #2
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Bonjour Richou,

    Pourrais-tu poster ton code pour que l'on puisse comprendre d'où vient le problème ? (sans données personnelles bien entendu)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 22
    Par défaut
    Je ne peux pas te mettre l'intégralité du résultat du code justement pour soucis de confidentialité mais je vais te mettre un simple exemple:

    Rien qu'à l'entête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>"
    Tu vois il me met un guillemet au début, à la fin. Et il double également les guillemets là où il n'y en avait qu'un de base.

    Après si tu veux je peux t'envoyer le code de ma macro mais je pense pas que ça vienne de ça et le code est plutôt long...

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour,
    Ce n'est pas le code de ta macro, qui nous intéresse, mais uniquement la méthode (donc le code) que tu appliques pour ouvrir et écrire ce fichier texte (quel que soit le contenu de la variable string que tu y écris).

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 22
    Par défaut
    Pour écrire le code je fais ça en plusieurs temps:

    - Je créer mon nouveau fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Workbooks.Add
            Name = memo_DescEM(NumLigneEM)
            Sheets(1).Name = Name
            ActiveWorkbook.SaveAs Filename:= _
                chemin + "\" + memo_DescEM(NumLigneEM), _
                FileFormat:=xlTextWindows, Password:="", WriteResPassword:="", _
            ReadOnlyRecommended:=False, CreateBackup:=False, local:=False
    - Je copie d'un fichier modèle générique le début et je le colle dans mon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            Workbooks.OpenText Filename:=cheminConfigAPI + "\em_type04.txt", Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Tab:=True
            Application.Sheets("em_type04").Range("A1:A75").Copy
            Workbooks(memo_DescEM(NumLigneEM) & ".txt").Worksheets(memo_DescEM(NumLigneEM)).Activate
            ActiveSheet.Paste
    - Ensuite je vais chercher un autre fichier modèle en fonction de ce qu'il y a dans une colonne "type" de mon tableau:
    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
    36
    37
    38
    39
    If memo_TypeDM(NumLigneDM) = "DM_EANA" Then
                            Call fct_Coller_EANA
                            Call fct_Replace_APIEM
                        End If
                        If memo_TypeDM(NumLigneDM) = "DM_ETOR" Then
                            Call fct_Coller_ETOR
                            Call fct_Replace_APIEM
                        End If
                        If memo_TypeDM(NumLigneDM) = "DM_BASC_BUHLER" Then
                            Call fct_Coller_BASC_BUHLER
                            Call fct_Replace_APIEM
                        End If
                        'If memo_TypeDM(NumLigneDM) = "DM_BASC_PRECIA" Then
                        '    Call fct_Coller_PRECIA
                        'End If
                        If memo_TypeDM(NumLigneDM) = "DM_MOT" Then
                            Call fct_Coller_MOT
                            Call fct_Replace_APIEM
                        End If
                        If memo_TypeDM(NumLigneDM) = "DM_MOT_CPLX" Then
                            Call fct_Coller_MOT_CPLX
                            Call fct_Replace_APIEM
                        End If
                        If memo_TypeDM(NumLigneDM) = "DM_MULTI_POS_MOT" Then
                            Call fct_Coller_MULTI_POS_MOT
                            Call fct_Replace_APIEM
                        End If
                        If memo_TypeDM(NumLigneDM) = "DM_POSITIONNEUR" Then
                            Call fct_Coller_POSITIONNEUR
                            Call fct_Replace_APIEM
                        End If
                        If memo_TypeDM(NumLigneDM) = "DM_VANNE" Then
                            Call fct_Coller_VANNE
                            Call fct_Replace_APIEM
                        End If
                        If memo_TypeDM(NumLigneDM) = "DM_VANNE_MOD" Then
                            Call fct_Coller_VANNE_MOD
                            Call fct_Replace_APIEM
                        End If
    - Je vais ensuite chercher le fichier j'ouvre je copie et je colle dans le bon fichier:
    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
    Public Function fct_Coller_EANA()
        Dim NumLigne As Integer: NumLigne = 1
        Workbooks.OpenText Filename:=cheminConfigAPI + "\API_DM_EANA.xbd", Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Tab:=True
        Application.Sheets("API_DM_EANA").Range("A1:A11").Copy
        Workbooks(memo_DescEM(NumLigneEM) & ".txt").Worksheets(memo_DescEM(NumLigneEM)).Activate
        With Workbooks(memo_DescEM(NumLigneEM) & ".txt").Worksheets(memo_DescEM(NumLigneEM))
            While .Cells(NumLigne, 1) <> ""
                NumLigne = NumLigne + 1
            Wend
        .Cells(NumLigne, 1).Select
        End With
        ActiveSheet.Paste
        Workbooks("API_DM_EANA.xbd").Close
    End Function
    - Je remplace les noms génériques des fichiers modèles:
    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
     
    Public Function fct_Replace_APIEM()
        Dim NumLigne As Integer: NumLigne = 1
        With Sheets(memo_DescEM(NumLigneEM))
            While .Cells(NumLigne, 1) <> ""
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "DescriptionEM", memo_DescEM(NumLigneEM))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "InstanceEM", memo_InstanceEM(NumLigneEM))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "InstanceDM", memo_InstanceDM(NumLigneDM))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "Num_Var_Public_DM", memo_Num_Var_PublicDM(NumLigneEM))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "Type", memo_TypeEM(NumLigneEM))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "SELECTION", "SELECTEUR_CDE_" & memo_InstanceEM(NumLigneEM))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "ZoneEM", memo_TypeEM(NumLigneEM))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "NumAPI", Left(Right(memo_TypeEM(NumLigneEM), 4), 1))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "NumEM", Right(memo_TypeEM(NumLigneEM), 1))
                .Cells(NumLigne, 1) = Replace(.Cells(NumLigne, 1), "Num", Right(memo_TypeEM(NumLigneEM), 4))
                    NumLigne = NumLigne + 1
            Wend
        End With
    End Function
    - Puis je sauvegarde et je ferme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Close True

  6. #6
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    Ensuite, en-dehors de ta question initiale, je vois plusieurs éléments qui pourraient te poser problème:

    L'utilisation de .cells(x,y) sans le .value (dans tes 2 derniers codes)
    Pour un soucis de lisibilité d'ailleurs, j'écrirais ton dernier code ainsi :

    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
     
    Public Function fct_Replace_APIEM()
        Dim NumLigne As Integer
        NumLigne = 1
        With Sheets(memo_DescEM(NumLigneEM)).Cells(NumLigne, 1)
            While .value <> ""
                .value = Replace(.value),"DescriptionEM", memo_DescEM(NumLigneEM))
                .value = Replace(.value),"InstanceEM", memo_InstanceEM(NumLigneEM))
                .value = Replace(.value),"InstanceDM", memo_InstanceDM(NumLigneDM))
                .value = Replace(.value),"Num_Var_Public_DM", memo_Num_Var_PublicDM(NumLigneEM))
                .value = Replace(.value),"Type", memo_TypeEM(NumLigneEM))
                .value = Replace(.value),"SELECTION", "SELECTEUR_CDE_" & memo_InstanceEM(NumLigneEM))
                .value = Replace(.value),"ZoneEM", memo_TypeEM(NumLigneEM))
                .value = Replace(.value),"NumAPI", Left(Right(memo_TypeEM(NumLigneEM), 4), 1))
                .value = Replace(.value),"NumEM", Right(memo_TypeEM(NumLigneEM), 1))
                .value = Replace(.value),"Num", Right(memo_TypeEM(NumLigneEM), 4))
                NumLigne = NumLigne + 1
            Wend
        End With
    End Function

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 22
    Par défaut
    Merci pour ta réponse,
    En effet ça donne un rendu plus propre et ça me permet d'en apprendre toujours plus .

    Je pense que mon soucis viens du fait qu'excel détecte peut être un caractère spécial, ici en l'occurrence ça serait le " et que du coup il me rajoute en début et en fin de lignes les guillemets?

  8. #8
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Plausible, mais là, puisque tu utilises des fichiers extérieurs à Excel, trouver le hic est un vrai couac (Je suis fier de moi là ). Je ne suis pas non plus expert dans l'utilisation des fichiers, mais la conversion de ceux-ci vers un autre format avant leur utilisation pourrait peut-être résoudre le problème.

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 22
    Par défaut
    Peut-être bien je vais essayer.

    J'ai également remarqué que si j'ouvrais mon fichier .txt avec Excel, je n'avais plus ce problème mais bon le but va être de directement importer le fichier texte dans un logiciel alors bon...

  10. #10
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Alors là oui, première chose à vérifier : l'encodage des caractères.

  11. #11
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Il semble que le fichier copié était défini avec l'utilisation de doubles quotes pour les textes.
    Essaye de forcer la main vers aucun délimiteur de texte, lors de son ouverture.
    Lire :
    1)
    https://msdn.microsoft.com/fr-fr/lib.../ff837097.aspx
    2)
    https://msdn.microsoft.com/fr-fr/lib.../ff838376.aspx
    essaye de spécifier expressément xlTextQualifierNone comme délimiteur d'identification de texte
    Je ne sais par contre pas si Excel acceptera une spécification qui ne serait pas celle du fichier d'origine. Je n'ai rien pour essayer. Tente-le.

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 22
    Par défaut
    Salut unparia!

    J'ai essayé ce que tu m'as passé plein d'espoir, mais malheureusement c'est encore pire qu'avant
    Voici ce que j'obtient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    """<?xml version=""""1.0"""" encoding=""""UTF-8"""" standalone=""""yes""""?>"""

  13. #13
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ah.
    Montre le code que tu as écrit.

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2016
    Messages : 22
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks.OpenText Filename:=cheminConfigEM + "\API_DM_VANNE_MOD.xbd", Origin:=xlWindows, _
            StartRow:=1, DataType:=xlDelimited, Tab:=True, TextQualifier:=xlTextQualifierNone
    A chaque fois que j'ouvrais un document

Discussions similaires

  1. Insertion google map dans mon application
    Par khnesi dans le forum Windev Mobile
    Réponses: 3
    Dernier message: 03/07/2014, 17h44
  2. Insertion site web dans mon site
    Par Loukas42 dans le forum Langage
    Réponses: 2
    Dernier message: 12/05/2013, 21h50
  3. Problème d'insertion d'images dans mon interface graphique
    Par nini_python dans le forum Tkinter
    Réponses: 8
    Dernier message: 03/08/2012, 19h59
  4. [Batch] Guillemets dans mon IN
    Par -={-_-}=- dans le forum Scripts/Batch
    Réponses: 6
    Dernier message: 18/09/2009, 09h36
  5. Réponses: 2
    Dernier message: 03/05/2007, 09h00

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