[VBA-E] afficher des données dans des cellules

afficher des données dans des cellules [VBA-E] - VB/VBA/VBS - Programmation

Marsh Posté le 27-04-2006 à 16:24:55    

Yo,
j'ai un problème
voilà, j'aimerai afficher les données inscrites pas l'utilisateur dans un tableau excel
c'est dur à expliquer mais voilà l'énoncé et ce ke j'ai commencé à faire...
http://badbond.free.fr/algo.rar
comment faire ??
 
merci d'avance


Message édité par Bad Bond le 27-04-2006 à 19:03:11

---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 27-04-2006 à 16:24:55   

Reply

Marsh Posté le 27-04-2006 à 18:10:17    

Bonjour Bad Bond
Bonjour à tous
 
Je suppose que le tableau est sur la feuille en "A4 à C4"
 
Je te propose après la ligne de code (à la fin)
"client = InputBox("entrer le nom du client" )"   :
 
Range("A4" ).select
Activecell.offset(0,0).value = client   '=> met le nom du client dans A4
Activecell.offset(0,1).value = prime   '=> met le montant prime dans B4
Activecell.offset(0,2).value = prixTTC'=> met le montant TTC dans C4
 
Bien sur ce tableau se trouve sur le feuille du bouton, sinon il faut la sélectionner
 
Cordialement

Reply

Marsh Posté le 27-04-2006 à 18:50:20    

ok merci
j'ai modifié un peu le code à mon gout, je sais pas si j'ai bien fait
mais mainetant j'aimerai bien pouvoir afficher à la suite plusieurs clients et leur montant de prime etc etc...
c'est à dire, qu'on est dans le cas où l'utilisateur d'excel saisie plusieurs clients à la suite


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 27-04-2006 à 21:06:41    

Re
 
On reprend le code après range("A4" ).select, tu écris :
 
Selection.Range("a65536" ).End(xlUp).Select
ActiveCell.Offset(1, 0).Select
 
Je suppose qu'il y a plus court, mais cela fonctionne
 
Cordialement

Reply

Marsh Posté le 27-04-2006 à 22:31:38    

merci bien
mais j'ai du mal comprendre
car ça me fait une erreure après...


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 27-04-2006 à 22:44:47    

koike en fait je pense avoir trouvé une parade à mon problème
voilà tout mon code :

Citation :

Sub CommandButton1_Click()
Dim client As String
Dim nbacc As Integer
Dim CA As Boolean
Dim age As Integer
Dim optiontr As Boolean
Dim i As Integer
 
Dim montant As Single
Dim maj1 As Integer
Dim maj2 As Integer
Dim prime As Integer
Dim B As Integer
Dim prixTTC As Integer
 
i = 0
client = InputBox("entrer le nom du client" )
Do While client <> "FIN"
montant = InputBox("montant prime correspondant a la zone géo + puissance fiscale" )
optiontr = MsgBox("option tout risque", vbYesNo)
age = InputBox("age du client" )
CA = MsgBox("conduite accompagnée", vbYesNo)
nbacc = InputBox("nombre d'accident l'année précédente" )
If optiontr = vbYes Then
maj1 = montant * 0.5
Else
maj1 = 0
End If
If age < 25 And CA = vbNo Then
maj2 = montant * 0.1
Else
maj2 = 0
End If
prime = montant + maj1 + maj2
If nbacc = 0 Then
bonus = -0.2
Else
If nbacc = 1 Then
bonus = -0.1
Else
If nbacc = 2 Then
bonus = -0.3
Else
bonus = -0.5
End If
End If
End If
prime = prime + (0.9 * prime) * B
prixTTC = prime + prime * 0.2
MsgBox ("prix TTC" & prixTTC)
 
Range("A1" ).Select
ActiveCell.Offset(0, 0).Value = "Nom du client"
ActiveCell.Offset(0, 1).Value = "Montant de la prime"
ActiveCell.Offset(0, 2).Value = "Prix TTC"
 
Range("A2" ).Select
ActiveCell.Offset(0 + i, 0).Value = client
ActiveCell.Offset(0 + i, 1).Value = prime
ActiveCell.Offset(0 + i, 2).Value = prixTTC
 
client = InputBox("entrer le nom du client" )
 
i = i + 1
 
Loop
End Sub


merci pour l'aide
mais je voudrai faire autre chose, redimensionner des collones en fonction du texte et mettre une couleur d'arrière plan dans certaines cellules, comment faire ??
merci d'avance !!


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 28-04-2006 à 09:18:00    

Salut Bad Bond,
 
En lisant ton code, et en voyant le nombre de données à collecter et leur type particulier, je mettrais en place un userform à ta place. J'ai une tendance à me méfier des inputbox qui ne renvoi que des strings. Le userform te permettrais de vérifier le type de données saisies par l'utilisateur.
Pour ton histoire de redimensionement de cellule et de mise en place de couleur, je te conseille d'utiliser l'enregistreur de macro. Tu obtiendra ainsi la base sur les fonctions que tu cherches et les codes des couleurs dont tu as besoin.
Si tu n'arrives pas à arranger le code transmis par l'enregistreur de macros, ce code nous permettra de savoir sur queles cellules agir ce qui sera bien plus simple.
pour info :

Code :
  1. 'Ajuste la colonne A en fonction de la longeur des données contenues
  2.     Columns("A:A" ).EntireColumn.AutoFit
  3.    
  4.     'Colore en jaune l'interieur de ta cellule A1
  5.     Range("A1" ).ColorIndex = 6
  6.    
  7.     'Change en rouge le texte de ta cellule
  8.     Range("A1" ).Font.ColorIndex = 3


@+


---------------
Je bidouillle c'est sur... Mais j'essaye de faire en sorte que ça marche ;-)
Reply

Marsh Posté le 28-04-2006 à 11:41:13    

ok d'accord je vais essayer l'enregistreur de macro
mais j'ai pas compris le userform, je m'y connais rien en VB
si tu pourrais développer stp !!


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 28-04-2006 à 14:03:31    

ouh la j'ai aussi des soucis au niveau des calculs
ils m'affichent pas le bon résultat
:/


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 28-04-2006 à 17:06:23    

Re Bad Bond :)
 
Pour les Userform, il faut que tu regardes dans VBA. tu click droit sur ton projet / inserer userform.
Ensuite dans la boîte à outils tu regardes, il y a différents contrôles.
Ceux qui vont t'interesser son les textbox pour faire saisir des données à l'utilisateur. Les checkbox pour les cases oui/non comme pour ton hoistoire de conduite accompagnée et les commandbutton pour valider tes actions.
 
En testant un peu ce que tu vas trouver, en regardant dans l'aide VBA et grâce à l'ami google tu vas pouvoir te faire une idée.
 
Pour tes calculs dur de t'aider avec si peu d'éléments.
@+

Reply

Marsh Posté le 28-04-2006 à 17:06:23   

Reply

Marsh Posté le 28-04-2006 à 18:37:03    

ok watashi
mais en fait l'userform ça fait en sorte ke l'utilisateur sélectionne dans des listes ou je me trompe ?
sinon persone n'a une idée sur l'erreure avec les calculs ??


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 28-04-2006 à 18:45:20    

Pas seulement,
 
Un userform et une boite de dialogue vide.
Tu "dessines" dedans les object dont tu as besoin textbox, listbox, checkbox, combobox, commandbuttons ....
Ensuite avec le code tu determine ce qu'il doit ce passer. Cequi est autorisé ou non, etc...
Pour tes calculs, il faut nous donner un peu plus de détail :
Le calcul (ton code) et le résultat obtenu. Avec ça on pourra te guider.
:)  
@+

Reply

Marsh Posté le 29-04-2006 à 09:37:59    

Bonjour a tous,  
 
je debute sur vba et aurais besoin d'aide pour programmer une macro.  
 
je vous explique:  
j'ai feuil1 (qui est ma source de donnees) avec en colonne A les noms de 9 sites, en colonne B des numeros de serie et en colonne D des quantites.
Debut de liste ligne 2.
Il y a des doublons car le meme numero de serie peut apparaitre dans chaque site.  
 
Je souhaite renvoye les quantites sur une nouvelle feuille deja existante (feuil2) mais en separant les noms de sites par colonne.
Debut de liste ligne 5.
Cela m'evite les doublons.  
le numero de serie est en colonne A, les quantites s'inscrivent dans 9 colonnes (F a N) correspondant aux 9 sites que je separe.  
 
La macro doit donc garder les quantites en fonction du site mais aussi du numero de serie.  
 
En plus si un nouveau numero de serie apparait dans feuil1, la macro doit pouvoir l'inserer automatiquement dans feuil2.  
Et si un numero de serie disparait dans feuil1, la valeur 0 doit apparaitre dans feuil2.  
 
Si vous pouviez m'aider, merci.  

Reply

Marsh Posté le 29-04-2006 à 10:47:06    

Bonjour à tous
 
Je pense que le code ajouté :
Range("A2" ).Select
ActiveCell.Offset(0 + i, 0).Value = client
ActiveCell.Offset(0 + i, 1).Value = prime
ActiveCell.Offset(0 + i, 2).Value = prixTTC  
te fait sauter une ligne, à vérifier.
Par contre, la prochaine fois que le fichier s'ouvrira et qu'un utilisateur va saisir un nouveau client, cela viendra écraser ce qui a été enregistré auparavant.
Tu écris :
Range("A1" ).select
Selection.Range("a65536" ).End(xlUp).Select
ActiveCell.Offset(1, 0).Select  
Activecell.offset(0,0).value = client  
Activecell.offset(0,1).value = prime    
Activecell.offset(0,2).value = prixTTC
Pour que cela fonctionne à la toute première saisie, tu écris en ligne 1 des en-têtes : dans A1 tu écris "Client, B1 Prime, C1....
ensuite les saisies suivantes viendront se positionner sur A2, A3, ......
 
La ligne que donne Watashi : Columns("A:A" ).EntireColumn.AutoFit peut être simplifiée par : Columns("A:A" ).AutoFit, et celle ci est mise à la fin des saisies cad après "Loop".
 
Pour l'erreur de calcul, je pense que la ligne :
prime = prime + (0.9 * prime) * B  
B est déclaré, mais ne serait ce pas plutôt "bonus" ? et qu'il faut déclarer à sa place
 
Cordialement

Reply

Marsh Posté le 29-04-2006 à 12:31:36    

ok merci eric
mais en fait en faisant pas à pas, l'erreure de calcul commence dès le calcul de la majoration
voilà mon code pour l'instant
je ne comprends pas mon erreur :

Citation :

Sub CommandButton1_Click()
Dim client As String
Dim nbacc As Integer
Dim CA As Boolean
Dim age As Integer
Dim optiontr As Boolean
Dim i As Integer
Dim montant As Single
Dim maj1 As Integer
Dim maj2 As Integer
Dim prime As Integer
Dim bonus As Integer
Dim prixTTC As Integer
 
i = 0
client = InputBox("entrer le nom du client" )
Do While client <> "FIN"
montant = InputBox("montant prime correspondant à la zone géographique et la puissance fiscale" )
optiontr = MsgBox("option tous risques", vbYesNo)
age = InputBox("age du client" )
CA = MsgBox("conduite accompagnée", vbYesNo)
nbacc = InputBox("nombre d'accident l'année précédente" )
 
If optiontr = vbYes Then
maj1 = montant * 0.5
Else
maj1 = 0
End If
If age < 25 And CA = vbNo Then
maj2 = montant * 0.1
Else
maj2 = 0
End If
 
prime = montant + maj1 + maj2
 
If nbacc = 0 Then
bonus = -0.2
Else
If nbacc = 1 Then
bonus = 0.1
Else
If nbacc = 2 Then
bonus = 0.3
Else
bonus = 0.5
End If
End If
End If
 
prime = prime + ((0.9 * prime) * bonus)
 
prixTTC = prime + (prime * 0.2)
MsgBox ("la prime annuelle TTC (en euro) est de " & prixTTC)
 
Range("A1" ).Select
ActiveCell.Offset(0, 0).Value = "Nom du client"
ActiveCell.Offset(0, 1).Value = "Montant de la prime"
ActiveCell.Offset(0, 2).Value = "Option tous risques"
ActiveCell.Offset(0, 3).Value = "Age du client"
ActiveCell.Offset(0, 4).Value = "Conduite accompagnée"
ActiveCell.Offset(0, 5).Value = "Nbr d'accident l'année précédente"
ActiveCell.Offset(0, 6).Value = "Prix TTC"
 
Range("A2" ).Select
ActiveCell.Offset(0 + i, 0).Value = client
ActiveCell.Offset(0 + i, 1).Value = prime
If optiontr = vbYes Then
ActiveCell.Offset(0 + i, 2).Value = "Oui" ' si vrai
Else
ActiveCell.Offset(0 + i, 2).Value = "Non" ' si faux
End If
ActiveCell.Offset(0 + i, 3).Value = age
If CA = vbYes Then
ActiveCell.Offset(0 + i, 4).Value = "Oui" ' si vrai
Else
ActiveCell.Offset(0 + i, 4).Value = "Non" ' si faux
End If
ActiveCell.Offset(0 + i, 5).Value = nbacc
ActiveCell.Offset(0 + i, 6).Value = prixTTC
 
client = InputBox("entrer le nom du client (entrer FIN pour terminer le processus)" )
 
i = i + 1
 
Loop
End Sub


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 29-04-2006 à 15:07:35    

Bonjour Bad Bond
Bonjour à tous
 
Essaie le code que j'ai aménagé :
 
