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

Mettre une plage en majuscule

11 réponses
Avatar
Roland Miller
Bonjour,

Selon vous =E2=80=A6 y aurait-il une fa=C3=A7on de mettre toute une plage e=
n majuscule =E2=80=A6 sans avoir =C3=A0 faire une boucle =E2=80=A6 For each=
cell =E2=80=A6.

Merci =C3=A0 l'avance

10 réponses

1 2
Avatar
MichD
Le 19/06/19 à 07:36, Roland Miller a écrit :
Bonjour,
Selon vous … y aurait-il une façon de mettre toute une plage en majuscule … sans avoir à faire une boucle … For each cell ….
Merci à l'avance

Bonjour,
Essaie comme ceci, cela devrait être assez rapide!
'---------------------------------------
Sub test()
Dim Tblo(), A As Long, B As Long
Application.EnableEvents = False
With Worksheets("Feuil1")
Tblo = .UsedRange.Value
For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
If Not .Cells(A, B).HasFormula Then
Tblo(A, B) = UCase(Tblo(A, B))
Else
Tblo(A, B) = .Cells(A, B).Formula
End If
Next
Next
.UsedRange = Tblo
End With
Application.EnableEvents = True
End Sub
'---------------------------------------
Pour une feuille avec formule, mais SANS FORMULE MATRICIELLE
Si tu as des formules matricielles dans la feuille, il faudrait raffiner
la procédure...
'---------------------------------------
Sub test1()
Dim Tblo(), A As Long, B As Long
Application.EnableEvents = False
With Worksheets("Feuil1")
Tblo = .UsedRange.Value
For A = 1 To UBound(Tblo, 1)
For B = 1 To UBound(Tblo, 2)
Tblo(A, B) = UCase(Tblo(A, B))
Next
Next
.UsedRange = Tblo
End With
Application.EnableEvents = True
End Sub
'---------------------------------------
MichD
Avatar
Roland Miller
Super!
Un grand merci. Ça fonctionne parfaitement.
Avatar
Roland Miller
Bonjour,
J'ai aussi besoin de fusionner une plage exemple A1:A10 avec la colonne B.
Donc que A1 soit fusionné avec B1, A2 avec B2.
Dans le même ordre d'idée … est-ce possible d'en faire de même … que de tout mettre une plage en majuscule mais sans av oir à faire For each cell in range (A1:A10)?
J'ai essayé et regardé sur Internet mais sans succès. L'obje ctif est de gagner du temps considérable.
Merci à l'avance.
Avatar
Roland Miller
Encore un grand merci.
Avatar
Roland Miller
Bonjour,
Voici ce que j'aimerais faire.
J'ai une plage qui contient 10 000 lignes. Dans une colonne j'ai la mention "Break" sur les lignes dont il faut insérer un saut de page manuel. J e cherche à réduire le temps d'exécution.
J'utilise actuellement le code au bas du message.Croyez-vous être poss ible de le faire en utilisant Tablo comme pour ce fil de discussion? Ou?
For Each cell In Feuil54.Range("CN_FMDetCritZone").Cells
If cell.Value = "break" Then
Feuil54.HPageBreaks.Add Before:ll
End If
Next
Avatar
MichD
Adapte la plage A1:Ax où tu as l'expression "break".
MichD
Bonjour,
'-------------------------------
Sub test()
Dim Rg As Range, Trouve As Range
Dim Adr As String, Sh As Worksheet
Application.ScreenUpdating = False
Set Sh = Feuil54
With Sh
    Set Rg = .Range("A1:A" & .Range("A" &
.Cells.Rows.Count).End(xlUp).Row)
End With
With Rg
    Set Trouve = .Find(What:="break", LookIn:=xlValues)
    If Not Trouve Is Nothing Then
        adr = Trouve.Address
        Do
            Sh.HPageBreaks.Add Before:=Trouve
            Set Trouve = .FindNext(Trouve)
        Loop Until Trouve.Address = adr
    End If
End With
Application.ScreenUpdating = True
End Sub
'-------------------------------
MichD
Avatar
MichD
Le 31/03/20 à 13:10, Roland Miller a écrit :
Dans le code j'utilise quelques fois
Tblo = .UsedRange.Value
For A = 1 To UBound(Tblo, 1)

Bonjour,
2 commentaires :
Dim Tblo()
A ) avec des versions un peu plus anciennes, Excel n'accepte pas la
déclaration de la variable dim Tblo() , il faut utiliser
Dim Tblo as variant qui elle fonctionne dans toutes les versions.
Tblo = .UsedRange.Value
B ) Certaines versions plus anciennes, me semble-t-il, retourne une
erreur si la feuille est totalement vide (comme une nouvelle feuille
vierge). Il faut alors faire un petit test à cet effet! De cette
manière, ton code devrait s'exécuter dans toutes les versions. (si ma
mémoire ne me joue pas un tour!)
With worksheets("Feuil1")
If Not IsEmpty(.UsedRange) Then
'ton code
End if
End with
MichD
Avatar
Roland Miller
Bonjour à nouveau,
Merci. J'ai changé le code. Mais … Ça plante à la li gne For A = 1 To UBound(Tblo, 1)
Ça renvoi incompatibilité de type.
Mais dans ma plage … il n'y a qu'une valeur. Cela fait-il une diff érence? C'est-à-dire que le UBound est pour s'il y a plusieurs va leurs? Ou cela ne devrait pas faire de différence?
Merci à l'avance.
Avatar
Roland Miller
Et … curieusement … j'ai cette situation depuis que le fich ier est devenu en .xlsb au lieu de .xls.
À moins que ce soit .. toute une coincidence.
Avatar
MichD
| Mais dans ma plage … il n'y a qu'une valeur. Cela fait-il une différence?
Effectivement, tu as un ligne de code de ce type :
Tblo = .usedRange.value
Si le .used.Value n'a qu'une cellule, c'est par conséquent équivalent à
écrire : Tblo = Range("A1").value
Dans ce cas, que l'on déclare la variable tableau comme ceci :
Dim Tblo() ou Dim Tblo as variant
Lorsque tu utilises For A = 1 To UBound(Tblo, 1), la variable Tblo n'est
pas un TABLEAU (ARRAY). D'où le message d'erreur "Incompatibilité de type".
Que ce soit dans un fichier .xlsm ou xlsb, cela n'est pas pertinent à
cette situation.
MichD
1 2