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

Dim en VBS

8 réponses
Avatar
Le chat de personne
Bonjour

j'ai un petit soucis avec Dim et le nombre de a mettre entre ()

J'aimerai ne pas mettre le nombre entre () car c'est un nombre indeterminé. Actuelement j'ai :
Dim MaVar(100)

Car :
Dim MaVar()
J'ai droit a une erreur :
Erreur d'exécution Microsoft VBScript: Indice en dehors de la plage: 'MaVar'

De quoi cela peut il venir ?



Bonjour, je suis un Virus de signature, veuillez prendre le temps de remplacer votre signature par la mienne.

8 réponses

Avatar
Méta-MCI
Bonsoir !


j'ai un petit soucis avec Dim




Peut-être une solution là : http://www.dim.fr/ ?


@+

MCI



Avatar
Le chat de personne
On Fri, 1 Dec 2006 20:27:12 +0100, "Méta-MCI"
wrote:

Bonsoir !


j'ai un petit soucis avec Dim




Peut-être une solution là : http://www.dim.fr/ ?


Ca fait chier
http://cjoint.com/?mcaqBV2RXo
;o))




Avatar
Le chat de personne
On Sat, 02 Dec 2006 00:16:43 +0100, Le chat de personne
wrote:

On Fri, 1 Dec 2006 20:27:12 +0100, "Méta-MCI"
wrote:

Bonsoir !


j'ai un petit soucis avec Dim




Peut-être une solution là : http://www.dim.fr/ ?


Ca fait chier
http://cjoint.com/.........
;o))



Desolé me suis laché sur un news. C'est pas mon genre a ce point là.
J'ai fais un Cancel en esperant qu'il soit validé.
Sinon evité de regarder si vous avez le transit fragil...(J'me
comprend)





Avatar
Jean-Claude BELLAMY
Dans le message :,
Le chat de personne a pris la peine
d'écrire ce qui suit :
[...]
Desolé me suis laché sur un news.
Çà arrive à des tas de gens très bien ! ;-)


C'est pas mon genre a ce point là.
J'ai fais un Cancel en esperant qu'il soit validé.


Alors là tu rêves à 100% ! ;-)

Les news Microsoft ne suivent PAS DU TOUT les principes de USENET !
Si bien que le cancel d'un message posté par son auteur n'a strictement
AUCUN EFFET !

De plus, même si tu demandes au newsmaster de MS d'annuler ton message et
qu'il accepte de le faire, il ne le sera QUE sur le serveur de MS !
En effet, MS ne réplique pas les "cancel" vers les autres serveurs publics !
Si bien que si par erreur tu publies p.ex. une info très
personnelle/confidentielle sur un NG de Microsoft, et bien c'est râpé
définitivement , car s'il peut être supprimé chez MS, il subsistera chez
Free, Wanadoo, ClubInternet, ...!

C'est d'ailleurs très pénible et agaçant ...
Cela fait des années que les MVP nous demandons à MS la mise en conformité
avec les standards, mais cela a autant d'effet que de persuader Steve
BALLMER de mettre Windows en Open Source ! ;-)


--
May the Force be with You!
La Connaissance s'accroît quand on la partage
----------------------------------------------------------
Jean-Claude BELLAMY [MVP]
http://www.bellamyjc.org ou http://jc.bellamy.free.fr

Avatar
jbongran
Le chat de personne wrote:
Bonjour

j'ai un petit soucis avec Dim et le nombre de a mettre entre ()

J'aimerai ne pas mettre le nombre entre () car c'est un nombre
indeterminé. Actuelement j'ai :
Dim MaVar(100)

Car :
Dim MaVar()
J'ai droit a une erreur :
Erreur d'exécution Microsoft VBScript: Indice en dehors de la plage:
'MaVar'

De quoi cela peut il venir ?



Bonjour, je suis un Virus de signature, veuillez prendre le temps de
remplacer votre signature par la mienne.


Extrait de la doc de vbscript 5.6:
"Vous pouvez aussi utiliser l'instruction Dim avec des parenthèses vides
pour déclarer un tableau dynamique. Une fois cette déclaration effectuée,
utilisez l'instruction ReDim à l'intérieur d'une procédure pour définir le
nombre de dimensions et d'éléments contenus dans le tableau. Si vous essayez
de déclarer de nouveau une dimension pour une variable tableau dont la
taille a été spécifiée explicitement dans une instruction Dim, une erreur se
produit."
On pourrait voir le bout de code (la ligne) où se produit l'erreur ?

Avatar
Le chat de personne
On Sat, 2 Dec 2006 01:17:14 +0100, "jbongran"
wrote:

