pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009
-
23 juin 2006 à 12:17
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009
-
23 juin 2006 à 21:29
Bonjour,
Je voudrais créer une variable qui aurait un nombre dynamique, par exemple :
Colonne1, Colonne2, Colonne3, etc.
Je pense qu'il faut utiliser quelque chose comme Colonne(i), mais je n'ai aucune idée de la manière dont je peux coder ça. De plus, je ne sais pas quoi taper comme mot de recherche.
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 23 juin 2006 à 14:20
Salut,
Essaie ceci pour voir si cela t'aide un peu
Dim i As Integer
Dim Colonne() As String
Dim ColonneSurUneLigne() As String
ReDim Colonne(0)
i = 1
Do While Not EOF (1)
Line Input #1, Texte 'Récupere la ligne dans texte
ColonneSurUneLigne = Split(Texte, ";") 'Split de la ligne avec ; comme délimiteur
For i = LBound (ColonneSurUneLigne) To UBound(ColonneSurUneLigne)
ReDim Preserve Colonne(UBound(Colonne) + 1)
'rempli Colonne avec les colonnes trouvees sur le ligne
Colonne(UBound(Colonne)) = ColonneSurUneLigne(i)
Next
Loop
For i = 1 To UBound(Colonne)
Call MsgBox(Colonne(i))
Next
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 23 juin 2006 à 13:10
Oups, j'ai corrigé.
Et comme une erreur n'arrive jamais seule, toujours à l'exécution, il me fait une erreur "Argument ou appel de procédure incorrect" sur la ligne "Tableau(i) = Mid(Texte, ...)"
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 23 juin 2006 à 13:30
En effet. J'ai corrigé mais j'ai encore une erreur (je suis maudit !)
Toujours sur la ligne Tableau(i) = ... , il me dit que l'indice est en dehors de la plage.
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 23 juin 2006 à 13:44
Je crois qu'en effet, il sera plus simple pour vous que je vous montre le code complet. Pardon si c'est simple, mais c'est de mon niveau ;) Ce sont des données que je prends à partir d'un fichier texte.
Do While Not EOF(1)
Line Input #1, Texte
longueur = Len(Texte) 'Calcul de la longueur de la ligne
DernierCar = InStrRev(Texte, ";")
curseur = 1 'Initialisation du curseur au 1er caractère
i = 1
ReDim Preserve Colonne(i)
While curseur <= longueur 'Boucle : tant qu'on arrive pas à la fin du texte
entree = (InStr(curseur, Texte, ";")) If curseur DernierCar + 1 Then TexteTraite TexteTraite & "/" & Right(Texte, longueur - DernierCar): GoTo Suite
ColonneDetachee = Mid(Texte, curseur, entree - curseur)
TexteTraite = TexteTraite & "/" & ColonneDetachee
curseur = Val(entree) + 1 'Définition de la nouvelle position du curseur : au caractère + 1 (pour éviter qu'il ne repère à nouveau ce caractère)
Colonne(i) = ColonneDetachee
i = i + 1
Wend
Suite:
MsgBox Colonne1 & "/" & Colonne2 & "/" & Colonne3
TexteTraite = ""
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 23 juin 2006 à 14:07
Alors, si je remets i = 1, c'est pour recommencer une série de colonnes.
Mon fichier texte contient des données dans ce format :
123;ABC;531;ZFDV;UFGH; ...
En gros des caractères séparés par des points-virgules ; qui provient d'une exportation de tableau.
Ce que je veux faire, c'est lire chaque ligne, délimiter les données qu'il y a entre chaque point-virgule, mettre les données d'une ligne en mémoire pour ensuite les envoyer à un processus de calcul (qui est déjà fait). Donc, j'ai déjà réussi à isoler les données, ce que je voudrais c'est créer des variables dynamiquement (d'où le Colonne(i) ) pour ensuite faire un truc du genre
Call Calcul (Colonne1, Colonne4)
où Calcul est un PrivateSub fonctionnant déjà, avec des paramètres : Calcul (Paramètre1 As String, Paramètre2 As String)
Voili voilà, j'espère que j'ai pu me faire comprendre ;)
pjouy
Messages postés110Date d'inscriptionmardi 8 juillet 2003StatutMembreDernière intervention18 mai 2009 23 juin 2006 à 14:41
En fait, pour mon code, il fallait faire une légère modification :
Do While Not EOF(1)
Line Input #1, Texte 'Récupere la ligne dans texte
ColonneSurUneLigne = Split(Texte, ";") 'Split de la ligne avec ; comme délimiteur
ReDim Colonne(0)
i = 1
For i = LBound(ColonneSurUneLigne) To UBound(ColonneSurUneLigne)
ReDim Preserve Colonne(UBound(Colonne) + 1)
'rempli Colonne avec les colonnes trouvees sur le ligne
Colonne(UBound(Colonne)) = ColonneSurUneLigne(i)
Next
DoEvents
Call CalculStats(Colonne(2), Colonne(4), Colonne(10), CloturationMemeJour, Colonne(10))
Erase Colonne
Loop
End If
Merci beaucoup, j'ai beaucoup appris grace à toi aujourd'hui !!
Pascal
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 23 juin 2006 à 14:46
Re,
De rien.
Vu que tu appelle CalculStats a chaque passage dans la boucle et que tu fais un Erase Colonne , tu n'a pas besoin de ColonneSurUneLigne.
Donc cela donne
Do While Not EOF(1)
Line Input #1, Texte 'Récupere la ligne dans texte
Colonne = Split(Texte, ";") 'Split de la ligne avec ; comme délimiteur
DoEvents
Call CalculStats(Colonne(2), Colonne(4), Colonne(10), CloturationMemeJour, Colonne(10))
Erase Colonne
Loop
jrivet
Messages postés7392Date d'inscriptionmercredi 23 avril 2003StatutMembreDernière intervention 6 avril 201260 23 juin 2006 à 15:22
Salut,
MSDN Dit:
LBound: Renvoie une valeur de type
<object id= "alink_4" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object> [javascript:alink_4.Click() Long] contenant le plus petit indice disponible pour la dimension indiquée d'un
<object id ="alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_5.Click() tableau].
UBound: Renvoie une valeur de type
<object id="alink_4" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_4.Click() Long] contenant le plus grand indice disponible pour la dimension indiquée d'un
<object id="alink_5" type="application/x-oleobject" classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11"></object>[javascript:alink_5.Click() tableau].
@+, Julien Pensez: Moteur de Recherche, Réponse Acceptée
Mais Surtout: Règlement/FONT>