Signaler

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

Posez votre question marieasd 15Messages postés jeudi 13 juillet 2017Date d'inscription 19 juillet 2017 Dernière intervention - Dernière réponse le 18 juil. 2017 à 14:11 par Patrice33740
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 
Utile
+2
plus moins
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
marieasd 15Messages 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 !
Répondre
Donnez votre avis
Utile
+2
plus moins
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


Patrice33740 6007Messages postés dimanche 13 juin 2010Date d'inscription 24 juillet 2017 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
Répondre
marieasd 15Messages 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 !
Répondre
Donnez votre avis
Utile
+2
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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 15Messages 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.
Répondre
yg_be 2855Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 25 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, ...
Répondre
marieasd 15Messages 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...
Répondre
yg_be 2855Messages postés lundi 9 juin 2008Date d'inscription ContributeurStatut 25 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
Répondre
marieasd 15Messages 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 !
Répondre
Donnez votre avis
Utile
+0
plus moins
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.
 
Donnez votre avis
Utile
+0
plus moins
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 !
sylvain- 17 juil. 2017 à 13:08
 
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.
 
Répondre
Patrice33740 6007Messages postés dimanche 13 juin 2010Date d'inscription 24 juillet 2017 Dernière intervention - 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.
Répondre
sylvain- 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.
 
Répondre
Donnez votre avis
Utile
+0
plus moins
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
Donnez votre avis
Utile
+0
plus moins
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 6007Messages postés dimanche 13 juin 2010Date d'inscription 24 juillet 2017 Dernière intervention - 18 juil. 2017 à 14:11
Content que tu aies réussi. Passes la discussion en Résolu.

Cdlt
Patrice
Répondre
Donnez votre avis
Utile
-1
plus moins
Bonjour,

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

Cordialement
Patrice
marieasd 15Messages 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.
Répondre
Patrice33740 6007Messages postés dimanche 13 juin 2010Date d'inscription 24 juillet 2017 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).
Répondre
marieasd 15Messages 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...
Répondre
Donnez votre avis
Utile
-1
plus moins
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 15Messages 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.
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !