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 :

Petit coup de main pour une macro XL 2010


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    pationné
    Inscrit en
    Juillet 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : pationné
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 2
    Points : 4
    Points
    4
    Par défaut Petit coup de main pour une macro XL 2010
    Bonjour à tous et toutes,
    J'aurais besoin d'un "furieux" ou d'une "furieuse" pour m'écrire une petite macro-fonction en XL 2010.
    La fonction serait par exemple "tagg( )". Son but : reprendre tous les mots d'une cellule en les séparant d'une virgule.
    Exemple :
    supposons que j'aie dans la cellule "A1" :
    Magnifique sac en cuir de marque Delvaux.
    je voudrais qu'en utilisant la fonction "tagg(A1)" en "A2" par exemple, XL me sorte :
    magnifique, sac, en, cuir, de, marque, delvaux
    Attention, le dernier caractère de la cellule doit impérativement être la dernière lettre du dernier mot (ici, le X de delvaux). Je ne dois ni avoir un espace, ni une virgule.
    Avec cela, je serais déjà très content, MAIS si en plus, la fonction pouvait m'éliminer des mots que je juge inutiles (et que j'aurais stocké quelque part - pourquoi pas dans la macro elle-même) du genre "en - de - la - le - etc, alors ce serait un véritable bonheur pour moi.

    A l'avance, je vous remercie pour vos idées.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir jphostier

    Nul besoin d'être un furieux il suffit de connaitre le langage

    Voici ta fonction
    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
    Function Tagg(Rng As Range)
      Dim Ind As Integer, TabMot() As String
      Dim Result As String, NoStr As String
      ' Initialiser les variables
      TabMot = Split(Rng.Value, " ")
      Result = ""
      NoStr = "en,de,la,le"
      ' Pour chaque mot du tableau
      For Ind = 0 To UBound(TabMot)
        ' Si le mot ne fait pas partie de ceux à supprimer
        If InStr(1, NoStr, TabMot(Ind)) = 0 Then
          ' L'ajouter au résultat
          Result = Result & TabMot(Ind) & ", "
        End If
      Next Ind
      ' Supprimer la dernière virgule et espace
      Result = Left(Result, Len(Result) - 2)
      ' REtourner le résultat
      Tagg = Result
    End Function
    A+
    Dernière modification par Invité ; 24/07/2013 à 10h31. Motif: Suppression de Application.Volatile (instruction inutile)

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 929
    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 : 12 929
    Points : 28 923
    Points
    28 923
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce que tu décris peut être résolu pas la fonction Split.
    Voir ce tutoriel Manipuler les chaînes de caractères en VB6 et VBA Excel et tout particulièrement le chapitre Scinder une chaîne

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 929
    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 : 12 929
    Points : 28 923
    Points
    28 923
    Billets dans le blog
    53
    Par défaut
    Bonjour BrunoM45,
    Je ne vois aucune raison d'utiliser Application.Volatile dans cette procédure.
    Une fonction volatile recalcule chaque fois que l'on modifie la valeur d'une cellule quelconque d'un classeur ouvert, ce qui a pour effet de ralentir l'exécution or ici la fonction ne doit refaire le calcul que si l'on modifie la valeur de la cellule référencée dans l'argument.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour Philippe

    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour BrunoM45,
    Je ne vois aucune raison d'utiliser Application.Volatile dans cette procédure.
    Une fonction volatile recalcule chaque fois que l'on modifie la valeur d'une cellule quelconque d'un classeur ouvert, ce qui a pour effet de ralentir l'exécution or ici la fonction ne doit refaire le calcul que si l'on modifie la valeur de la cellule référencée dans l'argument.
    Très bonne remarque c'est une mauvaise habitude que j'ai

    Dans ce cas, il est effectivement inutile de laisser "Application.Volatile"

    Je modifie mon précédent post

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Peut-être que je n'ai pas bien saisi la demande mais la fonction "Substitue" ne suffirait t'elle pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUBSTITUE(A1;" ";", ")

  7. #7
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 929
    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 : 12 929
    Points : 28 923
    Points
    28 923
    Billets dans le blog
    53
    Par défaut
    Bonjour Dominique,
    Citation Envoyé par casefayere Voir le message
    Peut-être que je n'ai pas bien saisi la demande mais la fonction "Substitue" ne suffirait t'elle pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SUBSTITUE(A1;" ";", ")
    Mis à part les mots que l'on ne souhaites pas avoir comme en,de,la,le mais que l'on pourrait aussi éliminer par un Subsitute ou par Replace en VBA, tu as tout à fait raison (pourquoi faire simple quand on peut faire compliqué).
    J'avais pensé au départ que l'on souhaitait avoir un tableau de ce texte.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/09/2014, 09h32
  2. Petit coup de main pour une meilleur compréhension
    Par b_sky dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 22/06/2011, 18h51
  3. Petit coup de main pour syntaxe
    Par santacrus dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/12/2008, 20h11
  4. besoin d'un coup de main pour une requête ;)
    Par Fabouney dans le forum Requêtes
    Réponses: 3
    Dernier message: 14/11/2005, 23h14

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