Sub CommandButton1_Click()
Dim client As String
Dim nbacc As Integer
Dim CA As Integer
Dim age As Integer
Dim optiontr As Integer
Dim i As Integer
Dim montant As Single
Dim maj1 As Integer
Dim maj2 As Integer
Dim prime As Integer
Dim bonus As Single
Dim prixTTC As Integer
 
 Range("A1" ).Select
Application.ScreenUpdating = False
If ActiveCell.Value = "" Then
Cells(1, 1).Value = "Nom du client"
Cells(1, 2).Value = "Montant de la prime"
Cells(1, 3).Value = "Option tous risques"
Cells(1, 4).Value = "Age du client"
Cells(1, 5).Value = "Conduite accompagnée"
Cells(1, 6).Value = "Nbr d'accident l'année précédente"
Cells(1, 7).Value = "Prix TTC"
End If
 
Selection.End(xlDown).Activate
ActiveCell.Offset(1, 0).Select
i = 0
client = InputBox("entrer le nom du client" )
 If client = "" Then
 Exit Sub
 End If
Do While client <> ""
montant = InputBox("montant prime correspondant à la zone géographique et la puissance fiscale" )
optiontr = MsgBox("option tous risques", vbYesNo)
optiontr02 = MsgBox("option tous risques", vbYesNo)
age = InputBox("age du client" )
 
CA = MsgBox("conduite accompagnée", vbYesNo)
CA02 = MsgBox("conduite accompagnée", vbYesNo)
nbacc = InputBox("nombre d'accident l'année précédente" )
 
If optiontr = vbYes Then
maj1 = montant * 0.5
Else
maj1 = 0
End If
If age < 25 And CA = vbNo Then
maj2 = montant * 0.1
Else
maj2 = 0
End If
 
prime = montant + maj1 + maj2
 
If nbacc = 0 Then
bonus = -0.2
Else
If nbacc = 1 Then
bonus = 0.1
Else
If nbacc = 2 Then
bonus = 0.3
Else
bonus = 0.5
End If
End If
End If
 
prime = prime + ((0.9 * prime) * bonus)
 
prixTTC = prime + (prime * 0.2)
MsgBox ("la prime annuelle TTC (en euro) est de " & prixTTC)
 
ActiveCell.Offset(0 + i, 0).Value = client
ActiveCell.Offset(0 + i, 1).Value = prime
If optiontr = 6 Then
ActiveCell.Offset(0 + i, 2).Value = "Oui" ' si vrai
Else
ActiveCell.Offset(0 + i, 2).Value = "Non" ' si faux
End If
ActiveCell.Offset(0 + i, 3).Value = age
If CA = 6 Then
ActiveCell.Offset(0 + i, 4).Value = "Oui" ' si vrai
Else
ActiveCell.Offset(0 + i, 4).Value = "Non" ' si faux
End If
ActiveCell.Offset(0 + i, 5).Value = nbacc
ActiveCell.Offset(0 + i, 6).Value = prixTTC
 
client = InputBox("entrer le nom du client " )
 If client = "" Then
 Exit Sub
 End If
i = i + 1
 
Loop
End Sub
 
Si pb n'hésite pas
Cordialement

Reply

Marsh Posté le 30-04-2006 à 09:11:21    

Salut,
 
J'ai toujours besoin d'aide je ne m'en sors pas.
Pouvez vous me filer un coup de pouce.
ca serait vraiment super.
 
Merci

Reply

Marsh Posté le 30-04-2006 à 11:14:41    

merci eric
mais il me fait une erreure dans les première lignes :
ActiveCell.Offset(1, 0).Select


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le 01-05-2006 à 08:10:00    

Bonjour Bad Bond
Bonjour à tous
 
Oups!  A la place de :
Selection.End(xlDown).Activate  
écris :
Selection.Range("A65536" ).End(xlup).activate
 
Cordialement

Reply

Marsh Posté le 01-05-2006 à 08:12:56    

Bonjour ptitity
 
Pour de l'aide, crées un nouveau sujet, comme cela tout le monde verra et pourra te répondre
Cordialement

Reply

Marsh Posté le 01-05-2006 à 09:09:09    

merci pour l'info :bounce:

Reply

Marsh Posté le 01-05-2006 à 12:00:10    

eric455 a écrit :

Bonjour Bad Bond
Bonjour à tous
 
Oups!  A la place de :
Selection.End(xlDown).Activate  
écris :
Selection.Range("A65536" ).End(xlup).activate
 
Cordialement


merci
maintenant le calcul a l'air de marcher
étrange
ke là il calcul correctement et pas avant !!


---------------
recordman du jeu du screenshot : Okiron en 12Secondes
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed