Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraire les mots en majuscule de toutes les cellules d'une page

3 réponses
Avatar
Coriandre
Rebonjour,

Décidément, j'ai encore besoin d'aide :

Mon but est toujours de récupérer le premier mot en majuscule d'une cellule.

Mais de le faire pour toutes les cellules d'une plage nommée "Plage", puis
d'ajouter les mots majuscules obtenus dans la cellulle ("A1"), en les
séparant par des sauts de ligne (& vbnewline &).

Exemple :
En ligne 1 de la plage "Plage" la phrase est :
"Mais qu'est-ce qu'il fait TOTO ? "
En ligne 2 de la plage "Plage" la phrase est :
"Je ne sais pas. TATA mange du pain. TONTON aussi."
La ligne 3 est vide
En ligne 4 de la plage "Plage" la phrase est :
"C'est le pain de TITI."
...

Le résultat en A1 doit être :
TOTO
TATA
TITI
...

La plage peut-être grande, et il serait fastidieux d'ajouter les valeurs
obtenues par les macros de JB ou de François Forcet pour chaque cellule de
la plage.
Aussi j'ai essayé de composer une macro avec :
For i = 1 to Plage.Cells.count...
en y imbriquant les macros de JB ou de François Forcet.
Sans succès...

Merci de votre aide.

--
Coriandre

3 réponses

Avatar
JB
Bonjour,

Sub essai()
For Each c In [B1:B4]
temp = temp & Mot(c) & Chr(10)
Next c
[A1] = temp
End Sub

Function Mot(ph)
i = 1
Do While i <= Len(ph) - 2 And Not témoin
If Mid(ph, i, 2) Like "[A-Z][A-Z]" Then
p = InStr(i, ph, " "): If p = 0 Then p = Len(ph) + 1
Mot = Mid(ph, i, p - i)
témoin = True
End If
i = i + 1
Loop
End Function

http://cjoint.com/?dhr7AMQMY0

JB


On 7 mar, 17:42, "Coriandre" wrote:
Rebonjour,

Décidément, j'ai encore besoin d'aide :

Mon but est toujours de récupérer le premier mot en majuscule d'une ce llule.

Mais de le faire pour toutes les cellules d'une plage nommée "Plage", pu is
d'ajouter les mots majuscules obtenus dans la cellulle ("A1"), en les
séparant par des sauts de ligne (& vbnewline &).

Exemple :
En ligne 1 de la plage "Plage" la phrase est :
"Mais qu'est-ce qu'il fait TOTO ? "
En ligne 2 de la plage "Plage" la phrase est :
"Je ne sais pas. TATA mange du pain. TONTON aussi."
La ligne 3 est vide
En ligne 4 de la plage "Plage" la phrase est :
"C'est le pain de TITI."
...

Le résultat en A1 doit être :
TOTO
TATA
TITI
...

La plage peut-être grande, et il serait fastidieux d'ajouter les valeurs
obtenues par les macros de JB ou de François Forcet pour chaque cellule de
la plage.
Aussi j'ai essayé de composer une macro avec :
For i = 1 to Plage.Cells.count...
en y imbriquant les macros de JB ou de François Forcet.
Sans succès...

Merci de votre aide.

--
Coriandre


Avatar
francois.forcet
Rebonjour à toi

Je te propose un code dans ce genre
Aprés avoir sélectionné ta plage :

For each c in selection
For i = 0 To UBound(Split(c))
If Split(c, " ")(i) = UCase(Split(c, " ")(i))
And Len(Split(c, " ")(i)) > 1 Then
'Condition pour éliminer les caractères en question :
If Asc(Split(c, " ")(i)) > 64 And _
Asc(Split(c, " ")(i)) < 91 Then
Résultat = Résultat & Split(c, " ")(i) & vblf
Exit For
End If
End If
Next i
Next c
Range("A1") = Résultat

Tu peux adapter un bout de code pour sélectionner ta plage
automatiquement à mettre en tout début de ce code
Celà devrait faire

Dis moi !!!!
Avatar
Coriandre
Merci à JB et François Forcet pour leur aide.

La macro de François fonctionne telle qu'elle.

J'ai dû modifier très légèrement celle de JB car telle qu'à l'intial :
---------------------
Sub essai()
For Each c In [B1:B4]
temp = temp & Mot(c) & Chr(10)
Next c
[A1] = temp
End Sub
--------------------
elle ajoutait des sauts de lignes vides en trop entre les mots en majuscule
(probablement correspondant aux lignes vides de la plage).

---------------------
Sub essai()
For Each c In [B1:B4]

' ajout pour éliminer les sauts de pages en trop :
If Mot(c) <> Empty Then

temp = temp & Mot(c) & Chr(10)
End If
Next c
[A1] = temp
End Sub
--------------------

Merci encore à tous deux.

--
Coriandre