Bonjour Laurent,
Voici quelques notions sur les tableaux :
'------------------------------------------
Sub DéfnirUnTableau()
'Définir le type de la variable tableau
Dim Arr() As String * 15
'Le 15 limite les entrées à des mots de 15 caractères
'Ceci limite l'espace mémoire utilisé dans le cas
'où nous savons à l'avance notre besoin.
Arr = Array("rond", "Bille", "Boule")
End Sub
'------------------------------------------
Sub DéfnirUnTableau1()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
'Lorsque l'on connaît à l'avance le nombre d'items
'que contiendra notre tableau, on peut redéfinir
'la dimension tu tableau.
ReDim Arr(1 To Nb) 'Tableau de base 1
'ReDim Arr(Nb) 'tableau de base 0 - de 0 à 14
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
'Si on ne sait pas d'avance le nombre d'objet que contiendra
'notre tableau
Nb = ThisWorkbook.Sheets.Count
For Z = 0 To Nb
ReDim Preserve Arr(Z)
Arr(Z) = Sheets(Z).Name
Z = Z + 1
Next
'On peut utiliser directement un array comme ceci
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete
ActiveSheet.Shapes.Range(Array("NomObjet1", "NomObjet2")).Select
'OU
Dim T As ShapeRange
With ActiveSheet
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
.Shapes.Range(Arr).Select
'OU pour travailler avec un objet ShapeRange
'plutôt que de sélectionner les objets
Set T = .Shapes.Range(Arr)
'Pour regrouper ces objets par exemple
'sans devoir les sélectionner
T.Group
End With
'On peut être un peu plus imaginatif pour se limiter
'à certains contrôles dans la feuille.
'------------------------------------------
Dans l'environnement des tableaux, ceci n'existe pas :
arr = arr & ",rond"",""bille" & z & """"
Une chaîne de caractère ne deviendra jamais un tableau.
Salutations!
"Laurent Daures" <http://cerbermail.com/?GSQ36o9bFb> a écrit dans le
message de news:
Bonjour,
en bricolant la macro de Garnote, je bute sur un problème.
je définis une liste de mots que j'aimerais intégrer dans une liste Array
afin de sélectionner les objets nommés.
ARR est une variable, et n'est pas inscrite dans la macro
For z = 1 To nb
arr = arr & ",rond"",""bille" & z & """"
Next z
ARR= Right(arr, Len(arr) - 1)
'(ARR="bille1","bille2")
ActiveSheet.Shapes.Range(Array(ARR)).Select
comment cette liste doit-elle être définie ?
Cela ne marche pas et me chagrine fort, sniff!
merci de votre aide, je vous ferai part du résultat dans la ficelle "ça
roule " du 19/8
Amicalement
Sitting Hoax
Bonjour Laurent,
Voici quelques notions sur les tableaux :
'------------------------------------------
Sub DéfnirUnTableau()
'Définir le type de la variable tableau
Dim Arr() As String * 15
'Le 15 limite les entrées à des mots de 15 caractères
'Ceci limite l'espace mémoire utilisé dans le cas
'où nous savons à l'avance notre besoin.
Arr = Array("rond", "Bille", "Boule")
End Sub
'------------------------------------------
Sub DéfnirUnTableau1()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
'Lorsque l'on connaît à l'avance le nombre d'items
'que contiendra notre tableau, on peut redéfinir
'la dimension tu tableau.
ReDim Arr(1 To Nb) 'Tableau de base 1
'ReDim Arr(Nb) 'tableau de base 0 - de 0 à 14
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
'Si on ne sait pas d'avance le nombre d'objet que contiendra
'notre tableau
Nb = ThisWorkbook.Sheets.Count
For Z = 0 To Nb
ReDim Preserve Arr(Z)
Arr(Z) = Sheets(Z).Name
Z = Z + 1
Next
'On peut utiliser directement un array comme ceci
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete
ActiveSheet.Shapes.Range(Array("NomObjet1", "NomObjet2")).Select
'OU
Dim T As ShapeRange
With ActiveSheet
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
.Shapes.Range(Arr).Select
'OU pour travailler avec un objet ShapeRange
'plutôt que de sélectionner les objets
Set T = .Shapes.Range(Arr)
'Pour regrouper ces objets par exemple
'sans devoir les sélectionner
T.Group
End With
'On peut être un peu plus imaginatif pour se limiter
'à certains contrôles dans la feuille.
'------------------------------------------
Dans l'environnement des tableaux, ceci n'existe pas :
arr = arr & ",rond"",""bille" & z & """"
Une chaîne de caractère ne deviendra jamais un tableau.
Salutations!
"Laurent Daures" <http://cerbermail.com/?GSQ36o9bFb> a écrit dans le
message de news: uKWh9EjpFHA.1572@TK2MSFTNGP14.phx.gbl...
Bonjour,
en bricolant la macro de Garnote, je bute sur un problème.
je définis une liste de mots que j'aimerais intégrer dans une liste Array
afin de sélectionner les objets nommés.
ARR est une variable, et n'est pas inscrite dans la macro
For z = 1 To nb
arr = arr & ",rond"",""bille" & z & """"
Next z
ARR= Right(arr, Len(arr) - 1)
'(ARR="bille1","bille2")
ActiveSheet.Shapes.Range(Array(ARR)).Select
comment cette liste doit-elle être définie ?
Cela ne marche pas et me chagrine fort, sniff!
merci de votre aide, je vous ferai part du résultat dans la ficelle "ça
roule " du 19/8
Amicalement
Sitting Hoax
Bonjour Laurent,
Voici quelques notions sur les tableaux :
'------------------------------------------
Sub DéfnirUnTableau()
'Définir le type de la variable tableau
Dim Arr() As String * 15
'Le 15 limite les entrées à des mots de 15 caractères
'Ceci limite l'espace mémoire utilisé dans le cas
'où nous savons à l'avance notre besoin.
Arr = Array("rond", "Bille", "Boule")
End Sub
'------------------------------------------
Sub DéfnirUnTableau1()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
'Lorsque l'on connaît à l'avance le nombre d'items
'que contiendra notre tableau, on peut redéfinir
'la dimension tu tableau.
ReDim Arr(1 To Nb) 'Tableau de base 1
'ReDim Arr(Nb) 'tableau de base 0 - de 0 à 14
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
'Si on ne sait pas d'avance le nombre d'objet que contiendra
'notre tableau
Nb = ThisWorkbook.Sheets.Count
For Z = 0 To Nb
ReDim Preserve Arr(Z)
Arr(Z) = Sheets(Z).Name
Z = Z + 1
Next
'On peut utiliser directement un array comme ceci
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete
ActiveSheet.Shapes.Range(Array("NomObjet1", "NomObjet2")).Select
'OU
Dim T As ShapeRange
With ActiveSheet
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
.Shapes.Range(Arr).Select
'OU pour travailler avec un objet ShapeRange
'plutôt que de sélectionner les objets
Set T = .Shapes.Range(Arr)
'Pour regrouper ces objets par exemple
'sans devoir les sélectionner
T.Group
End With
'On peut être un peu plus imaginatif pour se limiter
'à certains contrôles dans la feuille.
'------------------------------------------
Dans l'environnement des tableaux, ceci n'existe pas :
arr = arr & ",rond"",""bille" & z & """"
Une chaîne de caractère ne deviendra jamais un tableau.
Salutations!
"Laurent Daures" <http://cerbermail.com/?GSQ36o9bFb> a écrit dans le
message de news:
Bonjour,
en bricolant la macro de Garnote, je bute sur un problème.
je définis une liste de mots que j'aimerais intégrer dans une liste Array
afin de sélectionner les objets nommés.
ARR est une variable, et n'est pas inscrite dans la macro
For z = 1 To nb
arr = arr & ",rond"",""bille" & z & """"
Next z
ARR= Right(arr, Len(arr) - 1)
'(ARR="bille1","bille2")
ActiveSheet.Shapes.Range(Array(ARR)).Select
comment cette liste doit-elle être définie ?
Cela ne marche pas et me chagrine fort, sniff!
merci de votre aide, je vous ferai part du résultat dans la ficelle "ça
roule " du 19/8
Amicalement
Sitting Hoax
Bonjour Laurent,
Élaboré à partir d'excel 2003.
Voici les 3 exemples... je les ai scindés en 3 subs ... J'avoue lorsque
tout le code est regroupé ...ça ne fait plus beaucoup de
sens.
Je te ferai remarquer qu'il y a certaines différences à travers les
versions d'excel dans la façon de déclarer une variable de type
"Variant" ou Var() ... même si les 2 doivent contenir un tableau.
Par exemple :
A ) dans les 2 premières exemples .
On peut définir la variable Arr soit de cette façon Arr() ou Arr as
variant
B ) Dans l'exemple 1, si je définis Dim Arr() As String * 15 ,
c'est inacceptable mais ce ne l'est pas dans l'exemple 2
C ) Dans l'exemple 3, La variable Arr ne peut pas être défini ainsi :
Dim Arr as Variant
Car cette boucle plante : Redim Preserve s'adresse à un tableau.
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
Une façon de s'en sortir serait d'ajouter avant la boucle
l'instruction suivante:
ReDim Arr(0)
Voilà pour les tableaux !
En terminant, On oublie trop souvent les Collections comme ressource où on
peut vraiment "stocker" des objets !
'------------------------------
Dim C As New Collection
Dim S As Object
With ActiveSheet
For Each sh In .Shapes
C.Add sh, sh.Name
Next
End With
Set S = C(1)
MsgBox TypeName(C(1)) & " " & C(1).Name
'------------------------------
'------------------------------
Sub Exemple1()
'Définir le type de la variable tableau
Dim Arr()
'Le 15 limite les entrées à des mots de 15 caractères
'Ceci limite l'espace mémoire utilisé dans le cas
'où nous savons à l'avance notre besoin.
Arr = Array("rond", "Bille", "Boule")
MsgBox Arr(1)
End Sub
'------------------------------------------
Sub Exemple2()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
'Lorsque l'on connaît à l'avance le nombre d'items
'que contiendra notre tableau, on peut redéfinir
'la dimension tu tableau.
ReDim Arr(1 To Nb) 'Tableau de base 1
'ReDim Arr(Nb) 'tableau de base 0 - de 0 à 14
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
MsgBox Arr(3)
'Si on ne sait pas d'avance le nombre d'objet que contiendra
'notre tableau
Nb = ThisWorkbook.Sheets.Count
For Z = 0 To Nb
ReDim Preserve Arr(Z)
Arr(Z) = Sheets(Z).Name
Z = Z + 1
Next
End Sub
'------------------------------
'------------------------------
Sub Exemple3()
Dim Arr(), Z As Integer
'On peut utiliser directement un array comme ceci
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete
ActiveSheet.Shapes.Range(Array("Rectangle 1", "Ellipse 2")).Select
'OU
Dim T As ShapeRange
With ActiveSheet
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
' .Shapes.Range(Arr).Select
'OU pour travailler avec un objet ShapeRange
'plutôt que de sélectionner les objets
Set T = .Shapes.Range(Arr)
'Pour regrouper ces objets par exemple
'sans devoir les sélectionner
T.Group
End With
End Sub
'------------------------------
Salutations!
"Laurent Daures" <http://cerbermail.com/?GSQ36o9bFb> a écrit dans le
message de news:
Merci Denis,
j'ai lâchement contourné le problème avec ceci :
ActiveSheet.Shapes("Billes").Select
Selection.ShapeRange.Ungroup.Select
For y = 1 To ActiveSheet.Shapes.Count
If ActiveSheet.Shapes(y).Name <> "essieu" Then
On Error Resume Next
ActiveSheet.Shapes("bille" & y).Fill.ForeColor.SchemeColor = Int(Rnd()
*
55) + 1
End If
Next
Selection.ShapeRange.Group.Select
Selection.Name = "billes"
puisque les objets restaient groupés, il était inutile en fait de les
nommer
pour les regrouper.
Mais cela ne change pas le problème de la sélection par tableau.
Dans ta réponse,
pour "ReDim Preserve arr",
Excel me dit "variable non définie"
Amicalement
Sitting Hoax
Bonjour Laurent,
Élaboré à partir d'excel 2003.
Voici les 3 exemples... je les ai scindés en 3 subs ... J'avoue lorsque
tout le code est regroupé ...ça ne fait plus beaucoup de
sens.
Je te ferai remarquer qu'il y a certaines différences à travers les
versions d'excel dans la façon de déclarer une variable de type
"Variant" ou Var() ... même si les 2 doivent contenir un tableau.
Par exemple :
A ) dans les 2 premières exemples .
On peut définir la variable Arr soit de cette façon Arr() ou Arr as
variant
B ) Dans l'exemple 1, si je définis Dim Arr() As String * 15 ,
c'est inacceptable mais ce ne l'est pas dans l'exemple 2
C ) Dans l'exemple 3, La variable Arr ne peut pas être défini ainsi :
Dim Arr as Variant
Car cette boucle plante : Redim Preserve s'adresse à un tableau.
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
Une façon de s'en sortir serait d'ajouter avant la boucle
l'instruction suivante:
ReDim Arr(0)
Voilà pour les tableaux !
En terminant, On oublie trop souvent les Collections comme ressource où on
peut vraiment "stocker" des objets !
'------------------------------
Dim C As New Collection
Dim S As Object
With ActiveSheet
For Each sh In .Shapes
C.Add sh, sh.Name
Next
End With
Set S = C(1)
MsgBox TypeName(C(1)) & " " & C(1).Name
'------------------------------
'------------------------------
Sub Exemple1()
'Définir le type de la variable tableau
Dim Arr()
'Le 15 limite les entrées à des mots de 15 caractères
'Ceci limite l'espace mémoire utilisé dans le cas
'où nous savons à l'avance notre besoin.
Arr = Array("rond", "Bille", "Boule")
MsgBox Arr(1)
End Sub
'------------------------------------------
Sub Exemple2()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
'Lorsque l'on connaît à l'avance le nombre d'items
'que contiendra notre tableau, on peut redéfinir
'la dimension tu tableau.
ReDim Arr(1 To Nb) 'Tableau de base 1
'ReDim Arr(Nb) 'tableau de base 0 - de 0 à 14
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
MsgBox Arr(3)
'Si on ne sait pas d'avance le nombre d'objet que contiendra
'notre tableau
Nb = ThisWorkbook.Sheets.Count
For Z = 0 To Nb
ReDim Preserve Arr(Z)
Arr(Z) = Sheets(Z).Name
Z = Z + 1
Next
End Sub
'------------------------------
'------------------------------
Sub Exemple3()
Dim Arr(), Z As Integer
'On peut utiliser directement un array comme ceci
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete
ActiveSheet.Shapes.Range(Array("Rectangle 1", "Ellipse 2")).Select
'OU
Dim T As ShapeRange
With ActiveSheet
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
' .Shapes.Range(Arr).Select
'OU pour travailler avec un objet ShapeRange
'plutôt que de sélectionner les objets
Set T = .Shapes.Range(Arr)
'Pour regrouper ces objets par exemple
'sans devoir les sélectionner
T.Group
End With
End Sub
'------------------------------
Salutations!
"Laurent Daures" <http://cerbermail.com/?GSQ36o9bFb> a écrit dans le
message de news: u32aPqopFHA.2156@TK2MSFTNGP14.phx.gbl...
Merci Denis,
j'ai lâchement contourné le problème avec ceci :
ActiveSheet.Shapes("Billes").Select
Selection.ShapeRange.Ungroup.Select
For y = 1 To ActiveSheet.Shapes.Count
If ActiveSheet.Shapes(y).Name <> "essieu" Then
On Error Resume Next
ActiveSheet.Shapes("bille" & y).Fill.ForeColor.SchemeColor = Int(Rnd()
*
55) + 1
End If
Next
Selection.ShapeRange.Group.Select
Selection.Name = "billes"
puisque les objets restaient groupés, il était inutile en fait de les
nommer
pour les regrouper.
Mais cela ne change pas le problème de la sélection par tableau.
Dans ta réponse,
pour "ReDim Preserve arr",
Excel me dit "variable non définie"
Amicalement
Sitting Hoax
Bonjour Laurent,
Élaboré à partir d'excel 2003.
Voici les 3 exemples... je les ai scindés en 3 subs ... J'avoue lorsque
tout le code est regroupé ...ça ne fait plus beaucoup de
sens.
Je te ferai remarquer qu'il y a certaines différences à travers les
versions d'excel dans la façon de déclarer une variable de type
"Variant" ou Var() ... même si les 2 doivent contenir un tableau.
Par exemple :
A ) dans les 2 premières exemples .
On peut définir la variable Arr soit de cette façon Arr() ou Arr as
variant
B ) Dans l'exemple 1, si je définis Dim Arr() As String * 15 ,
c'est inacceptable mais ce ne l'est pas dans l'exemple 2
C ) Dans l'exemple 3, La variable Arr ne peut pas être défini ainsi :
Dim Arr as Variant
Car cette boucle plante : Redim Preserve s'adresse à un tableau.
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
Une façon de s'en sortir serait d'ajouter avant la boucle
l'instruction suivante:
ReDim Arr(0)
Voilà pour les tableaux !
En terminant, On oublie trop souvent les Collections comme ressource où on
peut vraiment "stocker" des objets !
'------------------------------
Dim C As New Collection
Dim S As Object
With ActiveSheet
For Each sh In .Shapes
C.Add sh, sh.Name
Next
End With
Set S = C(1)
MsgBox TypeName(C(1)) & " " & C(1).Name
'------------------------------
'------------------------------
Sub Exemple1()
'Définir le type de la variable tableau
Dim Arr()
'Le 15 limite les entrées à des mots de 15 caractères
'Ceci limite l'espace mémoire utilisé dans le cas
'où nous savons à l'avance notre besoin.
Arr = Array("rond", "Bille", "Boule")
MsgBox Arr(1)
End Sub
'------------------------------------------
Sub Exemple2()
Dim Arr() As String * 15
Dim Z As Integer, Nb As Integer
Nb = 12
'Lorsque l'on connaît à l'avance le nombre d'items
'que contiendra notre tableau, on peut redéfinir
'la dimension tu tableau.
ReDim Arr(1 To Nb) 'Tableau de base 1
'ReDim Arr(Nb) 'tableau de base 0 - de 0 à 14
For Z = 1 To Nb
Arr(Z) = Format(DateSerial(2005, Z, 1), "mmmm")
Next
MsgBox Arr(3)
'Si on ne sait pas d'avance le nombre d'objet que contiendra
'notre tableau
Nb = ThisWorkbook.Sheets.Count
For Z = 0 To Nb
ReDim Preserve Arr(Z)
Arr(Z) = Sheets(Z).Name
Z = Z + 1
Next
End Sub
'------------------------------
'------------------------------
Sub Exemple3()
Dim Arr(), Z As Integer
'On peut utiliser directement un array comme ceci
Sheets(Array("Feuil1", "Feuil2", "Feuil3")).Delete
ActiveSheet.Shapes.Range(Array("Rectangle 1", "Ellipse 2")).Select
'OU
Dim T As ShapeRange
With ActiveSheet
For Each sh In .Shapes
ReDim Preserve Arr(Z)
Arr(Z) = sh.Name
Z = Z + 1
Next
' .Shapes.Range(Arr).Select
'OU pour travailler avec un objet ShapeRange
'plutôt que de sélectionner les objets
Set T = .Shapes.Range(Arr)
'Pour regrouper ces objets par exemple
'sans devoir les sélectionner
T.Group
End With
End Sub
'------------------------------
Salutations!
"Laurent Daures" <http://cerbermail.com/?GSQ36o9bFb> a écrit dans le
message de news:
Merci Denis,
j'ai lâchement contourné le problème avec ceci :
ActiveSheet.Shapes("Billes").Select
Selection.ShapeRange.Ungroup.Select
For y = 1 To ActiveSheet.Shapes.Count
If ActiveSheet.Shapes(y).Name <> "essieu" Then
On Error Resume Next
ActiveSheet.Shapes("bille" & y).Fill.ForeColor.SchemeColor = Int(Rnd()
*
55) + 1
End If
Next
Selection.ShapeRange.Group.Select
Selection.Name = "billes"
puisque les objets restaient groupés, il était inutile en fait de les
nommer
pour les regrouper.
Mais cela ne change pas le problème de la sélection par tableau.
Dans ta réponse,
pour "ReDim Preserve arr",
Excel me dit "variable non définie"
Amicalement
Sitting Hoax