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 :

TRIM VS Application.TRIM [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut TRIM VS Application.TRIM
    BONJOUR a tous
    dans une autre discussion MarcL a apporté une solution interessante mais souleve une question

    trim /Application.trim

    j'ai fait une petite experience

    je met la lettre "A" en D1 ,"B" en F1 , "C" en G1


    dans la macro je vais utiliser un split soit sur une chaine(string) soit le( join() de la plage D1:G1 donc un string)
    et je vais tester exactement la meme chose et de la meme maniere avec la plage out la chaine avec separateur vbtab ou espaces
    le resultat de ces tests est placé en colonne A:C

    j'aimerais bien savoir quel est le caractere de separation dans la plage car en string le resultat est différent??

    ou
    est ce que dans cet exercice application.trim exercerait une sorte de callback executé l'ors de l'evenement calculate pour chaques items??

    pour info de sur je sais que les separteur colonne dans la copy d'un range recupéré au format text dans le clipbord est vbtab

    test de demonstration
    mettre la lettre "A" en D1 ,"B" en F1 , "C" en G1


    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 TEST6()
        tableau1 = Split(Trim("a b c"))
        tableau2 = Split(Application.Trim("a b c"))
        tableau3 = Split(Trim("a" & vbTab & vbTab & "b" & vbTab & "c"))
        tableau4 = Split(Application.Trim("a" & vbTab & vbTab & "b" & vbTab & "c"))
        tableau5 = Split(Application.Trim(Join(Application.Index([d1:g1].Value, 0))))
        tableau6 = Split(Trim(Join(Application.Index([d1:g1].Value, 0))))
        Range("A1:c1") = tableau1
        Range("A2:c2") = tableau2
        Range("A3:c3") = tableau3
        Range("A4:c4") = tableau4
        Range("A5:c5") = tableau5
        Range("A6:c6") = tableau6
    End Sub
    oui j'aimerais bien savoir
    Nom : Capture.JPG
Affichages : 1010
Taille : 59,2 Ko
    pour plus d'information sur la raison de ma question un petit test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test7()
    stringplage = Join(Application.Index([d1:g1].Value, 0))
    stringtext1 = "a" & "  " & "b" & " " & "c"
    stringtext2 = "a" & vbTab & vbTab & "b" & vbTab & "c"
    result1 = stringtext = stringplage
    Debug.Print "le resultat du test stringtext1(=""" & stringtext1 & """)par raport a stringplage est " & result1
    result2 = stringtext = stringplage
    Debug.Print "le resultat du test stringtext2(=""" & Replace(stringtext2, vbTab, " VbTab & ") & """)par raport a stringplage est " & result2
    End Sub
    resultat
    le resultat du test stringtext1(="a b c")par raport a stringplage est Faux
    le resultat du test stringtext2(="a VbTab & VbTab & b VbTab & c")par raport a stringplage est Faux
    avouez quand meme que c'est deconcertant

    et pour appuyer mes certitudes voila le string de la copy de la plage en question récupérer dans le clipboard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test8()
    Range("D1:G1").Copy
    Debug.Print Replace(CreateObject("htmlfile").parentwindow.clipboardData.GetData("Text"), vbTab, " vbTab ")
    End Sub
    resultat du clipboard
    A vbTab vbTab B vbTab C
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Salut Patrick !

    La réponse est déjà en toutes lettres dans l'aide d'Excel de la fonction SUPPRESPACE (Application.Trim en VBA)
    et vu son nom explicite, elle ne gère que les espaces et rien d'autre, pas même une pauvre tabulation ! …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    on est bien d'accords MarcL

    alors pourquoi ca fonctionne avec le join de la ligne et non la recuperation de la ligne en string du clipboard


    tu n'a pas compris ma question en entier visiblement



    # A B C D E F G
    1 A B C
    2
    a quel moment la plage("D1:G1") dans mon exemple devient "A*B*C" les etoiles etant des espaces bien sur

    la recuperation dans une boucle n'ajoutant pas d'espace
    la recuperation dans le clipboard c'est des vbtab les separateurs
    join SANS ARGUMENT ajoute il des espaces?
    c'est ca ma question EN FAIT
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Oui comme pourtant indiqué dans l'aide VBA, l'espace est le délimiteur par défaut de Join & Split

    Je comprends vite mais il faut bien m'expliquer !

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ok d'acord pour le caractere par defaut de split ou join

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    t = "abc"
    x = Join(Split(t), ",")'split sans argument donc caractere par defaut
    Debug.Print x
    End Sub
    pour le spit donc walouh walouh sans argument

    par contre join OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test2()
    t = Array("A", "", "B", "C")
    st = Join(t)
    Debug.Print st
    End Sub
    il remplace donc les tabulation par des espaces dans le join d'un range

    et le application.trim
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test3()
    t = Array("A", "", "B", "C")
    stspaces = Join(t)
    st = Application.Trim(Join(t))
    Debug.Print "stspaces :" & stspaces
    Debug.Print "st       :" & st
    End Sub
    attention application.trim dans l'exemple ci dessus englobe bien le tout et pour le test le join donne bien un double espace dans la chaine


    Nom : Capture.JPG
Affichages : 943
Taille : 90,1 Ko
    et le application.trim englobant le join suprime les espaces en doublons ce qui n'est pas la fonction exacte qui lui est donné dans l'aide selon tes dires
    ayant trouvé trimL,TrimR trim etc... sauf Application.Trim je ne peux que te faire confiance
    l'aide en ligne pour 2007 ayant été déactivé je ne peux aller plus loin dans la recherche

    j'ai trouvé par contre WorksheetFunction.Trim
    voila ce que l'aide en dit
    RemarquesImportant La fonction TRIM a été conçue pour
    supprimer le caractère d'espace ASCII 7 bits (valeur 32) du texte. Dans le jeu
    de caractères Unicode, il existe un caractère d'espace supplémentaire appelé
    espace insécable, dont la valeur décimale est 160. Ce caractère est généralement
    utilisé dans les pages Web sous la forme de l'entité HTML  . En elle-même, la fonction TRIM ne supprime pas ce
    caractère d'espace insécable. Pour découvrir un exemple de suppression de
    caractères d'espace dans le texte, reportez-vous à la section







    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    pour le spit donc walouh walouh sans argument
    Ben non pas walou pour Split vu que ta chaine ne comporte pas d'espace, m'enfin ‼  
    Essayer au moins logiquement avec "a b c" …


    Citation Envoyé par patricktoulon Voir le message
    il remplace donc les tabulation par des espaces dans le join d'un range
    Il ne remplace rien du tout, il assemble juste les données avec un délimiteur !  


    Citation Envoyé par patricktoulon Voir le message
    et le application.trim englobant le join suprime les espaces en doublons
    ce qui n'est pas la fonction exacte qui lui est donné dans l'aide selon tes dires
    Oui pour la troisième fois dans l'aide d'Excel et non pas celle de VBA !
    Un Excel bien installé a ses aides en local, pas besoin d'être connecté au net …
    (C'est vrai que depuis la version 2013 … Je ne sais pas par contre pour la version 2016.)

    Extrait de l'aide d'Excel donc :

    SUPPRESPACE

    Supprime tous les espaces de texte à l'exception des espaces simples entre les mots.

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ok
    Il ne remplace rien du tout, il assemble juste les données avec un délimiteur !
    ca sous entend alors que la fonction copy assemble les données avec vbtab pour separateur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Coucou à tous

    Je ne sais pas du tout (je le devine un peu, mais ...) quelle espèce de promenade est "envisagée".
    Je ne fais que passer, mais invite à bien distinguer chaque "chose" et à ne pas confondre double-patte (la propriété de cellules) et patachon (comment les valeurs sont stockées en mémoire et séparées entre elles en mémoire)
    Un array est une suite continue de valeurs stockées différemment en mémoire selon qu'elles sont des numériques (occupant donc toujours le même nombre x d'octets selon leur type numérique) on passe ainsi d'une valeur à l'autre tous les x octets) ou des chaînes de caractères, alors séparées entre elles par un caractère NULL de terminaison.
    Un tableau dynamique est quant à lui un array d'arrays
    A partir de là (et si mon petit doigt a su me dire ce qui n'est pas dit) : si l'on veut travailler sérieusement (y compris et surtout pour "joindre"), c'est en mémoire, qu'il faut travailler et non avec les propriétés des cellules.
    Je vous conseille cette lecture :
    http://www.samsvb.co.uk/index.php?pa...es=Lesson%2030
    ce qui y est dit est très loin d'être complet, mais c'est celle-là, que j'ai choisie car elle m'a paru être la plus "compréhensible" par un plus grand nombre.
    Ce sera ma seule incursion dans la présente discussion.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    en fait trim est une méthode de VBA, VBA.trim qui correspond à LTRIM(RTRIM(" a ")) qui supprime les espace à droite et à gauche du texte!

    Application.Trim correspond du point de vue Excel à supprime espace qui supprime tous les espaces inutiles! "A B" reste "A B" "A________B" devient "A B"

    trim seule est un héritage (dans le sens héritage de classe) de la librairie VBA.TRIM

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    re
    Bonjour Robert
    oui j'avais compris ca, il y a aussi worksheetfunction.trim

    c'est la facon de stocker en memoire visiblement qui m'a trompé du moins selon un intervenant je poursuivrais mes recherches sur ce point
    pour join c'est ok sans argument c'est un chr(160)

    il faudrait que je retrouve ta contrib sur l'exploitation de clipboard(recup de texte) avec les api une partie de ce code me serait utile pour recupérer le texte tel qu'il est dans le clipboard
    d'autre tests me font soupconner la presence du char(7) quand meme a l'interieur
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  11. #11

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

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Je rappelle :
    1) comme déjà dit par d'autres, que la fonction split utilise par défaut le séparateur espace
    2) que la fonction Join utilise également par défaut le séparateur espace. Mais, contrairement à la fonction Split, ce séparateur peut être forcé à ""
    et donc (exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Join(Application.Index([C8:G8].Value, 0, ""))
    affichera directement "AB" si par exemple D8 = "A" , F8 = "B", les cellules C8, et E8 étant vides
    (Et là, on ne joue pas avec ce qui est stocké en mémoire, mais directement avec la valeur des propriétés).

  13. #13
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Merci Robert mais c'est pas celle la
    je parle de celle qui utilise les api que tu utilisais avant
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  14. #14
    Invité
    Invité(e)

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/09/2005, 09h55
  2. [VB.NET] Utiliser le TRIM dans un fichier?
    Par Pleymo dans le forum Windows Forms
    Réponses: 4
    Dernier message: 21/03/2005, 17h12
  3. fonction trim
    Par didier.cabale dans le forum SQL
    Réponses: 3
    Dernier message: 25/01/2005, 10h15
  4. Equivalent de la fonction trim
    Par PCHINK dans le forum C
    Réponses: 6
    Dernier message: 21/03/2004, 18h02
  5. trim
    Par divableue dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/11/2003, 14h01

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