Mettre majuscule après point automatiquement

Résolu
marieasd Messages postés 15 Statut Membre -  
Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour tout le monde !

Étant (très) débutante en VBA, je suis à la recherche faune fonction (ou procédure, je ne sais pas) permettant de mettre des majuscules automatiquement après les points dans mon document Excel.

J'ai deja fouiller partout sur internet et je reste sans réponse, j'espère donc trouver la solution à mon problème grâce à ce message !

Je vous remercie par avance de vos réponses, bonne journée

10 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour à tous

    Si le point est collé au caractère suivant, la correction automatique ne fonctionne pas (du moins sur mon vieil excel 2003)
    Une petite macro
    http://www.cjoint.com/c/GGoojN7wleB

    Cdlmnt
    5
    1. marieasd Messages postés 15 Statut Membre
       
      Merci beaucoup pour votre aide ! Je teste ce code lundi !
      0
  2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour le Forum

    Bonjour ccm81, chez moi ton code ne fonctionne pas : il ajoute un majuscule après le point sans supprimer la minuscule correspondante.

    De toute façon, en français, une phrase se termine par un point mais la suivante du même paragraphe doit toujours commencer par un espace avant la majuscule. Et la première lettre du paragraphe doit aussi commencer par une majuscule.
    Voici ton code modifié pour répondre à la demande initiale:
    Option Explicit
    Public Sub ok()
    Dim plage As Range, cel As Range, s As String, r As Long
    Set plage = Selection
    For Each cel In plage
      s = cel.Value
      Mid(s, 1, 1) = UCase(Mid(s, 1, 1)) 'début de paragraphe
      r = InStr(1, s, ". ")
      While r > 0 And r <> Len(s)
        Mid(s, r + 2, 1) = UCase(Mid(s, r + 2, 1)) 'début de phrase
        r = InStr(r + 1, s, ". ")
      Wend
      cel.Value = s
    Next cel
    End Sub


    2
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Amélioration du code ci-dessus :
      Prise en compte des paragraphes dans la cellule (LF et/ou CRLF) et des espaces insécables en début de phrase (après le point).

      Option Explicit
      Public Sub ok()
      Dim plage As Range, cel As Range, s$, r&
      Set plage = Selection
      For Each cel In plage
        s = cel.Value
        Mid(s, 1, 1) = UCase(Mid(s, 1, 1))
        r = InStr(1, s, ".")
        While r > 0 And r < Len(s)
          Select Case Mid(s, r + 1, 1)
            Case " ", Chr(160), Chr(10)
              Mid(s, r + 2, 1) = UCase(Mid(s, r + 2, 1))
            Case Chr(13)
              If Mid(s, r + 2, 1) = Chr(10) Then
                Mid(s, r + 3, 1) = UCase(Mid(s, r + 3, 1))
              End If
          End Select
          r = InStr(r + 1, s, ".")
        Wend
        cel.Value = s
      Next cel
      End Sub
      0
    2. marieasd Messages postés 15 Statut Membre
       
      Merci énormément !!! Je teste tout cela lundi ! Bonne soirée !
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Salut Patrice,

    exact, j'ai taillé (à droite) un peu grand
    bon, je vais quand même donner le code correct

    Public Sub ok()
    Dim plage As Range, cel As Range, s As String, r As Long
    Application.ScreenUpdating = False
    Set plage = Selection
    For Each cel In plage
    s = cel.Value
    r = InStr(1, s, ".")
    While r > 0 And r <> Len(s)
    s = Left(s, r) & UCase(Mid(s, r + 1, 1)) & Right(s, Len(s) - r - 1)
    r = InStr(r + 1, s, ".")
    Wend
    cel.Value = s
    Next cel
    End Sub


    Bonne soirée à tous
    2
  4. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Comme son nom l'indique, la correction automatique fait ça automatiquement.

    Cordialement
    Patrice
    0
    1. marieasd Messages postés 15 Statut Membre
       
      Malheureusement non, ça serait mieux mais ce n'est pas le cas.
      0
    2. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      C'est le cas pour les majuscules de début de phase (sauf la premiere de la première phrase).
      0
    3. marieasd Messages postés 15 Statut Membre
       
      Il s'agit d'un copier coller d'informations dans un document de synthèse, or le texte initiale ne comporte pas de majuscules après les points, et lors du recopiais, cela ne les met pas automatiquement...
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, peux-tu nous donner plus d'information sur la structure de ton document, et décrire comment tu utiliserais la fonction ou la procédure?
    0
    1. marieasd Messages postés 15 Statut Membre
       
      Il s'agit d'un regroupement de données à partir d'un tableau dans un nouveau tableau, sous forme de recopie. Je souhaiterai que la fonction/procédure détecte les points afin de mettre en majuscule la lettre la suivant.
      Merci, cordialement.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > marieasd Messages postés 15 Statut Membre
         
        si c'est une fonction, tu va l'utiliser pour obtenir un texte modifié dans la cellule où tu mets la fonction.
        pour comprendre le principe d'utilisation d'une fonction dans Excel, tu peux tester la fonction "majuscule". cela te conviendrait-il d'avoir une fonction "mloumaj" que tu pourrais utiliser comme la fonction majuscule, mais qui mettrait uniquement en majuscule la première lettre suivant un point?
        si c'est une procédure, la procédure peut être plus intelligente, elle peut modifier une ou plusieurs cellules existantes, recopier d'une cellule à l'autre, automatiquement parcourir ton fichier, ...
        tu expliques que c'est un un regroupement de données à partir d'un tableau dans un nouveau tableau.
        comment vas-tu "regrouper"? fais-tu cela une seule fois, plusieurs fois, ...
        0
    2. marieasd Messages postés 15 Statut Membre
       
      Merci de votre aide. Le regroupement se fait à partir d'une "mise à jour" dont nous possédons déjà le code (il recopie les données d'un tableau vers un nouveau dans un autre document).
      La mise à jour est faite plusieurs fois par jour.
      Le code que j'ai besoin est similaire à celui que cherchait cette personne : https://www.excel-downloads.com/threads/mettre-une-majuscule-après-un-point-en-vba.227500/ ; mais les réponses n'ont pas fonctionnées sur mon programme, je ne sais pas pourquoi...
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > marieasd Messages postés 15 Statut Membre
         
        voici une fonction qui fait cela:
        Option Explicit
        Function mloumaj(phrase As String) As String
        Dim i As Integer
        Dim aprespoint As Boolean
        Dim char As Integer
        
            mloumaj = phrase
            aprespoint = False
            For i = 1 To Len(mloumaj)
                char = Asc(Mid(mloumaj, i, 1))
                If char = Asc(".") Then
                    aprespoint = True
                Else
                    If aprespoint Then
                        Select Case char
                            Case Asc(" ")
                            Case Asc("a") To Asc("z")
                                If aprespoint Then
                                    'remplacer le caractere par la majuscule correspondante
                                    mloumaj = Left(mloumaj, i - 1) + UCase(Mid(mloumaj, i, 1)) + Right(mloumaj, Len(mloumaj) - i)
                                    aprespoint = False
                                End If
                            Case Else
                                aprespoint = False
                        End Select
                    End If
                End If
            Next i
        End Function
        0
    3. marieasd Messages postés 15 Statut Membre
       
      Merci, merci, merci !! J'essaierai le code lundi, bonne soirée à vous !
      0
  7. sylvain
     
    Bonjour mlou51,

    Dans ton message du 14 juillet à 15:33, tu as mis un lien sur l'article
    « Mettre une majuscule après un point en VBA » ; j'ai lu ce code VBA,
    et tu as dû voir que ça met une majuscule après tous les caractères
    de la variable mestrucs. C'est inapproprié pour « ; » et « : », mais
    c'est valable de le faire après ces 3 caractères « .!? » ; le code VBA
    que j'ai réalisé fait cela : https://mon-partage.fr/f/yDOxVIno/

    ----------------------------------------

    Sur la feuille, il y a une phrase en B2 sans aucune majuscule ;
    cette phrase est aussi en dessous, jusqu'en B32, avec parfois
    des cellules vides entre elles ; c'est pour te montrer que
    la sub ne sera pas gênée par des cellules vides.

    Sans que tu doives faire une sélection préalable, fais juste
    Ctrl e => travail fait : toutes les phrases ont les majuscules
    aux bons endroits.

    Tu peux bien sûr remplacer les phrases par celles de ton choix.

    ----------------------------------------

    Alt F11 pour voir la macro, puis revenir sur Excel.

    Si tes phrases sont dans une autre colonne que la colonne B,
    c'est très facile d'adapter la macro.

    Si besoin, tu peux me demander une adaptation
    ou un complément d'informations.

    ----------------------------------------

    Merci de me dire si ça te convient.

    Cordialement.
     
    0
  8. marieasd Messages postés 15 Statut Membre
     
    Re-bonjour !

    J'ai essayé tous les codes que vous m'avez donné, or... Aucun ne fonctionne sur le document que je dois traité...
    L'erreur vient sans doute de moi, mais je ne comprends pas d'où.
    Les cellules sur lesquelles je dois ajouter les majuscules après les points sont toutes celles de la colonne L, si jamais ça joue.
    Pourtant j'ai bien compilé et exécuter mais non... Il reste capricieux.

    Merci quand même pour toutes vos réponses !
    0
    1. sylvain
       
       
      Bonjour Marie,

      Dans mon fichier, les phrases sont en colonne L, à partir de la ligne 2.

      Fichier Excel 2007 : https://mon-partage.fr/f/ulKpjemE/

      ----------------------------------------

      Sur la feuille, il y a une phrase en L2 sans aucune majuscule ;
      cette phrase est aussi en dessous, jusqu'en L32, avec parfois
      des cellules vides entre elles ; c'est pour te montrer que
      la sub ne sera pas gênée par des cellules vides.

      Sans que tu doives faire une sélection préalable, fais juste
      Ctrl e => travail fait : toutes les phrases ont les majuscules
      aux bons endroits.

      Tu peux bien sûr remplacer les phrases par celles de ton choix.

      ----------------------------------------

      Alt F11 pour voir le code, puis revenir sur Excel.

      Dans la sub Essai() :
      la colonne est L et la 1ère ligne (de la 1ère phrase) est 2 ;
      si besoin, change le "L" et le 2 de cette ligne de code :
      Const col As String = "L": lig1 = 2

      La dernière ligne (dlig) n'a pas besoin d'être adaptée
      car elle est détectée automatiquement.

      ----------------------------------------

      Merci de me dire si ça te convient.

      Cordialement.
       
      0
      1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784 > sylvain
         
        Bonjour Sylvain,

        Seuls le point et le point d'interrogation sont des ponctuation de fin de phrase qui entrainent donc une majuscule dans la phrase suivante. Quoique, comme le point est aussi employé pour terminer une abréviation, il est très difficile d'élaborer une macro correcte ; il est préférable d'ignorer ce dernier cas.
        Hélas ! pour le point d'exclamation c'est aussi très difficile ! Il ne faut pas de majuscule lorsqu'il s'agit d'une interjection ou d'un exclamation contenue dans une phrase (cf phrase précédente). Ce n'est que lorsqu'il termine une phase exclamative que la phrase suivante commence par une majuscule.
        Par contre, tous les paragraphes doivent commencer par une majuscule.
        0
      2. sylvain > Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention  
         
         
        @Patrice33740,

        Tu as raison pour tout, notamment : le point qui termine une abréviation et les
        difficultés concernant le point d'exclamation ; mais là, il faudrait que le VBA
        soit un langage d'intelligence artificielle ! comme le Lisp par exemple.

        Aussi, je préfère laisser mon code VBA tel quel ; mais Marie pourra
        bien sûr l'adapter comme elle préfère (voir infos plus loin).

        Pour les espaces insécables ou pour les retours de paragraphe, je ferai
        une adaptation si Marie me dit qu'elle en a besoin.

        --------------------------------------------------------

        Dans mon code VBA, voici la 1ère ligne de la fonction SetMajuscules() :

          Const signes As String = ".!?"
        

        Dans la suite du code, je teste un par un ces caractères, suivi d'un espace.

        Donc une lettre qui suivra ". ", "! " ou "? " sera mise en majuscule ;
        je laisse à Marie le soin d'ajouter ou supprimer les caractères
        (à détecter) qui lui conviennent le mieux.

        @Marie : le code s'adapte automatiquement à la longueur
        de la constante chaîne de caractères signes ; n'oublie pas
        de bien lire les indications de mon message de 13:08.
         
        0
  9. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    L'erreur vient sans doute de moi, mais je ne comprends pas d'où.


    Peux tu envoyer un bout de ton fichier anonymisé, mais avec la même structure que l'original,sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu
    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
    en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

    Cdlmnt
    0
  10. marieasd Messages postés 15 Statut Membre
     
    Le problème est réglé, j'ai réussi a me dépatouiller pour obtenir ce que je voulais ! Merci à tous pour tous vos codes !!!
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Content que tu aies réussi. Passes la discussion en Résolu.

      Cdlt
      Patrice
      0
  11. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Comme son nom l'indique, la correction automatique fait ça automatiquement.
    Cordialement
    Patrice

    mlou51 - 13 juil. 2017 à 18:23
    Malheureusement non,


    Ben si, contrôle tes options. Majuscule en début de phrase doit être coché.

    eric

    En essayant continuellement, on finit par réussir. 
    Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
    En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
    -1
    1. marieasd Messages postés 15 Statut Membre
       
      Cette option est déjà cochée. Le problème vient du fait que les informations de ce tableau sont collées depuis un tableau où elles n'ont pas de majuscule.
      Cordialement.
      0