Extrait de la doc de vbscript 5.6:
"Vous pouvez aussi utiliser l'instruction Dim avec des parenthèses vides
pour déclarer un tableau dynamique. Une fois cette déclaration effectuée,
utilisez l'instruction ReDim à l'intérieur d'une procédure pour définir le
nombre de dimensions et d'éléments contenus dans le tableau. Si vous essayez
de déclarer de nouveau une dimension pour une variable tableau dont la
taille a été spécifiée explicitement dans une instruction Dim, une erreur se
produit."


La doc complete se trouve où ? par ce que j'en trouve pas mal mais en
anglais ou bien de logiciel comme VBSedit en shareware.
L'utilisation de l'aide etant aussi en shareware.

On pourrait voir le bout de code (la ligne) où se produit l'erreur ?


L'erreur se produit quand je remplace ListeSousRepertoireOrigine(100)
par ListeSousRepertoireOrigine() seulement si un jour je depasse 100
faudra que j'augmente.
Mais bon avec un Redim ca devrait le faire.

Faut pas trop regarder la qualité de mon source c'est brouillon mais
ca marche Si un jour j'ai le temps......

'**************************************************************************************
' Script VBS pour VirtualDub et redimensionnement photo
' Permet de deplacer les fichiers quand ils sont terminés dans un
autre repertoire/Lecteur
' Il peut etre lancé depuis le plannificateur de tache
' Derniere Mise a jour le 01/12/2006
' - deplacement de la racine n'etait pas pris en compte (Fait)
'**************************************************************************************


' Prevoir les chemin en argument ligne de commande et un log pour les
erreur


'**************************************************************************************
' Declaration Variable public et creation des objets
'**************************************************************************************
Dim ListeSousRepertoireOrigine(100) ' liste des sous repretoires
dossier Fini
Dim inc ' incremente dans une boucle
Dim CompteurSousRepertoire
Dim FullOrigine(100), FullDestination(100) 'Nom complet des path
origine et destination

' Cree l'objet FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Set GetOrigineFindSubfolders = FSO.GetFolder("E:fini")
Set GetDestinationfolders = FSO.GetFolder("F:A_Verifier")

'**************************************************************************************
' Compare le dossier d'origine au dossier destination pour voir si des
' repertoire sont a creer
'**************************************************************************************
Function CompareAndCreateSubFolder(destination, liste)
For a=1 To CompteurSousRepertoire
If (FSO.FolderExists(destination & liste(a))) = true Then
'WScript.Echo destination & liste(a) & " exists."
Else
WScript.Echo destination & liste(a) & " Not exists."
FSO.CreateFolder(destination & liste(a))
End if
Next
End Function

'**************************************************************************************
' Fonction qui stock dans ListeSousRepertoireOrigine les sous
repertoire d'origine
'**************************************************************************************
Function findSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
If Not Subfolder="" Then
' incremente pour compter le nombre de sous repertoire
inc = inc+1
' Supprime la racine commune du repertoire
ListeSousRepertoireOrigine(inc) (Replace(Subfolder,"E:Fini","",1,-1,1))
FullOrigine(inc) = GetOrigineFindSubfolders +
ListeSousRepertoireOrigine(inc)
FullDestination(inc) = GetDestinationfolders +
ListeSousRepertoireOrigine(inc)
End If
'WScript.Echo ListeSousRepertoireOrigine(inc)
' si un sous repertoire existe alors creer une nouvelle boucle
FOR
FindSubFolders Subfolder
Next
' Ajoute le repertoire de reference qui n'est
pas considere comme sous repertoire
Inc = Inc + 1
ListeSousRepertoireOrigine(inc)=""
FullOrigine(inc) = GetOrigineFindSubfolders +
ListeSousRepertoireOrigine(inc)
FullDestination(inc) = GetDestinationfolders +
ListeSousRepertoireOrigine(inc)

' Variable indicant le nombre de sous repertoire
CompteurSousRepertoire = Inc
End Function

'**************************************************************************************
' Fonction qui deplace les fichiers
'**************************************************************************************
Function MoveFileSubFolders (liste , origine, destination)
On error Resume next
For a = 1 To CompteurSousRepertoire
Set source = FSO.GetFolder(FullOrigine(a))
Set Files = source.Files
For Each File In Files
' Si le fichier n'existe pas a destination le deplacer
directement
if (fso.FileExists(Replace
(File,GetOrigineFindSubfolders,GetDestinationfolders ,1,-1,1))) False Then
'WScript.Echo file & " n'existe pas "
FSO.MoveFile File , Replace
(File,GetOrigineFindSubfolders,GetDestinationfolders ,1,-1,1)
' Sinon le renomer
Else
'Extrait le chemin du fichier
Path = fso.GetParentFolderName(Replace
(File,GetOrigineFindSubfolders,GetDestinationfolders ,1,-1,1) ) & ""
'Extrait le non du fichier en collant un nombre aleatoire
Name = FSO.GetBaseName(file) & "-(Random"&Int((upperbound -
lowerbound + 1) * Rnd*1000000000 + lowerbound)&")"
'Extrait l'extension du fichier
Extension = "." & fso.GetExtensionName(file)

' Crée le nouveau nom du fichier en double
File1 = path & name & extension

' Deplace le fichier
FSO.MoveFile File, file1

' Declenche l'affichage su erreur 70 (Fichier Bloqué)
If err.Numberp Then MsgBox "Permission refusée sur le
fichier :" & Chr(10) & File,,"Erreur n° " & Err.Number
Err.Clear ' reset de l'erreur

'Creer l'affichage d'erreur sur disque saturé
' ICI

End If
Next
Next
End function


'**************************************************************************************
' Debut programme
'**************************************************************************************

inc = 0 ' initialise inc à zero
CompteurSousRepertoire = 0 ' initialise CompteurSousRepertoire à zero

' Demarre le generateur de nombre aleatoire
randomize

' Lance la Fonction FindSubfolders
FindSubfolders GetOrigineFindSubfolders

' Lance la Fonction CompareSubFolder
CompareAndCreateSubFolder GetDestinationFolders,
ListeSousRepertoireOrigine

' Lance la fonction qui deplace les fichiers terminé
MoveFileSubFolders ListeSousRepertoireOrigine, Fullorigine,
FullDestination

Avatar
Jean
La doc complete se trouve où ? par ce que j'en trouve pas mal mais en
anglais


La doc FR est téléchargeable ici :

http://download.microsoft.com/download/winscript56/install/5.6/w98nt42kme/fr/scd56fr.exe

La doc EN est téléchargeable ici :

http://www.microsoft.com/downloads/details.aspx?FamilyId592C48-207D-4BE1-8A76-1C4099D7BBB9&displaylang=en

Noter que la doc EN a été actualisée.
Elle est aussi disponible en ligne :
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnanchor/html/scriptinga.asp

Amicalement,

--
Jean - JMST
Belgium

Avatar
jbongran
Le chat de personne wrote:
On Sat, 2 Dec 2006 01:17:14 +0100, "jbongran"
wrote:

Extrait de la doc de vbscript 5.6:
"Vous pouvez aussi utiliser l'instruction Dim avec des parenthèses
vides pour déclarer un tableau dynamique. Une fois cette déclaration
effectuée, utilisez l'instruction ReDim à l'intérieur d'une
procédure pour définir le nombre de dimensions et d'éléments
contenus dans le tableau. Si vous essayez de déclarer de nouveau une
dimension pour une variable tableau dont la taille a été spécifiée
explicitement dans une instruction Dim, une erreur se produit."


La doc complete se trouve où ? par ce que j'en trouve pas mal mais en
anglais ou bien de logiciel comme VBSedit en shareware.
L'utilisation de l'aide etant aussi en shareware.

On pourrait voir le bout de code (la ligne) où se produit l'erreur ?


L'erreur se produit quand je remplace ListeSousRepertoireOrigine(100)
par ListeSousRepertoireOrigine() seulement si un jour je depasse 100
faudra que j'augmente.
Mais bon avec un Redim ca devrait le faire.

Faut pas trop regarder la qualité de mon source c'est brouillon mais
ca marche Si un jour j'ai le temps......

'**************************************************************************************
' Script VBS pour VirtualDub et redimensionnement photo
' Permet de deplacer les fichiers quand ils sont terminés dans un
autre repertoire/Lecteur
' Il peut etre lancé depuis le plannificateur de tache
' Derniere Mise a jour le 01/12/2006
' - deplacement de la racine n'etait pas pris en compte (Fait)
'**************************************************************************************


' Prevoir les chemin en argument ligne de commande et un log pour les
erreur


'**************************************************************************************
' Declaration Variable public et creation des objets
'**************************************************************************************
Dim ListeSousRepertoireOrigine(100) ' liste des sous repretoires
dossier Fini
Dim inc ' incremente dans une boucle
Dim CompteurSousRepertoire
Dim FullOrigine(100), FullDestination(100) 'Nom complet des path
origine et destination

' Cree l'objet FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Set GetOrigineFindSubfolders = FSO.GetFolder("E:fini")
Set GetDestinationfolders = FSO.GetFolder("F:A_Verifier")

