Appliquer une instruction à la cellule sélectionnée

Signaler
Messages postés
7
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
23 novembre 2013
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

J'ai ce code:

Sub SuperScriptOrdinals()
Dim X As Long, NumPosition As Long, Cell As Range
For Each Cell In Range("B2:B15")
NumPosition = InStr(Cell.Value, "1st")
If NumPosition = 0 Then
NumPosition = InStr(Cell.Value, "2nd")
If NumPosition = 0 Then
NumPosition = InStr(Cell.Value, "3rd")
If NumPosition = 0 Then
For NumPosition = 1 To Len(Cell.Text)
If Mid(Cell.Value, NumPosition) Like "#th*" Then Exit For
Next
End If
End If
End If
If NumPosition Then
Cell.Characters(NumPosition + 1, 2).Font.Superscript = True
End If
Next
End Sub

Cela me permettrait de mettre en exposant le «st», le «nd». Par contre, le range est: cellules B2:B15. Comment je peux faire pour tout simplement appliquer cette instruction à la cellule où je suis positionné et seulement cette cellule?

Merci.

11 réponses

Messages postés
30358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2020
338
Bonjour.
J'ai déplacé ton sujet dans la section VBA...

Pour ta question : activeCell
Messages postés
7
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
23 novembre 2013

Merci pour le changement de section.
Mais est-ce que ActiveCell était ta réponse à mon problème?
Messages postés
30358
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
27 novembre 2020
338
cellule où je suis positionné
Oui, c'est la réponse à ta question : ACTIVECELL

Messages postés
7
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
23 novembre 2013

Désolé, je suis peut-être un peu nul en VBA, mais je ne vois pas comment modifier les lignes

For Each Cell In Range("B2:B15")
...
Next

en mettant seulement activecell
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Bonjour,
C'est toujours pareil : à question non suffisamment précise ou incomplètement formulée ===>> réponse non très exactement adaptée.
Sois plus précis :
Si bien compris, tu ne souhaites pas intervenir par boucle, in fine, sur un ensemble de cellules déjà saisie, mais le faire sur la cellule active uniquement.
A quel moment, donc ?? :
1) en t'y rendant, alors qu'elle a déjà été saisie
ou
2) à chaque fois que tu saisis ou modifies la caleur d'une cellule de cette plage ?

Veux-tu bien également nous préciser si les termes 1st, 2nd, etc ... dont les seuls caractères du texte de la cellule ou s'il y a d'autres caractères que ceux-là et, si oui, où sont placés ces autres caractères.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
7
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
23 novembre 2013

Contexte:
Je corrige un fichier Excel de plus de 100 onglets avec quelque 1000 lignes par onglet. C'est un truc comptable avec énormément de formulation du type «exercice se terminant le 1er janvier 201x». Je dois mettre en exposant les «er». Je trouve fastidieux de sélectionner «er», d'être obligé d'aller dans format police pour faire des exposants. Donc, je veux assigner une macro à un bouton dans ma barre d'outils Accès rapide qui le fasse plus rapidement (ça je suis capable de le faire).

Je ne veux pas appliquer cette macro à une plage de cellules prédéfinie, ni à une feuille entière, ni à l'intégralité du fichier; seulement à la cellule sur laquelle je suis positionné et que je suis en train de corriger (le texte ayant déjà été saisi).

Les «er» en question peuvent se trouver n'importe où dans la cellule.

Après plusieurs recherches, j'ai trouvé le code mentionné plus haut, que j'ai modifié ainsi:

Sub Exposant()
Dim X As Long, NumPosition As Long, Cell As Range
For Each Cell In Range("B2:B15")
NumPosition = InStr(Cell.Value, "1er")
If NumPosition Then
Cell.Characters(NumPosition + 1, 2).Font.Superscript = True
End If
Next
End Sub

Ça fonctionne très bien, quand je suis dans la plage b2:b15, mais je ne suis pas toujours dans cette plage ;-)

Est-ce plus clair?
Messages postés
7
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
23 novembre 2013

