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 :

Comment exécuter une macro sur une sélection [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 226
    Par défaut Comment exécuter une macro sur une sélection
    Bonjour à tous,

    J'ai un petit soucis embêtant.

    J'aimerais créer une procédure qui permet de mettre une sélection en majuscule ...
    Bref ... une bétise.

    Mais voilà, si vous sélectionnez un texte dans une cellule, vous ne savez rien faire.
    Vous êtes obligé de quitter la cellule (vous perdez votre sélection)...

    Raison: Je ne veux pas changer tout le contenu de la cellule mais juste une partie (ma sélection).

    Toutes les idées sont les bienvenues

    De plus, lorsque j'utilise l'instruction VBA "Selection", je reçois le contenu complet de la cellule. Pas mon texte.

    Exemple:

    Dans la cellule A1 j'ai la valeur : "Qu'il est beau ce lac dans la vallée. C'est superbe! Surtout avec ce couché de Soleil."

    Maintenant, j'aimerais mettre (par macro) le mot 'superbe' en majuscule.

    Je sélectionne le mot et que la macro mette ce mot en majuscule.


    Voilà ...
    Merci à tous pour votre aide
    André

  2. #2
    Membre émérite
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Juin 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2013
    Messages : 563
    Par défaut
    Bonjour,

    Etant donné le comportement d'Excel lors de l'édition d'une cellule, il ne me semble pas que cela soit possible.
    Mais pourquoi ne pas utiliser le raccourci clavier Ctrl+G ?

    Si votre problème est que ce raccourci ne met pas le texte en gras, mais bascule la valeur de la propriété Bold (ou dit autrement, avec Ctrl+G, vous pouvez aussi mettre du texte en non gras), alors il ne vous reste plus qu'une UserForm :
    • L'utilisateur sélectionne une cellule et lance une macro.
    • Ladite macro affiche une UserForm et y rempli une TextBox avec le texte de la cellule sélectionnée.
    • L'utilisateur sélectionne la partie de texte qui l'intéresse puis valide la UserForm.
    • Les propriétés SelStart et SelLength peuvent alors être utilisées pour déterminer quelle partie du texte est sélectionné et puis appliquer la mise forme souhaitée à la cellule Excel.

    Cdt

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    je sais pas si ça va aider:
    en colonne A j'ai une chaîne de caractère et sur la même ligne et colonne B j'écris un mot que je veux mettre en gras en couleur rouge dans la chaine de caractère en colonne A
    j'utilise ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub colorer()
    Dim i As Long
    With Sheets("feuil1")
    i = .Range("A" & Rows.Count).End(xlUp).Row
    For L = 2 To i
    Chaine = .Cells(L, 1)
    Position = InStr(Chaine, .Cells(L, 2))
    Longueur = Len(.Cells(L, 2))
    .Cells(L, 1).Characters(Start:=Position, Length:=Longueur).Font.Color = RGB(224, 0, 0)
    .Cells(L, 1).Characters(Start:=Position, Length:=Longueur).Font.Bold = True
    Next L
    End With
    End Sub
    Images attachées Images attachées

  4. #4
    Membre chevronné
    Homme Profil pro
    Formateur bureautique
    Inscrit en
    Janvier 2021
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Formateur bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2021
    Messages : 302
    Par défaut Aide
    Bonjour
    la réponse de BEN_L m'a particulièrement intéressé (merci !!!)
    du coup j'ai voulu tester et la chose et ai réussi donc autant en faire profiter !

    principe d'utilisation :
    • on se met sur la cellule contenant le texte et on utilise le bouton sur la feuille
    • cela lance un userform en récupérant le texte de la cellule
    • sélectionner une portion de texte dans la textbox et appuyer sur CONV MAJ
    • éventuellement recommencer l'opération sur d'autres parties du texte
    • pour valider appuyer sur VALIDER sinon pour annuler, on peut utiliser la croix
    Fichiers attachés Fichiers attachés

  5. #5
    Membre émérite Avatar de Alex020181
    Homme Profil pro
    Prestataire informatique développeur d'application Excel, Access, VBA
    Inscrit en
    Juin 2012
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Prestataire informatique développeur d'application Excel, Access, VBA

    Informations forums :
    Inscription : Juin 2012
    Messages : 601
    Par défaut
    Bonjour,

    On peut tout à fait travailler dans certains cas sur une partie du texte de la cellule uniquement.

    Exemple:

    Mettre une partie du texte en gras
    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").Characters(1, 3).Font.Bold = True

    Characters(X, Y); X est l'index du premier caractère à traiter et Y est la longueur de la chaîne à traiter

    Mais pour mettre uniquement un mot en majuscule dans une cellule sans toucher au reste de son contenu je ne vois pas non plus comment faire directement à partir d'une sélection de texte.
    Par défaut

    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
     
    Dim mot_recherche As String
     
    mot_recherche = "superbe"
     
    Range("A1") = Replace(Range("A1"), mot_recherche, UCase(mot_recherche))
     
    End Sub

    Contournement mais ce n'est pas réellement la réponse précise sur une sélection
    - Créer un tableau dans une feuille paramètre de 2 colonnes (Cellule | mot à majusculer)
    - Créer une requête événementiel "onchange" sur la feuille qui va parcourir le tableau paramètre et remplacer le mot voulu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1") = Replace(Range("A1"), mot_recherche, UCase(mot_recherche))
    Ce n'est pas réellement une macro qui met en forme sur une sélection comme tu le souhaites mais bon. Tu auras le même résultat.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2015
    Messages : 226
    Par défaut Le problème est résolu
    Bonsoir à tous,

    J'ai mis vos idées en pratique et cela fonctionne

    J'ai ajouté un UserForm avec un champ texte et 2 boutons:
    - un bouton qui va mettre le texte sélectionné en majuscule
    - un bouton qui remet à jour la cellule.

    Voici le code qui met la sélection en majuscule

    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
     
    Private Sub Bt_Maj_Click()
     
        Dim NouveauTexte As String, TexteOriginal As String, TmpStr As String
        Dim position As Long
     
        TmpStr = ""
     
        ' La variable 'Contenu' est en réalité le champ texte
     
        If Contenu <> "" Then
            If Contenu.SelStart >= 0 And Contenu.SelLength > 0 Then
                TexteOriginal = Mid(Contenu, Contenu.SelStart + 1, Contenu.SelLength)
                NouveauTexte = UCase(TexteOriginal)
     
                TmpStr = Contenu
                position = InStr(Contenu.SelStart + 1, Contenu, TexteOriginal)
     
                TmpStr = Left(Contenu, position - 1)
                TmpStr = TmpStr & Mid(Contenu, position + Len(TexteOriginal))
                TmpStr = Left(TmpStr, position - 1) & NouveauTexte & Right(TmpStr, Len(TmpStr) - position + 1)
     
                Contenu = TmpStr
            End If
        End If
    End Sub
    C'est une usine à gaz pour pas grand chose.
    Mais bon ... Cela fonctionne. C'est le principal.

    Merci à tous pour votre aide.
    André

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 16/07/2020, 16h47
  2. Réponses: 5
    Dernier message: 05/02/2015, 07h36
  3. Réponses: 5
    Dernier message: 08/01/2007, 21h03
  4. Réponses: 4
    Dernier message: 19/09/2006, 11h35

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