OVH Cloud OVH Cloud

1 réponse svp

4 réponses
Avatar
nounours
Bonjour,

Quelcun peut-il r=E9pondre =E0 mon prob post=E9 le 19.12. sous=20
le titre "VBA"? Ce serait sympa.

Merci d'avance

4 réponses

Avatar
François Picalausa
Bonjour/soir,

Pourrais-tu essayer de reformuler le problème plus clairement ou de manière
différente?
Peut-être que plus de personnes comprendraient...
Personellement,
frmAffichage.(lblActDec(intAnAct).Caption) frmAffichage.(lblActDec(intAnAct).Caption) + Str
(dblMontant)
me déplait autant (si pas plus) qu'au compilateur...
Pourquoi des parenthèses autour d'une propriété (lblActDec) d'un
contrôle(frmAffichage)?
Mis à part ça, le + Str me déplait dans la mesure ou Str() est une chaine et
donc, la concaténation devrait se faire par &.

--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com


"nounours" a écrit dans le
message de news:034801c3cd67$bebeb280$
Bonjour,

Quelcun peut-il répondre à mon prob posté le 19.12. sous
le titre "VBA"? Ce serait sympa.

Merci d'avance


Avatar
nounours
Bonsoir François et merci pour votre réponse.

Comme vous l'avez certainement lu, je suis au départ de
ma formation autodidacte et logiquement, je fais des
erreurs.

Pour en revenir à vos diverses questions :

1) Pourqoui des parenthèses autour d'une propriété
(lblActDec) d'un contrôle(frmAffichage)?
Bêtement parce qu'il s'agit d'une autre feuille. Mais il
est vrai que cela n'est pas nécessaire. C'était par pure
sécurité. Un commentaire pour m'y retrouver plus tard
aurait servi aussi.

2) Pourquoi un Str(dblMontant)
Parce que le champs est un champs alphanum dans la banque
de données séquentielle. J'ai trouvé cela dans mes
bouquins, en particulier Visual Basic 6.0 de Diane Zak
(éditions Reynald Goulet inc.)dont je me suis largement
inspiré.

3) Reformulation du problème
A partir d'une BDE séquentiele contenant entre autre une
infornmation d'année, de mois et de montant, je désire
afficher sur une feuille VBA le cumul des montants par
mois au cours d'une année donnée.

Ma solution qui fonctionne très bien, mais ne me
satisfait pas pour extraire ces données est la suivante :
j'ai attribué une variable séparée à chaque mois (par ex.
Dim strJanvier..., strFevrier... etc...

Je recherche une solution plus simple (heureusement que
notre calendrier ne comporte que 12 mois !!!) par ex.:
dblMontant=le montant correspondant au mois sélectionné,
sans devoir définir une variable séparée par mois.

Désolé de vous importuner, mais en dBase III+, Turbo
Pascal ou Cobol je ne vous aurais pas posé cette stupide
question à laquelle je ne trouve aucune réponse dans ma
documentation.

Merci de bien vouloir m'éclairer.
Avatar
François Picalausa
Bonjour/soir,
<réponse inline>

"nounours" a écrit dans le
message de news:00df01c3cd7b$e187c9f0$
Comme vous l'avez certainement lu, je suis au départ de
ma formation autodidacte



On en connait d'autres...

et logiquement, je fais des
erreurs.



On en connait d'autres aussi :-)


Pour en revenir à vos diverses questions :

1) Pourqoui des parenthèses autour d'une propriété

2) Pourquoi un Str(dblMontant)



Je tentais juste de dire pourquoi le compilateur "n'aimait" pas la
syntaxe...

3) Reformulation du problème
Je recherche une solution plus simple (heureusement que
notre calendrier ne comporte que 12 mois !!!) par ex.:
dblMontant=le montant correspondant au mois sélectionné,
sans devoir définir une variable séparée par mois.




selon ce que j'ai compris du problème, une collection pourrait sans doutes
faire l'affaire.
Une collection gère des objets, ici ce seront des modules de classe.
Voici un exemple de classe correspondant à un montant.
Elle possède trois propriétés:
dblMontant : le montant
intAnnée : l'année correspondant au montant
Mois : une chaine contenant le mois correspondant au montant.
Le mois est validé pour être sûr qu'il contenienne une chaine correcte.

Option Explicit

Public dblMontant As Double
Public intAnnée As Integer

Private m_strMois As String

Public Property Get Mois() As String
Mois = m_strMois
End Property

Public Property Let Mois(ByVal NouveauMois As String)
NouveauMois = StrConv(NouveauMois, vbProperCase)
If NouveauMois = "Janvier" Or _
NouveauMois = "Février" Or _
NouveauMois = "Mars" Or _
NouveauMois = "Avril" Or _
NouveauMois = "Mai" Or _
NouveauMois = "Juin" Or _
NouveauMois = "Juillet" Or _
NouveauMois = "Août" Or _
NouveauMois = "Septembre" Or _
NouveauMois = "Octobre" Or _
NouveauMois = "Novembre" Or _
NouveauMois = "Décembre" Then 'On s'assure que le mois définit est
valide
m_strMois = NouveauMois
End If
End Property

Private Sub Class_Initialize()
m_strMois = "Janvier" 'on initialise le mois, l'année et le montant
dblMontant = 0
intAnnée = 0
End Sub

----------------------------------------------------------------------------
----

Dans le code "principal", voici un exemple d'utilisation de l'objet:


Option Explicit

'On définit une collection
Private colMontants As Collection

Private Sub Form_Initialize()
'Initialise la colelction
Set colMontants = New Collection
End Sub

Private Sub Form_Terminate()
'Détruit la collection
Set colMontants = Nothing
End Sub

'Ajoute un montant à la collection
Sub AjouteMontant(dblMontant As Double, Mois As String, Année As Long)
Dim objMontant As Montant
Set objMontant = New Montant

objMontant.dblMontant = Montant
objMontant.Mois = Mois
objMontant.intAnnée = Année

If objMontant.Mois = Mois Then 'si la valeur était valide
colMontants.Add objMontant, Mois & CStr(Année)
End If
End Sub

'Retrouve un objet monant en fonction du mois et de l'année
Function RetrouveMontant(Mois As String, Année As Long) As Montant
On Error Resume Next 'Evite l'erreur au cas où on ne retrouve pas
l'objet
Set RetrouveMontant = colMontants.Item(Mois & CStr(Année))
End Function

'Retrouve directement la valeur du montant en focntion du mois et de l'année
Function dblRetrouveMontant(Mois As String, Année As Long) As Double
On Error Resume Next 'Evite l'erreur au cas où on ne retrouve pas
l'objet
dblRetrouveMontant = colMontants.Item(Mois & CStr(Année)).dblMontant
End Function

Désolé de vous importuner, mais en dBase III+, Turbo
Pascal ou Cobol je ne vous aurais pas posé cette stupide
question à laquelle je ne trouve aucune réponse dans ma
documentation.



Si ça avait été le cas en dBase III+, Turbo Pascal ou Cobol, j'aurais posé
la question ;-)
Aucune question n'est stupide.. il faut bien débuter un jour...
Et pour ceux que ça importune, qu'ils passent le post ;-)


--
François Picalausa (MVP VB)
FAQ VB : http://faq.vb.free.fr
MSDN : http://msdn.microsoft.com
Avatar
nounours
Merci pour le tuyau François. Cette nouveauté (pour
moi !) va me tenir en haleine pendant quelques soirées
avant que je ne comprenne l'ensemble.

Qui disait que le programmation était ennuyeuse ? Pas moi
en tout cas.

Pascal