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

Excel Discussion :

Un LF ou Chr(10) qui ne veut pas disparaître


Sujet :

Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut Un LF ou Chr(10) qui ne veut pas disparaître
    Bonjour à toutes et à tous

    J'ai besoin de manipuler des chaines de caractères que je reçois via plusieurs CSV que j'importe dans une feuille excel 2016
    et j'ai un "Pu...." de LF dans plusieurs cellule en première position et pas sur toute les cellules. Ce qui perturbe mes traitements.

    je dois faire le ménage, j'ai fouillé sur le forum et trouver plusieurs idées mais aucune de fonctionne ;( dans mon cas. parmi les dernières tentatives :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    ' je teste sur le premier caractère, avec le debugger si copie le string et le colle dans un editeur hexa et que j'examine le string j'ai bien A0 en premiere position
     mais VBA ne semble pas prendre en compte sans doute par ce que caractère est non affichable ????
     
     Nb_CHAR = Len(Worksheets(Produits_F).Cells(i_Prod, SHORT_DESCRIPTION).Value)
           If Left(Worksheets(Produits_F).Cells(i_Prod, SHORT_DESCRIPTION).Value, 1) = Chr(10) Then       
                 Worksheets(Produits_F).Cells(i_Prod, SHORT_DESCRIPTION).Value = Right(Worksheets(Produits_F).Cells(i_Prod, SHORT_DESCRIPTION).Value, Nb_CHAR - 1)
                 Nb_CHAR = Len(Worksheets(Produits_F).Cells(i_Prod, SHORT_DESCRIPTION).Value)
                Worksheets(Phrase_F).Cells(i_Phrase, 1).Value = Replace(Worksheets(Phrase_F).Cells(i_Phrase, 1).Value, Chr(10), "")
            End If
     
    ' donc FIASCO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    'J'ai essayé avec
          Worksheets(Phrase_F).Cells(i_Phrase, 1).Value = Replace(Worksheets(Phrase_F).Cells(i_Phrase, 1).Value, Chr(10), "")
    ' FIASCo
    quelqu'un aurait-il une idée géniale ???

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 114
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu dois remplacer tous les LF, une seule ligne suffit.
    S'il s'agit de remplacer seulement le premier caractère LF présent dans une cellule, je ne vois pas d'autres solution, sauf peut-être par un REGEX, que de passer par une boucle

    Exemple du remplacement de tous les caractères LF présents dans les cellules de la plage B1:B80 de la feuille active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub t()
      Range("B1:B80").Replace What:=Chr(10), Replacement:=""
    End Sub
    [EDIT]

    Exemple de suppression du caractère chr(10) uniquement s'il est en première position. Toujours pour la plage B2:B80 de la feuille active
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim c As Range
      For Each c In Range("B2:B80")
        If InStr(c.Value, Chr(10)) = 1 Then
           c.Value = Mid(c.Value, 2)
        End If
      Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,
    Si tu dois remplacer tous les LF, une seule ligne suffit.
    S'il s'agit de remplacer seulement le premier caractère LF présent dans une cellule, je ne vois pas d'autres solution, sauf peut-être par un REGEX, que de passer par une boucle
    merci pour ton aide Philippe mais ça marche pas et ce n'est pas la faute de ton code que j'ai testé avec un autre caractère.
    Ton code est PARFAIT!

    J'ai juste fait une adaptation à mon code pour le positionnement et le nombre de boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        Worksheets(Produits_F).Activate
        Produits_Dlg = ActiveSheet.UsedRange.Rows.Count                          ' dernière ligne de données
        For Each c In Range("AD2:AD" & Produits_Dlg)                                 ' sélection du range et boucle
            If InStr(c.Value, Chr(10)) = 1 Then
               c.Value = Mid(c.Value, 2)
            End If
        Next
    J'ai fait un suivi pas à pas avec visualisation du contenu des variables
    • c prend bien la valeur initiale de la cellule
    • Mid(c.Value, 2) retire bien le 1er caractère
    • MAIS EN FAIT c'est le test qui ne fonctionne pas, il ne trouve jamais de correspondance dans le test
    • donc il ne va jamais initialiser ==> c.Value = Mid(c.Value, 2)


    Il semblerait que la valeur "A0" qui et contenu dans mon string (LF d'un import CSV UTF8) ne corresponde pas à Chr(10) (voir capture hexa)
    Nom : Capture.PNG
Affichages : 339
Taille : 2,2 Ko

    le code a retiré est bien "A0" et non "0A" qui est le land feed (A0 est présent uniquement dans les champs type Text, ce ne sera pas un code utf8 pour dire que c'es de l'accentué ???
    en regardant dans le détail Chaque cellule de type txt commence par " A0" et se termine par "0D0A")

    et la valeur "A0" semble inconnue dans la table ascii sauf dans la table etendu ou c'est decimale 160 et le carcatère "à"
    je vais teste avec la valeur 160 qui ne risque rien n'a rien

  4. #4
    Membre confirmé
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Janvier 2018
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Philippines

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Janvier 2018
    Messages : 73
    Par défaut Un gros MERCI Philippe et si cela peut aider d"autres....
    d'un apprenti VBA aux autres apprentis VBA

    je crois que l'on a tous un jour où l'autre des problèmes de source de données qui contiennent de mauvais caractères comme LF, retour chariot intempestif dans un champs texte, où dans mon cas un caractère ""parasite"" - "à" valeur décimal "160" hexa "A0", qui est un caractère que je ne croyais trouver qu'en entête de fichier pour dire que c’était encodé en UTF8.

    En fait j'ai retrouvé ce caractère à plusieurs place dans mes champs textes, le confondant avec 0A (LF). Ce qui en analyse de phrase et recherche de concordance avec d'autres me posait problème.

    Donc si vous avez des problèmes de ce genre la table Ascii et indispensable et commencez par rechercher la valeur décimale du code hexa.

    Juste prendre la bonne valeur décimale et ça fonctionne avec le code de Philippe sur la première position (voir son autre solution aussi)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub t()
      Dim c As Range                                                         ' definition de la plage
      Dim d as integer
        Worksheets("Feuille").Activate                                  ' feuille a épurer
        feuille_Dlg = ActiveSheet.UsedRange.Rows.Count      ' derniere ligne la feuille
        d = range ('"B1").value                                            'valeur decimale du caractère-valeur mise en variable si vous voulez saisir la veure diretement en entete de 
                                                                                     ' colonne
        For Each c In Range("B2:B" & feuille_Dlg )                ' selection de la colonne à épurer                                  
                  If InStr(c.Value, Chr(d)) = 1 Then                ' verification que le caractère est là
                        c.Value = Mid(c.Value, 2)                        ' élimination du caractère
                  End If
       Next
    End Sub

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

Discussions similaires

  1. [JScrollPane] qui ne veut pas se mettre en haut a gauche
    Par Cyber@l dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/11/2006, 10h41
  2. Réponses: 9
    Dernier message: 22/09/2006, 17h31
  3. requetes qui ne veut pas passer
    Par suya95 dans le forum Requêtes
    Réponses: 14
    Dernier message: 04/07/2006, 14h17
  4. JOptionPane qui ne veut pas se fermer!
    Par benthebest dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 29/12/2005, 22h05
  5. un fichier qui ne veut pas être supprimé!!!!
    Par en_stage dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 22/10/2005, 01h08

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