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

Modélisation Discussion :

Mise en forme sur champs texte [AC-365]


Sujet :

Modélisation

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut Mise en forme sur champs texte
    Bonjour,

    J'importe des données de performances de fonds à partir d'un fichier Csv. Si un fonds n'existe pas en 2015 par exemple, sa performance inexistante est notifiée par "N/A". Partant de là, l'import enregistré de ce champ se fait sous le type "Texte". Le souci c'est qu'il y a bien une centaine de champs susceptibles de présenter cette particularité, sur des nombres ou "monétaires" ou "pourcentages", et j'obtiens des champs quasi illisibles car non formatables sans code.

    Je sais manipuler une macro Excel avant l'import qui pourrait me faire un "replace", mais je me dis qu'il y a peut être un moyen simple de contourner ces erreurs de type, autrement que par des conditions VraiFaux dans les formulaires et les requêtes.

    Peut être un bout de VBA qui retraite tous les champs et me transforme les "N/A" en une seule fois (genre en nombre comme 1000 ou 10000)? Ou je réfléchis mal, une autre direction ?

    Merci!

  2. #2
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    A mon avis le plus simple est de faire un replacement des "N/A" par des "" au niveau du fichier csv avant de l'importer.

    Cordialement.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Merci pour votre avis.
    En fait ce n'est pas un csv car je le sauvegarde en txt.Le souci est que mon bout de code que j'ai adapté ne fonctionne pas sur ce fichier texte, je n’obtiens que des caractères que je suppose chinois., et son poids est divisé par 2 environ.
    Voici mon code :
    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
     
        Open CurrentProject.path & "\Cours_des_OPCVM_fichiers\ProGestionnaire\Export_QuantContratUC_Complet - Copie.txt" For Input As #5
        While Not EOF(5)
        Line Input #5, ligne5
        If fichier5 = "" Then
        fichier5 = ligne5
        Else
        fichier5 = fichier5 & vbCrLf & ligne5
        End If
        Wend
        Close #5
        fichier5 = Replace(fichier5, "N/A", "") 'j'ai essayé avec """", pas mieux
        Open CurrentProject.path & "\Cours_des_OPCVM_fichiers\ProGestionnaire\Export_QuantContratUC_Complet - Copie2.txt" For Output As #5
        Print #5, fichier5
        Close #5
    Avez vous une idée du pourquoi du comment ? Mon ancien code qui replace "," par "." continue à fonctionner sur les fichiers txt concernés.

    Une autre méthode pour remplacer "N/A" avant l'importation des données ?

    Merci d'avance

  4. #4
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,
    En définitive, aussi facile de faire cela avec une macro Vba. Ouvrir le fichier avec l'instruction OpenText() avec les paramètres ad hoc, ensuite Cells.Replace... pour enlever les N/À.
    Cordialement.
    (mon pc indisponible pour plusieurs jours )

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    OpenTxt, cells.replace, c'est du VBA Excel non ? Je ne sais pas faire, je voudrais bien un exemple si vous avez le temps.

    Au final, j'ai fait enregistrement macro dans le fichier Csv, avec un enregistrement du fichier après chaque "Remplacer" (N/A, €, dates), sinon le fichier sort tout plein d'erreurs (sucre les virgules, importation bidon), et j'importe le csv. J'ai des beaux champs bien numériques maintenant

    Merci !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    En fait, j'ai toujours quelques scories à manager, dans la toute dernière colonne, des "," s'accumulent après le remplacement des "N/A" par des "110". Ces erreurs ne se produisent qu'avec l'exécution de la macro suivante, il faut dire qu'il y a + de 59 000 remplacements. Pas d'erreurs lorsque j'utilise la boîte de dialogue "Remplacer tous"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Workbooks.Open Filename:= _
            "C:\Users\AI\Documents\Class1.csv"
        Cells.Replace What:="N/A", Replacement:="110", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2
     
        ActiveWorkbook.Save
    Voilà à quoi ressemble les résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    110,,,,,,,,,
    0,59,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    0,144,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    0,75,,,,,,,
    Y a t'il un paramètre à changer pour ne pas obtenir toutes ces virgules parasites ? Sachant que si elle se trouve à la deuxième place, elle est légitime.

    J'ai cherché une fonction qui passerait en deuxième rideau pour supprimer les excédentaires, mais je ne sais pas comment paramétrer la fonction REPLACE en VBA avec une position de départ (pour conserver "0,144" et non pas obtenir "0144"), comme le fait par exemple la fonction REMPLACER dans une feuille de calcul.
    C'est peut être simple, mais je m'y casse les dents

    Merci d'avance !!!

  7. #7
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    Pourriez vous déposer un bout de fichier, 10 lignes p.ex., permettant de voir plus clairement le problème et s'il est lié à la longueur du fichier (chacun pourra les multiplier si nécessaire) ou au code.

    Cordialement.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Bonjour,
    Désolé pour le retard...J'ai réduit le fichier à 11 lignes, mais je n'arrive pas le télécharger en pièce jointe (pièces jointes/gestionnaire de fichier/ajouter une pièce jointe), la fenêtre me dit "... fichier non valide".
    En le réduisant à 11 lignes, il fait tout de même 293 ko.

    D'autre part, j'ai remarqué que si j'ouvre le fichier brut qui fait 3600 ko, si je l'enregistre sa taille passe à 1 800 ko...

    Un autre moyen de vous communiquer tout ou partie de ce fichier (1700 lignes)..

    Merci !

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 665
    Points : 14 653
    Points
    14 653
    Par défaut
    bonsoir,
    il faut obligatoirement compresser (ZIP de préférence) tout fichier à joindre
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Merci !

    Voici le fichier intégral, + une version avec dix lignes
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 665
    Points : 14 653
    Points
    14 653
    Par défaut
    merci, mais le format 7z, il faut télécharger un logiciel... le format ZIP est natif sur Windows ("Envoyer vers" dossier compressé sur clic droit du fichier)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Oups...
    Pourquoi faire simple quand on peut faire compliqué ?
    Fichiers attachés Fichiers attachés

  13. #13
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 665
    Points : 14 653
    Points
    14 653
    Par défaut
    Une autre méthode pour remplacer "N/A" avant l'importation des données ?
    je viens de tester le premier code, il fonctionne très bien donc je ne vois pas où tu as pu rencontrer un problème.

    Pour ce qui est du second code, si tu ouvres le fichier avec Excel tu risques fort de rencontrer des problèmes, le fichier csv étant un fichier texte, mieux vaut l'ouvrir en tant que tel c'est à dire avec le premier code.

    Petite remarque: en ouvrant le fichier avec Notepad on remarque quelques caractères bizarres (comme, par exemple, sur les enregistrements 756 à 764 représentés en surbrillance):

    Nom : _2.JPG
Affichages : 78
Taille : 92,8 Ko
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  14. #14
    Expert confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Juin 2012
    Messages
    3 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : retraité
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juin 2012
    Messages : 3 183
    Points : 5 515
    Points
    5 515
    Par défaut
    Bonjour,

    En fait, lorsque l'on utilise l'instruction OpenText il faut absolument mentionner le paramètre Local:=True si l'on veut charger un fichier texte ou csv avec le ; comme délimiteur (sur un pc avec Windows en français). A vérifier aussi: les dates (pas de confusion entre jour et mois, p.ex. 8/1 devenant 1/8).
    Pour votre fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub LoadCsv()
        Workbooks.OpenText Filename:=ThisWorkbook.Path & "\TestDev2.csv", Local:=True
        Cells.Replace What:="N/A", Replacement:="", LookAt:=xlWhole
        '--- quelques problèmes dans la colonne X, signalés par tee_grandbois
        With Range("X:X")
            .Replace What:=Chr(19) & " ", Replacement:="-", LookAt:=xlPart     '--- Range("X756") - caractère DC3 => tiret
            .Replace What:=Chr(25) & " ", Replacement:="'", LookAt:=xlPart     '--- Range("X764") - caractère EM => apostrophe
            .Replace What:=Chr(172) & " ", Replacement:="€", LookAt:=xlPart    '--- Range("X835") - caractère ¬ => €
        End With
        Range("X756").Select
    End Sub
    Cordialement.

  15. #15
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Merci EricDgn ! Merci tee_grandbois !

    Je réponds un peu tard, je suis l'intermittent d'Access, sorry.

    Cela marche impeccable. Le dernier souci rencontré était qu'à la sauvegarde en csv, j'obtenais un fichier avec "," en délimitateur, et les virgules des nombres étaient transformées en "."
    Compliqué ....
    J'ai contourné le blem en sauvegardant en xls.

    J'expose ma "bricole" pour les noobs comme moi :

    J'ai un fichier xlsm qui comporte une macro modifiant le CSV et le sauvegardant en xls.

    Le code du fichier xlsm ("ExportModifNAparContrat.xlsm") :

    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
     
    Sub LoadCsvChgXls()
        Workbooks.OpenText Filename:=ThisWorkbook.Path & "\Export_Complet.csv", Local:=True
        Cells.Replace What:="N/A", Replacement:="", LookAt:=xlWhole
        '--- quelques problèmes dans la colonne X, signalés par tee_grandbois
        With Range("X:X")
            .Replace What:=Chr(19) & " ", Replacement:="-", LookAt:=xlPart     '--- Range("X756") - caractère DC3 => tiret
            .Replace What:=Chr(25) & " ", Replacement:="'", LookAt:=xlPart     '--- Range("X764") - caractère EM => apostrophe
            .Replace What:=Chr(172) & " ", Replacement:="€", LookAt:=xlPart    '--- Range("X835") - caractère ¬ => €
        End With
        Range("X756").Select
    Application.ActiveWorkbook.CheckCompatibility = False
    Application.DisplayAlerts = False
        ActiveWorkbook.SaveAs Filename:= _
            ThisWorkbook.Path & "\Export_Complet3.xls", FileFormat:=xlNormal _
            , Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
            CreateBackup:=False
             ActiveWorkbook.Close
    End Sub
    Puis j'importe avec un bouton dans Access, référence "Ole Automaton" cochée si je ne me trompe :

    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
     
    Private Sub CmdImportUcContrat_Click()
     
        Dim XL_APP As Object
     
         DoCmd.SetWarnings False
     
                Set XL_APP = CreateObject("Excel.Application")
                strMDBPath = CurrentProject.FullName
     
                XL_APP.Visible = False
                        'Ouvre le fichier excel contenant la macro qui ouvre et modifie le fichier Csv
                        XL_APP.Workbooks.Open ("C:\Users\AI\Documents\ExportModifNAparContrat.xlsm")
                        'Exécute la macro
                        XL_APP.Run ("LoadCsvChgXls")
                        XL_APP.ActiveWorkbook.Save
                        XL_APP.ActiveWorkbook.Close
                        XL_APP.Quit
                        Set XL_APP = Nothing
     
        'Lance l'importation de la table issue de la sélection des UC, précédemment enregistrée..
        DoCmd.RunSavedImportExport "Importation-Export_Complet3"
     
        DoCmd.SetWarnings True
    End Sub
    Y'a peut être différent et +simple, mais ça marche

    Encore Merci à vous deux !

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    En fait, il ne faut pas passer par une importation enregistrée pour pouvoir manipuler ultérieurement les données, je pense que l'écrasement du fichier CSV sous le même nom, l'enregistre tout de même quelque part sous un nom différent, ce qui empêche les procédures de se dérouler. Peut être y a t'il une méthode pour pallier à cela, si quelqu'un à une réponse...

    J'ai contourné en supprimant le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        'Lance l'importation de la table issue de la sélection des UC, précédemment enregistrée..
        DoCmd.RunSavedImportExport "Importation-Export_Complet3"
    Et j'ai remplacé à l'origine par une importation dans une table liée au fichier XLS généré, ça , ça marche !
    Bonne journée !

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

Discussions similaires

  1. [AC-2010] Requête Mise à Jour sur champ Texte
    Par dadou5821 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/04/2015, 11h24
  2. Importer fichier texte avec mise en forme sur page Web
    Par Ditrius dans le forum Langage
    Réponses: 6
    Dernier message: 18/10/2010, 16h34
  3. Réponses: 1
    Dernier message: 26/01/2010, 06h23
  4. Mise en forme contenu champ texte
    Par Manuxy dans le forum Langage
    Réponses: 2
    Dernier message: 14/03/2008, 13h04
  5. tri sur champ texte
    Par ridan dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/08/2004, 16h28

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