Extraire les mots en majuscule de toutes les cellules d'une page
3 réponses
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...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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" <nospam-wat...@free.fr.invalid> 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...
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
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
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 !!!!
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
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 !!!!
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
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
--------------------
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 --------------------