Bon, j'ai retesté la macro, et je viens de me rendre compte qu'elle ne met en exposant que la première occurrence du «1er». S'il y en a d'autres après dans la cellule, nada.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
"et je viens de me rendre compte qu'elle ne met en exposant que la première occurrence du «1er». S'il y en a d'autres après dans la cellule, nada".
Tu mesures là l'importance d'être très complet et précis ! Ce n'est que maintenant que tu nous parles de l'existence éventuelle de plusieurs portions de chaines de type "1er" dans la cellule !!
Je veux bien t'aider, mais tu vas d'abord te lire, te relire, me lire et me relire pour t'assurer de ne rien avoir oublié. Si tu oublies quoi que ce soit, tu n'auras rien d'autre que le code écrit sur la seule base de tes précisions. Alors fais très attention.
Je note au passage que ce n'est plus 1st 2nd, 3rd, etc ... mais 1er, (et donc 2ème, etc ...). Du coup : encore un doute ! Et :
- on ne sait plus si tu as un "1st" qu'il faut transformer au passage en "1er", etc ...!
- le traitement de type 1er, 2ème, 3ème est nettement plus simple que celui de la notation anglaise 1st,2nd, etc ... et n'est pas du tout le même (même pas de la même logique) !
Nous ne savons pas non plus si ces sous-chaines ("1er," etc ...) :
- peuvent également être la première sous-chaîne ou la dernière (car pas le même traitement, dans ce cas)
- sont toujours précédées et suivies d'un espace (relativement alors facile) ou peuvent être précédées et/ou suivies d'un autre caractère, tels ",", ";",".", ":", ,"(", etc ... (car alors très complexe, voire impossible sans risque d'erreur dans certains cas)
- ne concernent que des "rangs" inférieurs à 10 (car 21ème, par exemple, n'a pas la même longueur que 2ème)

Alors : après avoir lu l'intégralité de ce message, reviens avec la plus grande (et définitive, hein) précision sur ce que tu as et ce que tu veux faire
Messages postés
7
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
23 novembre 2013

1. Je ne veux modifier que 1er (pas 2e, 3e, etc.).
2. Il peut y avoir plusieurs 1er dans la même cellule.
3. Il y a toujours un espace avant et après 1er, puisque c'est dans une chaîne du type «exercice se terminant le 1er janvier 201x». 1er n'est jamais à la même position dans la cellule.
4. Je ne veux pas changer les 1st en 1er. Mon texte est en français. Le premier code copié plus haut fonctionne pour un texte en anglais, le deuxième fonctionne pour un texte en français. Mais il ne fonctionne que pour une plage de cellules donnée, et que pour la première occurrence du 1er.
5. Je veux intervenir in fine (jusquà plus soif) sur la cellule active, jusqu'à ce qu'il n'y ait plus de 1er.
6. Le texte est déjà saisi.

Exemple, j'ai ce texte dans une cellule:

_______________
"Nouvelles dispositions ou dispositions modifiées relatives à la présentation et aux informations à fournir en vigueur pour la première fois

* La publication d'IFRS 11 Partenariats, en mai 2011, a donné lieu à la modification du paragraphe 6(b) d'IAS 18. La modification s'applique aux exercices ouverts à compter du 1er janvier 2013. L'entité qui applique IFRS 11 doit appliquer cette modification.

* La publication d'IFRS 13 Évaluation de la juste valeur, en mai 2011, a donné lieu à la modification du paragraphe 6 et des paragraphes AG1 à AG3 d'IFRIC 13 Programmes de fidélisation de la clientèle, qui touche IAS 18. Elle a également donné lieu à la modification du paragraphe 7 d'IAS 18. Ces modifications s'appliquent aux exercices ouverts à compter du 1er janvier 2013."
_____________________

Alors, je veux, par un simple clic (bouton dans la barre Accès rapide), mettre tous les «er» des «1er» en exposant (dans ce cas-ci, les 2 occurrences de «er»).

Est-ce que ça fait le tour de la question? (Et merci de vouloir aider un pauvre béotien)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Eh !
Avant :
"Je ne veux pas appliquer cette macro à une plage de cellules prédéfinie, ni à une feuille entière, ni à l'intégralité du fichier; seulement à la cellule sur laquelle je suis positionné et que je suis en train de corriger"

et maintenant :
Alors, je veux, par un simple clic (bouton dans la barre Accès rapide...)
Alors ? quel est finalement ton choix (c'est la dernière fois que je te pose une question pour y voir clair, hein ...)

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend
Messages postés
7
Date d'inscription
samedi 23 novembre 2013
Statut
Membre
Dernière intervention
23 novembre 2013

Il me semble que les deux affirmations ne sont pas en contradiction.

J'ai créé un bouton dans ma barre d'outils Accès rapide, je lui ai assigné la macro copiée plus haut. Je me positionne dans une cellule où il y a déjà du texte. Je clique sur mon bouton. Le premier er se met en exposant si je suis dans une cellule de la plage b2:b15. Mais comment faire si je suis positionné dans la cellule d45 ou e2, ou n'importe quelle autre cellule. Et comment faire si j'ai deux ou trois ou quatre er dans la même cellule.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
Elles le sont (en contradiction ... tout au moins en caractère superfétatoire).
Mais non ...
J'en ai maintenant marre de ce truc à 5 soles-là ...
Sur la base de ce que tu as dit, voilà ====>>>
Private Sub Worksheet_Change(ByVal Target As Range)
toto Target
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
toto Target
End Sub

Private Sub toto(c As Range)
d = c.Text
ou = 1
Do While InStr(ou, d, "1er") 'And ou < Len(d)
pos = InStr(ou, d, "1er")
c.Characters(pos + 1, 2).Font.Superscript = True
ou = ou + 4
Loop
End Sub
--
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviend