Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
j'ai pu trouver sur ce form un code me permet de convertir les lettres à la saisie en majiscule + les caractères spéciaux(!"'?#) en espaces.
Private Sub Worksheet_change(ByVal Target As Range)
If Target.Count = 1 Then
textA = "ÉÈÊËÔôöÀÂÄÇàâäéèêëçùüôûïî;°%@:,§&'#=+!?"
textB = "EEEEOooAAAcaaaeeeecuuouii "
temp = Target
For i = 1 To Len(temp)
p = InStr(textA, Mid(temp, i, 1))
If p > 0 Then Mid(temp, i, 1) = Mid(textB, p, 1)
Next
Target = UCase(temp)
End If
End Sub
ce code est valable uniquement sur la saisie, mais pas sur le copier coller de plus de 1 cellule ==> copier/coller de 2 cellule ne fonctionne pas
ma question est comment ameliorer ce code pour qui soit valable pour las saise et le copier/coller
Je vous remercie pour vos commentaires. Personnellement, je suis globalement d'accord avec Lii. Je considère comme lui que l'utilisation d'un langage de programmation quelconque requiert un minimum d'étude. Le fait que certaines méthodes ou propriétés (quel jargon mal traduit !) soient délicates à utiliser ou à interpréter ne justifie pas leur rejet si elles permettent d'écrire un code efficace. C'est le cas ici. Je joins un classeur qui montre que se priver de l'instruction Application.EnableEvents = False fait plus que doubler le temps d'exécution. (Exécuter Macro1 et Macro2 pour le constater.)
Mais je ne balaie pas d'un revers de main les objections de pierrejean et d'Hervé. Comme ce dernier le constate,
une "longue" expérience de xld ma prouvé qu'une macro pouvait tres bien tournée à l'instant T, et plus lorsque le quidam de base la reprenait en l'adaptant à son souci
et il est vrai que le mieux est parfois l'ennemi du bien. Quelquefois, il n'est pas besoin qu'un quidam audacieux se mêle d'ajouter sans réflexion sa touche personnelle pour qu'une procédure qu'on croit solide se mette à jouer des tours. Ainsi la procédure que je proposai hier est vicieuse. En utilisant la plage
je mets le ver dans le fruit : dès que cette plage ne contient aucune cellule, l'utilisation de ce code engendre une erreur. Voici un code plus correct :
Code:
Private Sub Worksheet_change(ByVal Target As Range)
Dim textA As String, textB As String, oCel As Range, vCel As String, i As Long
textA = "ÉÈÊËÔôöÀÂÄÇàâäéèêëçùüôûïî;°%@:,§&'#=+!?"
textB = "EEEEOooAAAcaaaeeeecuuouii "
[COLOR="Red"]On Error GoTo Fin[/COLOR] [COLOR="SeaGreen"]'nécessaire si Target.SpecialCells(xlCellTypeConstants, xlTextValues).Cells
'ne correspond à aucune cellule.[/COLOR]
For Each oCel In Target.SpecialCells(xlCellTypeConstants, xlTextValues).Cells
vCel = oCel.Value
For i = 1 To Len(vCel)
If InStr(textA, Mid(vCel, i, 1)) Then Mid(vCel, i, 1) = Mid(textB, InStr(textA, Mid(vCel, i, 1)), 1)
Next i
Application.EnableEvents = False
oCel.Value = UCase(vCel)
Application.EnableEvents = True
Next oCel
[COLOR="Red"]Fin:
On Error GoTo 0[/COLOR]
End Sub
Ici, il ne s'agit pas d'un "On Error ..." de précaution, il s'agit de la gestion d'une erreur prévisible et prévue. Mais ce n'est pas la panacée ! Il se trouvera sans doute encore un quidam pour jurer que "la procédure n'est pas bonne" (ou plus sûrement, que "la macro bugue", l'emploi du jargon étant directement proportionnel à l'ignorance...) ...et c'est fort possible puisqu'il suffit de choisir "Arrêt sur toutes les erreurs" dans les options de l'éditeur de code pour inhiber la gestion des erreurs. Je dirais presque que le quidam ingénieux peut "faire planter" à peu près toutes les procédures, pour peu qu'il s'en donne la peine. Et nous n'y pouvons pas grand chose. Si ce n'est de continuer à proposer des codes aussi corrects que possible, à les corriger inlassablement, à charge pour le quidam (que nous avons tous été, et que nous sommes encore quelquefois) de respecter le travail fourni et de faire l'effort de le comprendre. Il ne me semble pas que cette position soit en contradiction avec l'humilité prônée par Hervé. J'ajoute seulement qu'il ne me semble pas plus contradictoire d'être humble et exigeant.
Au risque de faire baisser le niveau du debat, je suis d'accord avec a peu pret tout le monde, lorsque vous dites que le communs des mortels, comme moi qui n'y connait rien essai d'y rajouter ces fonctions sans rien comprendre a ce qui a ete fait plus tot peut provoquer des erreurs bien que la macro etait tres bien faite.
(Au passage je voulais remercier egalement tous les gens qui prennent du temps pour aider des gens qui n'y connaissent rien comme moi, et a qui vous rendez de grands services !)
C'est a ce propos que je me permets d'intervenir, et voudrais savoir si qq'un aurait la bonter de me donner un titre de livre dans lequel je pourrais en apprendre un peu plus sur le VBA, sachant que je n'y connait rien 🙂
Difficile de vous répondre. J'ai utilisé quelques livres aujourd'hui périmés car ils traitaient d'Excel97, aujourd'hui dépassé. En fait, j'ai beaucoup appris en lisant systématiquement l'aide fournie par Microsoft : elle n'est pas toujours bien traduite, mais elle donne malgré tout beaucoup de renseignements. Un autre moyen d'apprendre est d'expérimenter sans se décourager.
J'espère que votre message sera lu par des plus jeunes que moi qui pourront vous donner des pistes sur les livres récents.
Quant à vos remarques sur l'utilité du forum, elles sont parfaitement justes et ne font pas baisser le niveau du débat : un forum comme celui-ci est le lieu idéal pour faire la jonction entre les débutants et les utilisateurs un peu plus avancés (qui ne sont jamais que des anciens débutants, je crois...).
Même conseil que ROGER2327, consulter l'aide en ligne dans Microsoft Visual Basic Editor (touche F1), et essayer les exemples fournies dans cet aide
(CTRl+C +CTRL+V)
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD