Boucle "for" sous visual basic

Résolu/Fermé
David666 Messages postés 10 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 18 mars 2009 - 4 mars 2009 à 12:02
David666 Messages postés 10 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 18 mars 2009 - 5 mars 2009 à 12:01
Bonjour,

Je début en Visual Basic et j'aurais besoin d'un renseignement.

Je souhaite programmer plusieurs boucles FOR qui doivent renvoyer un certain nombre de coordonnées, en répétant l'instruction n fois ( de 1 à n)
Le problème vient de la valeur de n... Je m'explique :
- n doit pouvoir être fixée par l'utilisateur dans une feuille de calcul excel avant l'exécution du programme (suivant la précision recherchée, il faut répéter la boucle 10, 20, 100 fois)
- une fois fixée par l'utilisateur, n est constante dans le programme

Ainsi donc, il ne m'est pas possible de fixer une fois pour toute la valeur de n dans la boucle for, puisqu'il s'agit d'une instruction fixée par l'utilisateur.

Or, je ne sais pas comment faire pour indiquer au logiciel qu'il faut utiliser la valeur n dans la boucle. Celle-ci marche très bien quand je lui indique par exemple de la faire tourner de 1 à 10, mais pas de 1 à n...

Petite précision : j'ai vérifié que la valeur de n a bien été récupérée par le programme

Est-ce que quelqu'un aurait un conseil à me donner?

Merci d'avance.
A voir également:

8 réponses

Nabla's Messages postés 18203 Date d'inscription mercredi 4 juin 2008 Statut Contributeur Dernière intervention 28 avril 2014 3 193
4 mars 2009 à 12:06
alors, d'abord il va faloir dé"clarer ta variable n:
(si je me souveins bien)
DIM N as integer

si N est utilisée plusieurs fois dans le programme, à des endroits différents, il faut déclarer N dans les fariables globales...

ensuite, tu fais ton for:
for i = 1 to n

juste pour info... j'ai débuté aussi en visual basic, c'est sympa, tu développer rapidement, mais si tu veux vraiment faire des choses puissantes, interesses toi au C, C++, JAVA, ....

je crache pas dans la soupe, j'ai fait de tres bon projets en VB aussi ....
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 mars 2009 à 12:10
Bonjour,

Difficile comme ça de donner une solution. Il faudrait savoir où l'utilsateur saisie le nombre de boucle (n).

Si l'utilisateur indique la précision dans la cellule A1 de la feuille 1, on peut faire :

For i = 1 To CInt(Sheets(1).Range("A1").Value
   '...
Next i


;o)
0
David666 Messages postés 10 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 18 mars 2009
4 mars 2009 à 12:15
Bonjour,

Merci pour ta réponse rapide.
Le programme ne fonctionne toujours pas, il m'affiche "erreur de compilation : constante requise".

Pour information , j'ai utilisé ces commandes pour récupérer la variable depuis excel :
' Précision du calcul
Set Temp = Worksheets("Interface").Range("D32")
n = Temp

(à ce niveau là, si je fais un msgbox n , il m'affiche bien la valeur de n entrée précédemment)

Ensuite j'utilise ce genre de boucles :
For inc = 1 To n
X_Inc = X_Bord_Attaque + (inc / n) * X_Corde
Y_Inc = Y_Bord_Attaque + (inc / n) * Y_Corde
Incrementation_Corde(inc, 1) = X_Inc
Incrementation_Corde(inc, 2) = Y_Inc
Next inc

Si tu vois une erreur, incohérence ou autre...

Merci !! ;-)
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 mars 2009 à 12:42
Comment est déclaré "Temp" ? et sur quelle ligne apparait le message d'erreur ?

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
David666 Messages postés 10 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 18 mars 2009
4 mars 2009 à 13:36
Bonjour Polux,

Désolé je n'avais pas vu ta première réponse. J'essaie tout de suite avec la méthode que tu me proposes.
La saisie de n se fait sur une feuille excel (appelée Interface dans le programme), dans une case prévue à cet effet. J'essaie avec ta méthode et je te tiens au courant.
Pour la déclaration de Temp, elle est déclarée as Range juste avant la ligne que j'ai recopiée dans mon message précédent.


Par contre je vais surement réécrire les lignes de récupération des données depuis excel parce que j'avais vraiment pas choisi le plus simple pour récupérer les variables... ;-)
0
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
4 mars 2009 à 14:13
Bonjour,
Une piste..
De la façon dont tu initialise Temp c'est considéré comme un Range.
Pour valider n
n=Temp.Value
Mais Temp n'est pas nécessaire..
n = Worksheets("Interface").Range("D32")
suffit.
A+
0
Polux31 Messages postés 6917 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 1 novembre 2016 1 204
4 mars 2009 à 17:47
re,

Comme le dit lermite (salut au passage...), Temp n'est pas utile ici. Et certainement pas en Range, alors que l'on a besoin de récupérer une valeur et non un objet.

Il manque une parenthèse fermante à mon exemple : CInt(Sheets(1).Range("A1").Value)


;o)
0
David666 Messages postés 10 Date d'inscription mercredi 4 mars 2009 Statut Membre Dernière intervention 18 mars 2009
5 mars 2009 à 12:01
Bonjour tout le monde !

Merci à tous pour vos conseils.
J'ai finalement pu résoudre le problème un peu à la barbare...
En fait le problème ne venait apparament pas de la boucle "for" mais du tableau dans lequel je stocke les données... Je l'avais déclaré par la commande Dim Montableau(1 to n, 1 to 2) as Double (ou as je-sais-plus-trop-quoi), ce qui apparament posait problème.
J'ai finalement fait :
Dim Montableau as Variant
ReDim Montableau(1 to n, 1 to 2)
Et là ça marche (par contre je sais pas du tout pourquoi !! ;-) )

Pendant que j'y suis j'aurais encore une question...
Du coup mon programme permet de calculer une série de coordonnées que je stocke dans ce tableau (est-ce qu'elles sont justes ou pas ça c'est un autre débat :D)
Je souhaiterais recopier ce tableau sur une feuille excel déterminée pour les exploiter (en fait j'ai un doc excel avec plusieurs feuilles : Interface, Journal, etc...). Je veux donc récupérer les données dans les colonnes A à B d'excel (une colonne du tableau VBA correspondant à une colonne de données sour excel), dans la feuille "Journal".
J'ai bien trouvé la commande pour recopier UNE cellule du tableau dans UNE cellule excel... Bon le problème c'est que j'ai au bas mot 40.000 coordonnées à exporter... Ca fait un peu beaucoup pour le faire "à la main" !!! :)

Pour info j'ai tenté avec une boucle for avec cette commande, mais j'ai toujours un problème d'indice qui se balade... Pour lui dire de recopier telle cellule du tableau dans telle cellule excel, il faut lui donner une direction précise (par exemple cellule A1, cellule B1664, etc...)
Donc la boucle for i = 1 to n recopier la cellule (k,1) du tableau dans la cellule Ai excel... ça passe pas ^^

Voila... J'espère que c'est à peu près clair !! (même si en relisant j'ai des doutes mais je vois pas trop comment expliquer ;) )

Si vous avez des idées... Merci d'avance !!

David
0