OVH Cloud OVH Cloud

Besoin d'aide sur les arrays ou la création d'objets

7 réponses
Avatar
Ziggy
Bonjour @ tous,

J'ai des problèmes de compréhension sur la création de tableau
Le principe, je pense l'avoir :
Créer un objet contenant une liste
Boucler sur la liste et incrémenter un tableau

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\"
& strComputer & "\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PrinterDriver")
For objItem In colItems
Set objArray = ??? Quoi mettre ???
item = 0
For Each objInArray In objArray
Redim Preserve strarrDependentFiles(item)
strarrDependentFiles(item) = objitem.DependentFiles
item = item + 1
Next
Next

For item = LBound(arrDependentFiles) To UBound(arrDependentFiles)
Wscript.Echo arrDependentFiles(item)
Next


Mais dans mon cas je ne vois pas comment créer le tableau.

Pour la propriété DependentFiles (Data type: string array), je voudrais
remplir la liste dans arrDependentFiles() afin de la lister.
Mais là, je sèche.

Si quelqu'un pouvait m'aider ?

Par avance merci

Thierry

7 réponses

Avatar
Georges MAUREL
Bonjour
Peut-être que cela devrait fonctionner...

strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!"
& strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_PrinterDriver")

item = 0

For Each objItem In colItems
For boucle = LBound(objitem.DependentFiles) To
UBound(objitem.DependentFiles)
Redim Preserve strarrDependentFiles(item)
strarrDependentFiles(item) = objitem.DependentFiles(boucle)
item = item + 1
Next
Next


Cordialement
Georges



"Ziggy" <tpmsn2004nospam]@nospamfree.fr> a écrit dans le message de
news:
Bonjour @ tous,

J'ai des problèmes de compréhension sur la création de tableau
Le principe, je pense l'avoir :
Créer un objet contenant une liste
Boucler sur la liste et incrémenter un tableau

strComputer = "."
Set objWMIService GetObject("winmgmts:{impersonationLevel=impersonate}!"
& strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from
Win32_PrinterDriver")

For objItem In colItems
Set objArray = ??? Quoi mettre ???
item = 0
For Each objInArray In objArray
Redim Preserve strarrDependentFiles(item)
strarrDependentFiles(item) = objitem.DependentFiles
item = item + 1
Next
Next

For item = LBound(arrDependentFiles) To UBound(arrDependentFiles)
Wscript.Echo arrDependentFiles(item)
Next


Mais dans mon cas je ne vois pas comment créer le tableau.

Pour la propriété DependentFiles (Data type: string array), je voudrais
remplir la liste dans arrDependentFiles() afin de la lister.
Mais là, je sèche.

Si quelqu'un pouvait m'aider ?

Par avance merci

Thierry




Avatar
Fred
Dans : news:,
Ziggy disait :
Bonjour @ tous,


Bonjour,

J'ai des problèmes de compréhension sur la création de tableau
Le principe, je pense l'avoir :
Créer un objet contenant une liste
Boucler sur la liste et incrémenter un tableau


Je complète la réponse de George car en testant j'ai noté que parfois,
le tableau DependentFiles n'existe pas (?) probablement à cause d'une
imprimante virtuelle que j'ai sur mon poste. J'ai donc ajouté un test.

strComputer = "."
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!" & strComputer &
"rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from
Win32_PrinterDriver")
Dim a
a = Array()
item=0
For each objItem In colItems
If not IsNull(objItem.DependentFiles) Then
Redim Preserve a(UBound(a)+UBound(objItem.DependentFiles)+1)
For i=0 to UBound(objItem.DependentFiles)
a(item)=objItem.DependentFiles(i)
item=item+1
Next
End If
Next

For item = LBound(a) To UBound(a)
Wscript.Echo item & " : " & a(item)
Next

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
Ziggy
C'est pas peut-être, c'est sur !
Merci Georges.
Ne pas oublier les parenthèses lors de la déclaration de la variable si
Option Implicit
et le -1 pour le Ubound de la lecture du tableau

"Georges MAUREL" <georges.maurel_at_free.fr> a écrit dans le message de
news: %
Bonjour
Peut-être que cela devrait fonctionner...

strComputer = "."
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!"
& strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from
Win32_PrinterDriver")

item = 0

For Each objItem In colItems
For boucle = LBound(objitem.DependentFiles) To
UBound(objitem.DependentFiles)
Redim Preserve strarrDependentFiles(item)
strarrDependentFiles(item) = objitem.DependentFiles(boucle)
item = item + 1
Next
Next


Cordialement
Georges



"Ziggy" <tpmsn2004nospam]@nospamfree.fr> a écrit dans le message de
news:
Bonjour @ tous,

J'ai des problèmes de compréhension sur la création de tableau
Le principe, je pense l'avoir :
Créer un objet contenant une liste
Boucler sur la liste et incrémenter un tableau

strComputer = "."
Set objWMIService > GetObject("winmgmts:{impersonationLevel=impersonate}!"
& strComputer & "rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from
Win32_PrinterDriver")

For objItem In colItems
Set objArray = ??? Quoi mettre ???
item = 0
For Each objInArray In objArray
Redim Preserve strarrDependentFiles(item)
strarrDependentFiles(item) = objitem.DependentFiles
item = item + 1
Next
Next

For item = LBound(arrDependentFiles) To UBound(arrDependentFiles)
Wscript.Echo arrDependentFiles(item)
Next


Mais dans mon cas je ne vois pas comment créer le tableau.

Pour la propriété DependentFiles (Data type: string array), je voudrais
remplir la liste dans arrDependentFiles() afin de la lister.
Mais là, je sèche.

Si quelqu'un pouvait m'aider ?

Par avance merci

Thierry








Avatar
Ziggy
Merci Fred, cela marche également.

Par contre, je ne comprend pas l'utilité de
Redim Preserve a(UBound(a)+UBound(objItem.DependentFiles)+1)

Thierry

strComputer = "."
Set objWMIService =
GetObject("winmgmts:{impersonationLevel=impersonate}!" & strComputer &
"rootcimv2")
Set colItems = objWMIService.ExecQuery("Select * from
Win32_PrinterDriver")
Dim a
a = Array()
item=0
For each objItem In colItems
If not IsNull(objItem.DependentFiles) Then
Redim Preserve a(UBound(a)+UBound(objItem.DependentFiles)+1)
For i=0 to UBound(objItem.DependentFiles)
a(item)=objItem.DependentFiles(i)
item=item+1
Next
End If
Next

For item = LBound(a) To UBound(a)
Wscript.Echo item & " : " & a(item)
Next


Avatar
Fred
Dans : news:%,
Ziggy disait :
Merci Fred, cela marche également.

Par contre, je ne comprend pas l'utilité de
Redim Preserve a(UBound(a)+UBound(objItem.DependentFiles)+1)


Plutôt que de faire un Redim Preserve à chaque nouvel élément du
tableau, je le fait dès que je connais la taille du tableau
DependentFiles.
Si DependentFiles a une taille de N, j'augmente tout de suite la taille
de mon tableau «a» de N éléments. La taille de DependFiles étant égale à
UBound + 1 car les indices commencent à 0.
C'est juste pour ne pas trop fatiguer le processeur ;-)

As-tu eu des cas où DependentFiles était nul ? Je ne suis pas rentré
dans le détail mais je crois que c'est l'imprimante virtuelle «Microsoft
Office Document Image Writer» qui provoquait cela. C'est installé avec
Office 2003.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT

Avatar
Ziggy
Je ne m'étais pas rendu compte du problème car j'avais activé On Error
Resume Next.
J'ai également une erreur

Merci

Thierry

As-tu eu des cas où DependentFiles était nul ? Je ne suis pas rentré dans
le détail mais je crois que c'est l'imprimante virtuelle «Microsoft Office
Document Image Writer» qui provoquait cela. C'est installé avec Office
2003.

--
Fred
http://www.cerbermail.com/?3kA6ftaCvT


Avatar
Jean
Plutôt que de faire un Redim Preserve à chaque nouvel élément du tableau, je
le fait dès que je connais la taille du tableau DependentFiles.
Si DependentFiles a une taille de N, j'augmente tout de suite la taille de
mon tableau «a» de N éléments. La taille de DependFiles étant égale à UBound
+ 1 car les indices commencent à 0.


On peut aussi se passer de la variable item et de son incrémentation :

'---8<---
strComputer = "."
strClass="Win32_PrinterDriver"

Set coll=_
GetObject _
(_
"winmgmts:{impersonationLevel=impersonate}!"&_
strComputer&_
"rootcimv2"_
)_
.ExecQuery("Select * from "&strClass)

ReDim a(-1)

For Each obj In coll
With obj
If Not IsNull(.DependentFiles) Then
For i=0 to UBound(.DependentFiles)
ReDim Preserve a(UBound(a)+1)
a(UBound(a))=.DependentFiles(i)
WScript.Sleep 10
Next
End If
End With
WScript.Sleep 10
Next

For i=LBound(a) To UBound(a)
r=r&i&" : "&a(i)&VbNewLine
Next

WScript.Echo r
'---8<---

C'est juste pour ne pas trop fatiguer le processeur ;-)


Pour ne pas trop le fatiguer ... ne pas oublier d'utiliser Sleep dans
les boucles surtout si on parcours des collections à envergure variable
:-) (cf ci-dessus)

Amicalement,

--
Jean - JMST
Belgium