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 :

effacé mot si le contenu de cellule est plus grand que 66 caractères


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 541
    Par défaut effacé mot si le contenu de cellule est plus grand que 66 caractères
    Bonjour à vous cher ami du forum,


    Ça fais plus de 2 ans que je n'ai pas programmer et il y a certaines notions que j'ai oublié ou pas encore acquise à fin de pouvoir produire une subroutine qui pourra m'aider dans ma tâche.

    Pour vous mettre en contexte, j'ai une base de donné auquel j'intègre des donnés à partir de excel. Il y a une description longue de 200 caractères et je dois passer à 66 caractères. Sans mettre trop d'information superflux, il faudrait que je coupe les descriptions longues en 66 caractères mais je ne dois pas couper de mots i.e. complètement effacer le mot. LE code doit effacer les derniers mot (car l'information la moins pertinentes de la descriptions est à droite) qui fait que la cellule dépasse 66 caractères

    Donc mon code dois s'exécuter si le nombre de caractères est plus grand que 66 et dois continuer jusqu'à ce qu'il efface le dernier mot à droite qui fait que la description est plus grande que 66. LE dernier caractères de la descriptions ne peut être un espace.


    Ce que je sais c'est que je doit faire une condition (if) la longueur de la ou les cellules sélectionnés est plus grande que 66 caractères (len) je dois faire un do while ou do until ou un autre indicateur afin de recommencer à détruire un caractère jusqu'à ce que le caractère de gauche est un espace. Je dois possiblement faire un trim afin de détruire l'espace seul. Une fois atteins le 66 ou inférieur, je fait la prochaine cellule sélectionnées.


    Je n'ai toujours pas encore fais de Do while ou do until (ce qui sera une première) et comment détruire le dernier caractères d'une string. J'ai essayé bien sûr l'enregistrement de macro mais je m'abstient de vous dire la bêtise qu'il me retourne. Je ne sais pas non plus si il y a une méthode moins compliqué et plus performante que mon raisonnement initiale afin d'arriver au même résultat.

    en vous remerciant d'avance pour votre aide et le temps investit à répondre à ce post.



    amicalement

  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 055
    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 055
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La fonction pour calculer le nombre de caractères dans une chaîne est Len()
    Je n'ai toujours pas encore fais de Do while ou do until (ce qui sera une première)
    A lire La gestion des boucles dans Excel

    et comment détruire le dernier caractères d'une string
    Voir les fonctions d'extractions comme Left, Mid ou Rtrim s'il s'agit de supprimer tous les caractères espacés de droite
    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 éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 541
    Par défaut
    MErci monsieur Tulliez pour votre réponse ...


    oui j'ai lu l'article de silkyroad et même vu des vidéos sur Youtube des boucles. J'ai fais un minimum de recherche avant de soliciter ici les membres de ce magnifique forum.


    Pour enlever les caractères espacer de droite, j'ai mentionné trim dans mon explication ... donc je ne sais que comment enlever l'espace restant une fois les caractère détruits.


    Je ne sais pas plus comment détruire (supprimer) un caractère qui n'est pas un espace à partir de la droite ... ce que j'ai vu c'est de remplacer un mot. Donc, si je remplace un mot, je dois être capable de définir le mot, ce qui me ramène un autre problème et je risque de complexifier mon code


    malheureusement, je suis au point de départ.

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 541
    Par défaut
    À titre indicatif, je vous met mon code ... `

    j'atteins mon 66 caractères avec la boucle mais il faut que je continue jusqu'à la valeur du caractères sois différent à espace.


    J'utilise la valeur de cellule, mais il faudrait que j'utilise la valeur d'un caratère ... ce que je ne maîtrise pas encore ...


    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
    Sub test_coupe66()
     
    Dim cell As Variant
    Dim tmp As String
     
    Application.ScreenUpdating = False
     
     
    For Each cell In Selection.Cells
     
     
        If Len(ActiveCell) > 66 Then
     
            Do Until Len(ActiveCell) <= 66
     
                tmp = cell.Value
     
                cell.Value = Left(tmp, Len(tmp) - 1)
     
            Loop
     
        End If
     
     
     
     
    Next cell
     
     
    Application.ScreenUpdating = True
     
     
    End Sub
    Si je fais le tout sans la boucle, j'Arrive à ce résultat et il me reste à continuer jusqu'à ce que la valeur sois espace et je trim


    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
    Sub test_coupe66()
     
    Dim cell As Variant
    Dim tmp As String
     
     
    Application.ScreenUpdating = False
     
     
    For Each cell In Selection.Cells
     
     
        If Len(ActiveCell) > 66 Then
     
                tmp = cell.Value
     
                cell.Value = Left(tmp, 66)
     
        End If
     
     
     
    Next cell
     
     
    End Sub
    Encore plus simple, je pourrais faire le tout sans boucle ... i.e. trouver le dernier espace en dessous de 66 et retourner un left du nombre -1 ... il me reste trouver à faire le tout en code. Dois-je faire absolument une boucle jusqu'à e que je trouve l'espace ... ça je l'ignore

  5. #5
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 541
    Par défaut
    EN utilisant ma dernière façon de pensée, j'arrive à un résultat sans loop qui est à mes yeux pas mal plus optimale



    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
    Sub test_coupe66_v2()
     
    Dim cell As Variant
    Dim tmp As String
    Dim i As Integer
    Dim lastposition As Integer
     
    Application.ScreenUpdating = False
     
     
    For Each cell In Selection
     
     
        If Len(cell) > 66 Then
     
                tmp = cell.Value
     
                cell.Value = Left(tmp, 66)
     
                lastposition = InStrRev(cell, Chr(32))
     
                tmp = cell.Value
     
                cell.Value = Left(tmp, lastposition - 1)
     
        End If
     
     
    Next cell
     
     
    End Sub

    Je fais mon code en 3 étapes, c'Est à dire que je coupe à 66 caractères et par la suite, je trouve la dernière position de mon espace et je recoupe ...


    Avant de cliquer sur résolu, comment faire pour sauter des étapes i.e. trouver la première espace plus petit que 66 caractères et couper ???




    merci encore

  6. #6
    Membre extrêmement actif Avatar de mjpmjp
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2012
    Messages
    1 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Alpes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2012
    Messages : 1 133
    Par défaut
    bonjour,

    regarde "split" , il découpe un texte en "morceau" séparé par un caractère ... ici le caractère est un espace , soit " "...
    tous les "morceaux" sont copiés dans un tableau (attention ne déclare pas le tableau )
    exemple : montableau = split("le texte" , " ")

    ainsi tu peu , dans une boucle for..next , concaténer les morceaux en provenance du tableau en contrôlant (avant ou après) la longueur du morceau (avec "len")

    regarde aussi "replace" , par exemple data = replace(data , " "," ") .. ici , on replace 1 espace à la place de 2 espace

    @+JP
    Caractéristiques (WEB) phpMyAdmin 4-74 , PHP 5-631 , Apache 2-427 , MySQL 5-719
    Présentation NAS DS-3615xs + 20Go , DSM 6.1.6-15266 Up1 , 12 * WD 4To WD4000F9YZ (10 raid 6+ )+(2 raid 1+) , LinkSys comutateur-switch lgs528p-eu , Onduleur UPS 720W Power Boxx Lcd (4*UPS + 4*MOD)
    Mes contributions (EXCEL) Form GRAPHIQUE: Gestion des boutons , Liste Onglet dynamique...GESTION de FILM

  7. #7
    Membre éclairé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2017
    Messages
    541
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2017
    Messages : 541
    Par défaut
    Merci beaucoup pour votre réponse mjpmjp


    J'ai oublier de considéré un élément en essayant mon code i.e. il y a des cas dont il pourrait avoir une virgule indésirable donc je vais également évaluer si le dernier caractères est , et l'enlever le cas échéant.



    Pour le array, est-ce qu'il y a un avantage de l'utilisé au d'utiliser right ou left ?



    merci !!!

Discussions similaires

  1. Ma div de gauche est plus grande que celle de droite sous IE8
    Par beegees dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 26/12/2013, 12h56
  2. Réponses: 4
    Dernier message: 16/04/2013, 17h43
  3. 8 est plus grand que 10
    Par legaramir dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/07/2010, 18h34
  4. Réponses: 8
    Dernier message: 24/04/2009, 19h13
  5. 8 est plus grand que 28 ??!!
    Par n@n¤u dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/05/2006, 16h14

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