Bonjour,
Je débute avec Array
ai je mal écrit mon code car il bloque sur .range ?
MerciCode:
1
2
3
4
5
6 Dim R As Range For Each R In Sheets.Range(Array("C3", "C4", "G4", "J3", "J4", "N3", "N4")) .NumberFormat = "[h]:mm" Next R
Version imprimable
Bonjour,
Je débute avec Array
ai je mal écrit mon code car il bloque sur .range ?
MerciCode:
1
2
3
4
5
6 Dim R As Range For Each R In Sheets.Range(Array("C3", "C4", "G4", "J3", "J4", "N3", "N4")) .NumberFormat = "[h]:mm" Next R
Bonsoir,
Sauf erreur, un Array ne peut être l'objet que d'une collection (Worksheets...)
Tu peux donc
- déclarer un Array
- balayer ses items pour les utiliser comme argument de l'objet Range auquel tu affectes la propriété
Reviens si nécessaire
Comme ceci ?
Code:
1
2
3
4
5 'Dim R As Range ' 'For Each R In workSheets.Range(Array("C3", "C4", "G4", "J3", "J4", "N3", "N4")) ' .NumberFormat = "[h]:mm" 'Next R
Non.
Je t'ai décrit le processus.
Le Array n'est pas ton seul problème.
J'ai un gros doute aussi le le "Sheets" qui précède le Range.
Et une certitude que le "." devant Number ne sera pas suffisant pour le relier à un Range (étant donné qu'il n'y a pas de With)
Donc
Code:
1
2
3
4
5
6
7
8
9
10 Option Base 1 Dim R As Long, S As Worksheet, Liste As Variant Liste = Array("C3", "C4", "G4", "J3", "J4", "N3", "N4") For Each S In ActiveWorkbook.Worksheets For R = 1 To UBound(Liste) S.Range(Liste(R)).NumberFormat = "[h]:mm" Next R Next S
Bonjour,
Autre solution : Tu sélectionnes les cellules en question et tu nommes la sélection par exemple maPlage, ce qui réduira ton code à une ligne et évitera la boucle
Code:
1
2
3 Sub t1() Range("maplage").NumberFormat = "[h]:mm" End Sub
Une précision.
Sur la base de ce code
L'argument de l'objet Range est ici une chaîne de caractères.Code:
1
2
3
4
5
6
7
8
9
10
11 Option Explicit Sub modif_format() Dim larr As Variant, l As Variant larr = Array("C3", "B4", "D2") For Each l In larr Worksheets(1).Range(l).NumberFormat = "0.00" Next l End Sub
Pour autant, la conversion de l'item n'est pas obligatoire.
Du moins sur Excel 2016, VBA effectue automatiquement cette conversion.
Hé salut Philippe, :P
Une autre possibilité serait d'utiliser l'objet Union.Citation:
Tu sélectionnes les cellules en question et tu nommes la sélection par exemple maPlage
Vraiment pour se faire plaisir.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 Option Explicit Sub modif_format() Dim larr As Variant, l As Variant, u As Range larr = Array("C3", "B4", "D2") For Each l In larr If u Is Nothing Then Set u = Worksheets(1).Range(l) Else Set u = Union(u, Worksheets(1).Range(l)) End If Next l u.NumberFormat = "0.0" Set u = Nothing End Sub
Soyons fous! :P
Bon week-end à vous et bon week-end au Forum.
Bonjour
Je plussoie sans la moindre hésitation la proposition de Philippe Tulliez, que je salue.
A MarcelG, la manière dont tu construis la plage avec Union n'est nécessaire que lorsque l'on ne sait pas encore de quoi sera composée la plage, ce qui n'est pas le cas ici.)
Utilise directement Union.
Salut Unparia,
Tout à fait. :plusser:Citation:
A MarcelG, la manière dont tu construis la plage avec Union n'est nécessaire que lorsque l'on ne sait pas encore de quoi sera composée la plage, ce qui n'est pas le cas ici.)
Utilise directement Union.
J'utilise cette construction notamment avec Find.