Probleme de boucle - VB/VBA/VBS - Programmation
Marsh Posté le 11-08-2008 à 13:01:48
| Alseidis a écrit : Bonjour tout le monde,  | 
 
 
par contre tu avais toujours un msgbox ms ce "n'etait pas la meme"
Marsh Posté le 11-08-2008 à 13:15:09
Merci de ta réponse 86vomito33, mais en reprenant des modifications ma macro ne se lance plus. Il n'y a pas de message d'erreur, je cherche le problème mais j'avoue que je cale.
Marsh Posté le 11-08-2008 à 13:36:46
| Code : 
 | 
Marsh Posté le 11-08-2008 à 14:13:36
effectivement je me suis trompe oupss 
noublie pas de gerer le cas si on appui sur cancel
Marsh Posté le 11-08-2008 à 14:18:43
Option Explicit 
  
Sub Equity() 
' 
' Equity Macro 
' Macro recorded 08/08/2008 by alseidis 
' 
' Keyboard Shortcut: Ctrl+e 
  
Dim Account As String 
Dim BBG As String 
Dim QTY As integer 
Dim Style As String 
Dim EXEC As Single 
Dim Day As Date 
Dim I As String 
Dim testi As Boolean 
Dim line As Integer 
 
testi = True 
line = Worksheets("sheet1" ).Range("A1" ).End(xlDown).Row + 1 
 
MsgBox line 
 
Do While testi <> False 
' saisie du nom du compte client 
Account = InputBox("Entrer le nom du compte", "Saisie de données", "Compte" ) 
if Account =cancel then 
goto fin 
end if 
 
' saisie du ticker du titre 
BBG = InputBox("Entrer le ticker", "Saisie de données", "Ticker" ) 
if BBG =cancel then 
goto fin 
end if 
 
' saisie de la quantité de titres 
QTY = InputBox("Entrer la quantité", "Saisie de données", "Quantité" ) 
if QTY =cancel then 
goto fin 
end if 
 
' saisie de la nature du trade (Long ou Short) 
Style = InputBox("Long ou Short", "Saisie de données", "L ou S" ) 
if Style =cancel then 
goto fin 
end if 
 
' saisie du prix d'execution du mouvement 
EXEC = InputBox("Entrer le prix d'execution", "Saisie de données", "0000,00" ) 
if EXEC =cancel then 
goto fin 
end if 
 
' entrée de la date et de l'heure du jour de l'operation 
Day = InputBox("Entrer le jour d'achat", "Saisie de données", Now) 
if Day =cancel then 
goto fin 
end if 
 
Worksheets("sheet1" ).Cells(line, 1).Value = Account 
Worksheets("sheet1" ).Cells(line, 2).Value = BBG 
Worksheets("sheet1" ).Cells(line, 3).Value = QTY 
Worksheets("sheet1" ).Cells(line, 4).Value = Style 
Worksheets("sheet1" ).Cells(line, 5).Value = EXEC 
Worksheets("sheet1" ).Cells(line, 6).Value = Day 
  
I = MsgBox("Continuer la saisie", vbYesNo) 
If I = vbNo Then 
testi = False 
Else 
testi = True 
End If 
line = line + 1 
Loop 
fin: 
End Sub
Marsh Posté le 11-08-2008 à 15:09:19
Merci de votre aide rapide. 
J'avoue qu'étant débutant en VB, j'en apprends un peu plus. Cependant il me reste un problème concernant ce qui a été posté. 
 
La ligne suivante me retourne avec une Run-time error '6' Overflow. 
line = Worksheets("sheet1" ).Range("A1" ).End(xlDown).Row + 1 
 
Je ne vois pas quel variable pourrait dépasser la taille requise par son format... Si vous aviez une idée, je vous en remercie d'avance >< 
 
Sinon, pour le dernier poste de 86vomito33, le fait de rajouter des Cancel m'oblige a déclarer une variable supplémentaire pour les utiliser. ne devrais-je pas utiliser vbCancel plutot ?
Marsh Posté le 11-08-2008 à 15:33:30
line = Worksheets("sheet1" ).Range("A55555" ).End(xlup).Row + 1  
ca devrait marche 
 
pour le cancel tu peux enlever option explicit
Marsh Posté le 11-08-2008 à 16:41:50
Merci jusqu'ici tout va bien en tout cas, merci grandement pour votre aide.  
Je risque d'avoir besoin d'aide sur d'autres choses dans ma macro mais je vais chercher un peu avant de reposter.
Marsh Posté le 19-08-2008 à 12:51:08
Salut tout le monde, j'ai donc finalement réussi a faire un algo qui tourne grâce a vos conseils mais la alors que je touche au but, j'ai un leger probleme. 
En lançant la macro de saisie pas de problème pour saisir les données, mais a la fin de la saisie rien, ou plutôt plus rien ne s'affiche, dans mon tableau. 
 
J'ai beau chercher ma ligne je ne sais pas ou se trouve mon entrée, ce qui est légèrement agaçant, je vous l'avoue. 
Quelqu'un aurait une idée sur la source du problème?
Marsh Posté le 19-08-2008 à 13:07:54
Sub Equity() 
 
' Equity Macro 
' Macro recorded 08/08/2008 by alseidis 
' 
' Keyboard Shortcut: Ctrl+Alt+213 
  
Dim Account As String 
Dim BBG As String 
Dim QTY As Integer 
Dim Style As String 
Dim EXEC As Single 
Dim Day As Date 
Dim OP As String 
Dim I As String 
Dim testi As Boolean 
Dim line As Integer 
 
testi = True 
OP = True 
line = Worksheets("blotter" ).Range("A55555" ).End(xlUp).Row + 1 
 
I = MsgBox("Faire une saisie ?", vbYesNo) 
If I = vbNo Then 
testi = False 
Else 
testi = True 
End If 
  
Do While testi <> False 
Account = InputBox("Entrer le nom du compte", "Saisie de données", "Compte" ) 
If Account = Cancel Then 
GoTo fin 
End If 
 
BBG = InputBox("Entrer le ticker", "Saisie de données", "Ticker" ) 
If BBG = Cancel Then 
GoTo fin 
End If 
  
QTY = InputBox("Entrer la quantité", "Saisie de données", "Quantité" ) 
If QTY = Cancel Then 
GoTo fin 
End If 
  
Style = InputBox("Long ou Short", "Saisie de données", "L ou S" ) 
If Style = Cancel Then 
GoTo fin 
End If 
 
EXEC = InputBox("Entrer le prix d'execution", "Saisie de données", "0000,00" ) 
If EXEC = Cancel Then 
GoTo fin 
End If 
 
Day = InputBox("Entrer le jour d'achat", "Saisie de données", Now) 
If Day = Cancel Then 
GoTo fin 
End If 
 
OP = InputBox("Entrer la position", "Saisie de données", "OPEN / CLOSED" ) 
If OP = "closed" And Style = "L" Then 
QTY = -QTY 
Else 
If OP = "closed" And Style = "S" Then 
QTY = QTY 
Else 
If OP = "open" And Style = "L" Then 
QTY = QTY 
Else 
If OP = "open" And Style = "S" Then 
QTY = -QTY 
Else 
GoTo fin 
End If 
End If 
End If 
End If 
 
Worksheets("blotter" ).Cells(line, 1).Value = UCase$(Account) 
Worksheets("blotter" ).Cells(line, 3).Value = UCase$(BBG) 
Worksheets("blotter" ).Cells(line, 5).Value = QTY 
Worksheets("blotter" ).Cells(line, 6).Value = UCase$(Style) 
Worksheets("blotter" ).Cells(line, 7).Value = EXEC 
Worksheets("blotter" ).Cells(line, 8).Value = Day 
Worksheets("blotter" ).Cells(line, 9).Value = UCase$(OP) 
 
I = MsgBox("Continuer la saisie ?", vbYesNo) 
If I = vbNo Then 
testi = False 
Else 
testi = True 
End If 
line = line + 1 
Loop 
fin: 
End Sub 
 
Voila pour le code
Marsh Posté le 19-08-2008 à 13:45:11
il sert a quoi ton goto fin 
je me rapelle plus  
 
en tt cas enleve le ca devrait marche
Marsh Posté le 19-08-2008 à 13:52:51
il faut aussi que tes open et OPEN soit au meme "format" fo choisir les minuscules ou les majuscules
Marsh Posté le 19-08-2008 à 17:52:29
A toute fin utile, le GoTo fin servait a mettre fin a la macro si l'utilisateur appuie sur cancel. 
 
Sinon pourriez vous me suggerez une fonction qui me permettrait de recopier les formules de ma feuille Excel sur la ligne ou se fait la nouvelle entrée, pour eviter de devoir "tirer" vers le bas mes formules après chaque entrée 
Marsh Posté le 19-08-2008 à 22:21:58
Sub Equity() 
 
' Keyboard Shortcut: Ctrl+Alt+213 
  
Dim Account As String 
Dim BBG As String 
Dim QTY As Integer 
Dim Style As String 
Dim EXEC As Single 
Dim Day As Date 
Dim OP As String 
Dim I As String 
Dim testi As Boolean 
Dim line As Integer 
 
testi = True 
OP = True 
line = Worksheets("blotter" ).Range("A55555" ).End(xlUp).Row + 1 
 
I = MsgBox("Faire une saisie ?", vbYesNo) 
If I = vbNo Then 
testi = False 
Else 
testi = True 
End If 
  
Do While testi <> False 
Account = InputBox("Entrer le nom du compte", "Saisie de données", "Compte" ) 
If Account = cancel Then GoTo fin 
 
 
BBG = InputBox("Entrer le ticker", "Saisie de données", "Ticker" ) 
If BBG = cancel Then GoTo fin 
  
QTY = InputBox("Entrer la quantité", "Saisie de données", "Quantité" ) 
If QTY = cancel Then GoTo fin 
  
Style = InputBox("Long ou Short", "Saisie de données", "L ou S" ) 
If Style = cancel Then GoTo fin 
 
EXEC = InputBox("Entrer le prix d'execution", "Saisie de données", "0000,00" ) 
If EXEC = cancel Then GoTo fin 
 
Day = InputBox("Entrer le jour d'achat", "Saisie de données", Now) 
If Day = cancel Then GoTo fin 
 
OP = InputBox("Entrer la position", "Saisie de données", "OPEN / CLOSED" ) 
If OP = "CLOSED" And Style = "L" Then QTY = -QTY 
If OP = "CLOSED" And Style = "S" Then QTY = QTY 
If OP = "OPEN" And Style = "L" Then QTY = QTY 
If OP = "OPEN" And Style = "S" Then QTY = -QTY 
If OP = cancel Then GoTo fin 
 
Worksheets("blotter" ).Cells(line, 1).Value = UCase$(Account) 
Worksheets("blotter" ).Cells(line, 3).Value = UCase$(BBG) 
Worksheets("blotter" ).Cells(line, 5).Value = QTY 
Worksheets("blotter" ).Cells(line, 6).Value = UCase$(Style) 
Worksheets("blotter" ).Cells(line, 7).Value = EXEC 
Worksheets("blotter" ).Cells(line, 8).Value = Day 
Worksheets("blotter" ).Cells(line, 9).Value = UCase$(OP) 
 
I = MsgBox("Continuer la saisie ?", vbYesNo) 
If I = vbNo Then 
testi = False 
Else 
testi = True 
End If 
line = line + 1 
 
Loop 
Range("B1" ).AutoFill Destination:=Range(Cells(1, 2), Cells(line, 2)), Type:=xlFillDefault 
Range("D1" ).AutoFill Destination:=Range(Cells(1, 4), Cells(line, 4)), Type:=xlFillDefault 
fin: 
End Sub 
Marsh Posté le 20-08-2008 à 14:06:54
j'ai recopié le code que tu as mis dans ton post mais quand je finis ma saisie, les colonnes B et D se vide totalement, des données et du formatage des cellules  
 
Marsh Posté le 20-08-2008 à 15:03:14
faut peux etre changer les deux dernieres lignes 
tes entetes sont sur quelle ligne ?
Marsh Posté le 20-08-2008 à 15:45:22
ca devrait donc etre 
Loop  
Range("B6" ).AutoFill Destination:=Range(Cells(6, 2), Cells(line, 2)), Type:=xlFillDefault  
Range("D6" ).AutoFill Destination:=Range(Cells(6, 4), Cells(line, 4)), Type:=xlFillDefault  
fin:  
End Sub  
Marsh Posté le 20-08-2008 à 17:18:25
J'ai refait un essai mais avec le même résultat que précédemment. 
En fait, il faudrait que la macro reprenne la formule de la dernière ligne remplie pour la recopier pour la nouvelle ligne saisie. 
 
J'espere que mes precisions pourront t'aider. Le code etant en entier tu peux faire le test de ton coté. Merci de ton aide en tout cas
Marsh Posté le 20-08-2008 à 20:56:28
| Alseidis a écrit : J'ai refait un essai mais avec le même résultat que précédemment.  | 
 
nouvelle essai 
| Code : 
 | 
 
 
si ca marche pas envoie un extrait de ton fichier
Marsh Posté le 21-08-2008 à 09:56:09
Je viens d'essaier et mes formules ne se recopie toujours pas. 
Je te mets donc le lien vers un classeur ou il y a une extrait de mon tableau 
http://www.cijoint.fr/cjlink.php?f [...] eDB7Nf.xls 
Merci d'avance
Marsh Posté le 21-08-2008 à 11:09:23
ah c'est tout de suite plus facile 
 
I = MsgBox("Continuer la saisie ?", vbYesNo)  
If I = vbNo Then  
testi = False  
Else  
testi = True  
line= line + 1  
End If 
Loop  
Cells(line - 1, 4).AutoFill Destination:=Range(Cells(line - 1, 4), Cells(line, 4)), Type:=xlFillDefault 
fais pareil pour les autres colonnes 
fin:  
End Sub
Marsh Posté le 21-08-2008 à 12:33:19
je dois être vraiment mauvais pour pas réussir a faire marché ton code  
  
j'ai essayé de reprendre la ligne de code  
Cells(line - 1, 4).AutoFill Destination:=Range(Cells(line - 1, 4), Cells(line, 4)), Type:=xlFillDefault 
pour remplir au moins une colonne mais sans succès... 
quelle est la partie a modifier pour reproduire le formule sur les autres colonnes ?
Marsh Posté le 21-08-2008 à 14:00:19
| Code : 
 | 
  s'applique a la colonne 4 "BBG" 
il faut que tu copie cette ligne est que tu change les "4" par "2", "10"a"16" et "18","19"
Marsh Posté le 21-08-2008 à 14:03:35
Ok j'essaie ca tout de suite, et je te dis comment je m'en sors =)
Marsh Posté le 21-08-2008 à 15:00:48
Pour reprendre la fin du code, j'ai fais comme tu m'as dis 
 
I = MsgBox("Continuer la saisie ?", vbYesNo) 
If I = vbNo Then 
testi = False 
Else 
testi = True 
End If 
line = line + 1 
Loop 
Cells(line - 1, 2).AutoFill Destination:=Range(Cells(line - 1, 2), Cells(line, 2)), Type:=xlFillDefault 
Cells(line - 1, 4).AutoFill Destination:=Range(Cells(line - 1, 4), Cells(line, 4)), Type:=xlFillDefault 
Cells(line - 1, 10).AutoFill Destination:=Range(Cells(line - 1, 10), Cells(line, 10)), Type:=xlFillDefault 
Cells(line - 1, 11).AutoFill Destination:=Range(Cells(line - 1, 11), Cells(line, 11)), Type:=xlFillDefault 
Cells(line - 1, 12).AutoFill Destination:=Range(Cells(line - 1, 12), Cells(line, 12)), Type:=xlFillDefault 
Cells(line - 1, 13).AutoFill Destination:=Range(Cells(line - 1, 13), Cells(line, 13)), Type:=xlFillDefault 
Cells(line - 1, 14).AutoFill Destination:=Range(Cells(line - 1, 14), Cells(line, 14)), Type:=xlFillDefault 
Cells(line - 1, 15).AutoFill Destination:=Range(Cells(line - 1, 15), Cells(line, 15)), Type:=xlFillDefault 
Cells(line - 1, 16).AutoFill Destination:=Range(Cells(line - 1, 16), Cells(line, 16)), Type:=xlFillDefault 
Cells(line - 1, 18).AutoFill Destination:=Range(Cells(line - 1, 18), Cells(line, 18)), Type:=xlFillDefault 
Cells(line - 1, 19).AutoFill Destination:=Range(Cells(line - 1, 19), Cells(line, 19)), Type:=xlFillDefault 
fin: 
End Sub 
 
Mais malheureusement ca ne marche toujours pas... Je commence a desesperer un peu
Marsh Posté le 22-08-2008 à 09:35:10
Bon ben ca marche toujours pas... 
Non je rigole, cette fois ca marche nickel =) 
MERCI GRANDEMENT a toi 86vomito33 pour le temps que tu as passé a m'aider a me sortir de ma boucle d'algo >< 
 
Merci merci
Marsh Posté le 11-08-2008 à 12:27:13
Bonjour tout le monde,
J'ai un problème (comme beaucoup de monde), je souhaite construire un fichier permettant de suivre des performances de titres boursiers.
Dans ce but, je décide donc de passer par un programme sur Visual Basic. Actuellement mon souci principal, qui risque de ne pas être le dernier mais chaque chose en son temps, est de faire tourner ma boucle tant que la réponse est Oui.
Hors actuellement, si je choisi la réponse Oui ma boucle reste coincé sur ma MsgBox, jusqu'à ce que je choisisse la réponse Non pour quitter.
Le but final étant de faire un fichier de saisie de tableau qui remplirait une ligne après l'autre, ou plutôt qui écrirait sur la dernière ligne vide du tableau.
Voici donc mon code, en espérant que quelqu'un puisse m'aider
Option Explicit
Sub Equity()
'
' Equity Macro
' Macro recorded 08/08/2008 by alseidis
'
' Keyboard Shortcut: Ctrl+e
Dim Account As String
Dim BBG As String
Dim QTY As Integer
Dim Style As String
Dim EXEC As Single
Dim Day As Date
Dim I As String
' saisie du nom du compte client
Account = InputBox("Entrer le nom du compte", "Saisie de données", "Compte" )
With Worksheets("sheet1" ).Range("a2" )
.Value = Account
End With
' saisie du ticker du titre
BBG = InputBox("Entrer le ticker", "Saisie de données", "Ticker" )
With Worksheets("sheet1" ).Range("b2" )
.Value = BBG
End With
' saisie de la quantité de titres
QTY = InputBox("Entrer la quantité", "Saisie de données", "Quantité" )
With Worksheets("sheet1" ).Range("c2" )
.Value = QTY
End With
' saisie de la nature du trade (Long ou Short)
Style = InputBox("Long ou Short", "Saisie de données", "L ou S" )
With Worksheets("sheet1" ).Range("d2" )
.Value = Style
End With
' saisie du prix d'execution du mouvement
EXEC = InputBox("Entrer le prix d'execution", "Saisie de données", "0000,00" )
With Worksheets("sheet1" ).Range("e2" )
.Value = EXEC
End With
' entrée de la date et de l'heure du jour de l'operation
Day = InputBox("Entrer le jour d'achat", "Saisie de données", Now)
With Worksheets("sheet1" ).Range("f2" )
.Value = Day
End With
Do
I = MsgBox("Continuer la saisie", vbYesNo)
If I = vbNo Then
Exit Sub
Else
End If
Loop
End Sub
Merci d'avance
Message édité par Alseidis le 11-08-2008 à 12:35:05