Mettre une plage en majuscule

Le
Roland Miller
Bonjour,

Selon vous … y aurait-il une façon de mettre toute une plage e=
n majuscule … sans avoir à faire une boucle … For each=
cell ….

Merci à l'avance
Vos réponses Page 1 / 2
Trier par : date / pertinence
MichD
Le #26519529
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
Roland Miller
Le #26519559
Super!
Un grand merci. Ça fonctionne parfaitement.
Roland Miller
Le #26519704
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.
Roland Miller
Le #26519718
Encore un grand merci.
Roland Miller
Le #26538407
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
MichD
Le #26538458
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
MichD
Le #26542012
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
Roland Miller
Le #26542020
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.
Roland Miller
Le #26542023
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.
MichD
Le #26542035
| 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
Publicité
Poster une réponse
Anonyme