Menu

Mettre majuscule après point automatiquement [Résolu]

marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 13 juil. 2017 à 12:48 - Dernière réponse : Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention
- 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
Afficher la suite 

26 réponses

Répondre au sujet
ccm81 8337 Messages postés lundi 18 octobre 2010Date d'inscription 23 avril 2018 Dernière intervention - 14 juil. 2017 à 16:11
+2
Utile
1
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
Cette réponse vous a-t-elle aidé ?  
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 14 juil. 2017 à 18:48
Merci beaucoup pour votre aide ! Je teste ce code lundi !
Commenter la réponse de ccm81
Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention - 14 juil. 2017 à 17:36
+2
Utile
2
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


Cette réponse vous a-t-elle aidé ?  
Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention - 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
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 14 juil. 2017 à 18:47
Merci énormément !!! Je teste tout cela lundi ! Bonne soirée !
Commenter la réponse de Patrice33740
ccm81 8337 Messages postés lundi 18 octobre 2010Date d'inscription 23 avril 2018 Dernière intervention - Modifié par ccm81 le 14/07/2017 à 19:21
+2
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ccm81
Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention - Modifié par Patrice33740 le 13/07/2017 à 15:59
0
Utile
3
Bonjour,

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

Cordialement
Patrice
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 13 juil. 2017 à 18:23
Malheureusement non, ça serait mieux mais ce n'est pas le cas.
Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention - 13 juil. 2017 à 21:34
C'est le cas pour les majuscules de début de phase (sauf la premiere de la première phrase).
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 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...
Commenter la réponse de Patrice33740
yg_be 5287 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 13 juil. 2017 à 22:11
0
Utile
5
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?
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 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.
yg_be 5287 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention > marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 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, ...
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 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...
yg_be 5287 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention > marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 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
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 14 juil. 2017 à 18:48
Merci, merci, merci !! J'essaierai le code lundi, bonne soirée à vous !
Commenter la réponse de yg_be
0
Utile
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.
 
Commenter la réponse de sylvain
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 17 juil. 2017 à 09:44
0
Utile
3
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 !
 
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.
 
Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention > sylvain - 17 juil. 2017 à 14:10
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.
sylvain > Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention - 17 juil. 2017 à 19:31
 
@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.
 
Commenter la réponse de marieasd
ccm81 8337 Messages postés lundi 18 octobre 2010Date d'inscription 23 avril 2018 Dernière intervention - 17 juil. 2017 à 11:30
0
Utile
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 http://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
Commenter la réponse de ccm81
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 18 juil. 2017 à 13:48
0
Utile
1
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 !!!
Patrice33740 6799 Messages postés dimanche 13 juin 2010Date d'inscription 19 avril 2018 Dernière intervention - 18 juil. 2017 à 14:11
Content que tu aies réussi. Passes la discussion en Résolu.

Cdlt
Patrice
Commenter la réponse de marieasd
eriiic 21540 Messages postés mardi 11 septembre 2007Date d'inscriptionContributeurStatut 24 avril 2018 Dernière intervention - Modifié par eriiic le 13/07/2017 à 22:59
-1
Utile
1
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
marieasd 15 Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - 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.
Commenter la réponse de eriiic