'**************************************************************************************
' Compare le dossier d'origine au dossier destination pour voir si des
' repertoire sont a creer
'**************************************************************************************
Function CompareAndCreateSubFolder(destination, liste)
For a=1 To CompteurSousRepertoire
If (FSO.FolderExists(destination & liste(a))) = true Then
'WScript.Echo destination & liste(a) & " exists."
Else
WScript.Echo destination & liste(a) & " Not exists."
FSO.CreateFolder(destination & liste(a))
End if
Next
End Function

'**************************************************************************************
' Fonction qui stock dans ListeSousRepertoireOrigine les sous
repertoire d'origine
'**************************************************************************************
Function findSubFolders(Folder)
For Each Subfolder in Folder.SubFolders
If Not Subfolder="" Then
' incremente pour compter le nombre de sous repertoire
inc = inc+1
' Supprime la racine commune du repertoire
ListeSousRepertoireOrigine(inc) > (Replace(Subfolder,"E:Fini","",1,-1,1))
FullOrigine(inc) = GetOrigineFindSubfolders +
ListeSousRepertoireOrigine(inc)
FullDestination(inc) = GetDestinationfolders +
ListeSousRepertoireOrigine(inc)
End If
'WScript.Echo ListeSousRepertoireOrigine(inc)
' si un sous repertoire existe alors creer une nouvelle boucle
FOR
FindSubFolders Subfolder
Next
' Ajoute le repertoire de reference qui n'est
pas considere comme sous repertoire
Inc = Inc + 1
ListeSousRepertoireOrigine(inc)=""
FullOrigine(inc) = GetOrigineFindSubfolders +
ListeSousRepertoireOrigine(inc)
FullDestination(inc) = GetDestinationfolders +
ListeSousRepertoireOrigine(inc)

' Variable indicant le nombre de sous repertoire
CompteurSousRepertoire = Inc
End Function

'**************************************************************************************
' Fonction qui deplace les fichiers
'**************************************************************************************
Function MoveFileSubFolders (liste , origine, destination)
On error Resume next
For a = 1 To CompteurSousRepertoire
Set source = FSO.GetFolder(FullOrigine(a))
Set Files = source.Files
For Each File In Files
' Si le fichier n'existe pas a destination le deplacer
directement
if (fso.FileExists(Replace
(File,GetOrigineFindSubfolders,GetDestinationfolders ,1,-1,1))) > False Then
'WScript.Echo file & " n'existe pas "
FSO.MoveFile File , Replace
(File,GetOrigineFindSubfolders,GetDestinationfolders ,1,-1,1)
' Sinon le renomer
Else
'Extrait le chemin du fichier
Path = fso.GetParentFolderName(Replace
(File,GetOrigineFindSubfolders,GetDestinationfolders ,1,-1,1) ) & ""
'Extrait le non du fichier en collant un nombre aleatoire
Name = FSO.GetBaseName(file) & "-(Random"&Int((upperbound -
lowerbound + 1) * Rnd*1000000000 + lowerbound)&")"
'Extrait l'extension du fichier
Extension = "." & fso.GetExtensionName(file)

' Crée le nouveau nom du fichier en double
File1 = path & name & extension

' Deplace le fichier
FSO.MoveFile File, file1

' Declenche l'affichage su erreur 70 (Fichier Bloqué)
If err.Numberp Then MsgBox "Permission refusée sur le
fichier :" & Chr(10) & File,,"Erreur n° " & Err.Number
Err.Clear ' reset de l'erreur

'Creer l'affichage d'erreur sur disque saturé
' ICI

End If
Next
Next
End function


'**************************************************************************************
' Debut programme
'**************************************************************************************

inc = 0 ' initialise inc à zero
CompteurSousRepertoire = 0 ' initialise CompteurSousRepertoire à zero

' Demarre le generateur de nombre aleatoire
randomize

' Lance la Fonction FindSubfolders
FindSubfolders GetOrigineFindSubfolders

' Lance la Fonction CompareSubFolder
CompareAndCreateSubFolder GetDestinationFolders,
ListeSousRepertoireOrigine

' Lance la fonction qui deplace les fichiers terminé
MoveFileSubFolders ListeSousRepertoireOrigine, Fullorigine,
FullDestination


La doc se trouve ici
http://www.microsoft.com/downloads/details.aspx?familyidç4494D3-C4E1-4E18-9C6C-0EA28C9A5D9D&displaylang=fr
Elle est dans le fichier scd56fr.exe

Tu y trouvera tout ce qu'il te faut pour terminer ton code, entre autre
UBound qui te permettra de savoir combien il y a d'objets dans une
collection (par Exemple UBound(Folder.SubFolder)
ou l'instruction ReDim qui permet de redimensionner un tableau et associé à
l'option Preserve permet de ne pas perdre les éléments déja présents dans le
tableau (si le nombre augmente bien sûr)