Mettre majuscule après point automatiquement

Résolu/Fermé
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017 - 13 juil. 2017 à 12:48
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 18 juil. 2017 à 14:11
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
A voir également:

10 réponses

ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
14 juil. 2017 à 16:11
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 18:48
Merci beaucoup pour votre aide ! Je teste ce code lundi !
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
14 juil. 2017 à 17:36
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
14 juil. 2017 à 18:01
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 18:47
Merci énormément !!! Je teste tout cela lundi ! Bonne soirée !
0
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
Modifié le 14 juil. 2017 à 19:21
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié le 13 juil. 2017 à 15:59
Bonjour,

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

Cordialement
Patrice
0
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
13 juil. 2017 à 18:23
Malheureusement non, ça serait mieux mais ce n'est pas le cas.
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
Modifié le 13 juil. 2017 à 21:35
C'est le cas pour les majuscules de début de phase (sauf la premiere de la première phrase).
0
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 14:02
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 23325 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 Ambassadeur 1 551
13 juil. 2017 à 22:11
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 14:03
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
yg_be Messages postés 23325 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551 > marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 14:30
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 15:33
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
yg_be Messages postés 23325 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551 > marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 16:53
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
14 juil. 2017 à 18:48
Merci, merci, merci !! J'essaierai le code lundi, bonne soirée à vous !
0
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
17 juil. 2017 à 09:44
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
 
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779 > sylvain
Modifié le 17 juil. 2017 à 14:11
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
sylvain > Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023
Modifié le 17 juil. 2017 à 19:56
 
@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
ccm81 Messages postés 10900 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 2 novembre 2024 2 425
17 juil. 2017 à 11:30
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
18 juil. 2017 à 13:48
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
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 779
18 juil. 2017 à 14:11
Content que tu aies réussi. Passes la discussion en Résolu.

Cdlt
Patrice
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié le 13 juil. 2017 à 22:59
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
marieasd Messages postés 15 Date d'inscription jeudi 13 juillet 2017 Statut Membre Dernière intervention 19 juillet 2017
17 juil. 2017 à 09:49
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