Passage en majuscule d'une lettre sur deux dans un texte

Bonjour à tous,

Mon nom est Jean-Christophe et c'est mon premier post sur le forum... Je vais essayer de ne pas faire tache dans les usages, si c'est la cas, pardonnez-moi d'avance

Ma question est la suivante : j'essaye de trouver une façon d'alterner une lettre sur deux en Majuscule / Minuscule dans un ensemble de cellules de texte pré-existante.

Exemple :

"Ceci est un texte normal" -> "CeCi eSt uN TeXte nOrMaL"

et je ne trouve pas comment faire !

Si vous avez des pistes / avis / solutions, je suis preneur !

Merci d'avance et bonne journée

Bonsoir,

Teste la macro suivante :

Option Base 1
Sub MajMin()
    Dim tableau() As String
    'le texte à transformer est en A1
    nb = Len(Range("A1"))
    ReDim tableau(nb)
    For i = 1 To nb
        If i Mod 2 Then
            tableau(i) = UCase(Mid(Range("A1"), i, 1))
        Else
            tableau(i) = LCase(Mid(Range("A1"), i, 1))
        End If
        texte = texte & tableau(i)
    Next i
    [A1] = texte
End Sub

Merci, je vais aller essayer ça de suite )

Elle est de toi ?

Gicet a écrit :

Merci, je vais aller essayer ça de suite )

Elle est de toi ?

Non, non ça a tombé du ciel.

On te demandera pas de verser le droit d'auteur. Rassure-toi.

Ahaha, alors je vais me mettre à l'observation des phénomènes célestes

En tout cas, un très grand merci, ça marche parfaitement !!! Si j'ai bien compris, je mets mon texte en case A1 et ça me le convertit..

Si je peux abuser (parce que c'est ma première macro sous excel .. .pas taper !!!), aurais tu un instant pour me dire comment je fais pour convertir plusieurs cellules de mon table, par exemple de A1 à A99 ?

J'ai essayé (un peu au pif j'avoue !) de remplacer nb = Len(Range("A1")) par nb = Len(Range("(A1:A99)")) mais bien sur ça ne fonctionne pas

Heuu... mes dernières connaissances en programmation datent d'au moins 30 ans, du coup...

Mais dans tous les cas, encore merci !

Bjr,

tiens une autre version en utilisant Mid de façon qui peu sembler particulière ..:

Sub UneLettreSurDeux()
 Dim st As String
 Dim i As Integer
 st = LCase(Feuil1.Range("A1"))
 For i = 1 To Len(st) Step 2
    If (i Mod 2) <> 0 Then Mid(st, i, 1) = UCase(Mid(st, i, 1))
 Next
 Feuil1.Range("A1") = st
End Sub

[Edit] ** Voila suite à ta deuxième question une version modifié en ajoutant un paramètre..

Sub Boucle()
Dim r As Range
    For Each r In Feuil1.Range("A1:A10")
        UneLettreSurDeux r

    Next
End Sub

Sub UneLettreSurDeux(c As Range)
 Dim st As String
 Dim i As Integer
 st = LCase(c)
 For i = 1 To Len(st) Step 2
   Mid(st, i, 1) = UCase(Mid(st, i, 1))
 Next
 c = st
End Sub

Bonsoir,

Tiens Mid m'a fait penser à Mid ! Variante avec les deux Mid, sous forme Function utilisable comme fonction dans la feuille...

Function MAJ1SUR2(tx) As String
    Dim i%, k$
    Application.Volatile
    For i = 1 To Len(tx) Step 2
        k = UCase(Mid(tx, i, 1))
        Mid(tx, i, 1) = k
    Next i
    MAJ1SUR2 = tx
End Function

Cordialement.

bonjour

et le final

Sub UneLettreSurDeux()
Dim MaVar As String
Dim I As Long
Dim L As Long
   For L = 1 To Range("A" & Rows.Count).End(xlUp).Row
      MaVar = LCase(Range("A" & L))
         For I = 1 To Len(MaVar) Step 2
            If (I Mod 2) <> 0 Then Mid(MaVar, I, 1) = UCase(Mid(MaVar, I, 1))
         Next
      Range("A" & L) = MaVar
   Next
End Sub

A+

Maurice

Hé bien !! Il ne me reste plus qu'à dire un grand merci à tous !! C'est vraiment super gentil et sincèrement, je n'y serait pas arrivé tout seul

Pour info, c'est une fonction qui va me servir à alterner 2 versions d'une police manuscrite pour lettrer une bande dessinée. Les lettres elles même sont de forme assez semblables les unes aux autres, mais néanmoins avec une petite différence qui permet d'avoir un effet moins "informatique".

Bref, encore merci !!

Bonjour,

Puisque... un petit rajout à ma fonction pour couvrir une omission que pierre.jy et archer n'ont pas faite...

    Application.Volatile
    tx = LCase(tx)
    For i =.....

Cordialement.

Rechercher des sujets similaires à "passage majuscule lettre deux texte"