Rechercher : dans
Par :

Boucle "for" sous visual basic

Dernière réponse le 5 mar 2009 à 12:01:50 David666, le 4 mar 2009 à 12:02:36 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « Boucle "for" sous visual basic » dans :
Introduction à Visual Basic Voir Présentation de Visual Basic Visual Basic est un outil développé par Microsoft pour développer facilement des applications fonctionnant sous Microsoft Windows ©. Visual Basic est, comme son nom l'indique, un outil visuel permettant de créer...
Erreur système : Microsoft Visual Basic VoirEn ouvrant Excel, vous rencontrez un message d'erreur. Une fenêtre au nom de "Microsoft Visual Basic" s'ouvre avec le contenu suivant : Erreur système &H80004005 (-2147467259). Erreur non spécifiée Pour corriger le problème, suivez les...
Télécharger Visual Basic 6 Runtime (VB6 DLL) VoirLe Runtime Visual Basic 6 contient l'ensemble des librairies (DLL) nécessaires pour exécuter des programmes écrits en langage Visual Basic 6.0. Il contient notamment les DLL suivantes :...
Introduction à VBScript VoirPrésentation de VB Script VBScript (aussi appelé Visual Basic Scripting Edition) est un sous-ensemble du langage Visual Basic for Applications (VBA), un langage propriétaire de Microsoft prévu pour être intégré aux produits Microsoft Office©,...
Généralités sur Visual Basic VoirConcept de Visual Basic l'Environnement de Développement intégré

1

Nabla's, le 4 mar 2009 à 12:06:54

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 ....

Répondre à Nabla's

2

Polux31, le 4 mar 2009 à 12:10:26

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) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

3

David666, le 4 mar 2009 à 12:15:56

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 !! ;-)

Répondre à David666

4

Polux31, le 4 mar 2009 à 12:42:28

Comment est déclaré "Temp" ? et sur quelle ligne apparait le message d'erreur ?

«Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

5

David666, le 4 mar 2009 à 13:36:59

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... ;-)

Répondre à David666

6

lermite222, le 4 mar 2009 à 14:13:35

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+ L'expérience instruit plus sûrement que le conseil. (André Gide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

7

Polux31, le 4 mar 2009 à 17:47:03

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) «Ce que l'on conçoit bien s'énonce clairement, Et les mots pour le dire arrivent aisément.» 
Nicolas Boileau

Répondre à Polux31

8

 David666, le 5 mar 2009 à 12:01:50

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

Répondre à David666
Collection CommentÇaMarche.net