Boucle For sur des contrôles de formulaire

Le
jpaul.berard
Bonjour,
En VBA, je voudrais faire une procédure qui passe en revue des contrôle=
s de formulaire (des horaires en fait) pour faire des vérifications de co=
hérence grâce à une boucle For
Ces contrôles ont des noms différents les uns des autres.
Mon problème est donc d'arriver à appeler ces contrôles.
J'essaie avec :

Public Sub rechHpost(Hx) 'rech d'un controle horaire postérieur rempli
Dim H3 As Control, H4 As Control, H5 As Control, H6 As Control, H7 As Contr=
ol, n As Byte

Set H3 = Me.installation
Set H4 = Me.induction
Set H5 = Me.incision
Set H6 = Me.pansement
Set H7 = Me.sortie

For n = 3 To 7
If IsNull("H" & n) = False Then

If DateDiff("n", Hx, "H" & n) > -360 Then
etc

et ça ne marche pas. ("H" & n) est traduit en 'H4' par exemple mais pas r=
econnu comme une variable.
Alors qu'en fenêtre de débogage, si je tape '? H4', j'ai bien la valeur=
de Me.induction qui s'affiche

Si je change et déclare
Dim H4 as string
puis
H4 = "induction"
puis
If IsNull(Me.Controls("H" & n)) = False Then

etc, ça ne marche pas non plus.
Où je me plante ? Merci. (Access 2000)
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
db
Le #26301248
Le 11/08/2014 15:43, a écrit :
Bonjour,
En VBA, je voudrais faire une procédure qui passe en revue des contrôles de formulaire (des horaires en fait) pour faire des vérifications de cohérence grâce à une boucle For...
Ces contrôles ont des noms différents les uns des autres.
Mon problème est donc d'arriver à appeler ces contrôles.
J'essaie avec :

For n = 3 To 7
If IsNull("H" & n) = False Then

If DateDiff("n", Hx, "H" & n) > -360 Then



Essayer (dans le module lié au formulaire) :


For n=3 to 7
If IsNull(Me("H" & n))úlse then
If DateDiff("n", Hx, Me("H" & n)) > -360 Then

...

db
jpaul.berard
Le #26301273
Essayer (dans le module li� au formulaire) :


For n=3 to 7

If IsNull(Me("H" & n))úlse then

If DateDiff("n", Hx, Me("H" & n)) > -360 Then

...

db



Même résultat. Il me répond : impossible de trouver le contr ôle H3....
db
Le #26301312
Le 11/08/2014 18:15, a écrit :


Même résultat. Il me répond : impossible de trouver le contrôle H3....





J'avais lu trop vite, je pensais que H3, H4... étaient des contrôles du
formulaire. Peut-être alors :

Public Sub rechHpost(Hx) 'rech d'un controle horaire postérieur rempli
Dim H(7) As Control, n As Byte

Set H(3) = Me.installation
Set H(4) = Me.induction
Set H(5) = Me.incision
Set H(6) = Me.pansement
Set H(7) = Me.sortie

For n = 3 To 7
If IsNull(H(n)) = False Then

If DateDiff("n", Hx, H(n)) > -360 Then

db
jpaul.berard
Le #26301319
Le lundi 11 août 2014 19:13:35 UTC+2, db a écrit :

J'avais lu trop vite, je pensais que H3, H4... étaient des contrôles du

formulaire. Peut-être alors :



Public Sub rechHpost(Hx) 'rech d'un controle horaire postérieur rempli

Dim H(7) As Control, n As Byte

Set H(3) = Me.installation

Set H(4) = Me.induction

Set H(5) = Me.incision

Set H(6) = Me.pansement

Set H(7) = Me.sortie


For n = 3 To 7

If IsNull(H(n)) = False Then

If DateDiff("n", Hx, H(n)) > -360 Then

db



Merci, beaucoup ! Ca marche !
Mais, j'aimerais beaucoup que tu m'expliques... car je ne comprends pas ce que tu m'as fait coder. Pourquoi je ne déclare qu'un H(7) (j'avais laiss é les autres ce qui m'entrainait une erreur) ? Tu fais appel à une fonc tionnalité que je ne connaît pas.
Et dans la même veine, dans mon code, j'incrémente H(n) d'1 jour, mais ensuite comment renvoyer cette nouvelle valeur au bon contrôle dans le fo rmulaire ?
Merci d'avance.
db
Le #26301332
Le 11/08/2014 19:54, a écrit :

Merci, beaucoup ! Ca marche !
Mais, j'aimerais beaucoup que tu m'expliques... car je ne comprends


pas ce que tu m'as fait coder. Pourquoi je ne déclare qu'un H(7)
(j'avais laissé les autres ce qui m'entrainait une erreur) ? Tu fais
appel à une fonctionnalité que je ne connaît pas.
Et dans la même veine, dans mon code, j'incrémente H(n) d'1 jour,


mais ensuite comment renvoyer cette nouvelle valeur au bon contrôle dans
le formulaire ?
Merci d'avance.




"Dim H(7) as control" déclare un tableau de 7 contrôles, accessibles par
H(1), H(2), etc.

Mais dans votre cas, s'il doit y avoir interaction entre ces contrôles
et leur équivalent dans le formulaire, je ferais sans doute comme ça :

Public Sub rechHpost(Hx) 'rech d'un controle horaire postérieur rempli
Dim H(7) As String, n As Byte

H(3) = "installation"
H(4) = "induction"
H(5) = "incision"
H(6) = "pansement"
H(7) = "sortie"

For n = 3 To 7
If IsNull(me(H(n))) = False Then

If DateDiff("n", Hx, Me(H(n))) > -360 Then
...

...et la mise à jour du formulaire se fera avec Me(H(n))=..., sous
réserve que les contrôles du formulaire soient modifiables.

Non testé, mais en gros, c'est l'idée

db
jpaul.berard
Le #26301339
Le lundi 11 août 2014 20:51:50 UTC+2, db a écrit :

"Dim H(7) as control" d�clare un tableau de 7 contr�les, accessibles par

H(1), H(2), etc.



Mais dans votre cas, s'il doit y avoir interaction entre ces contrï¿ ½les

et leur �quivalent dans le formulaire, je ferais sans doute comme �a :



Public Sub rechHpost(Hx) 'rech d'un controle horaire post�rieur r empli

Dim H(7) As String, n As Byte



H(3) = "installation"

H(4) = "induction"

H(5) = "incision"

H(6) = "pansement"

H(7) = "sortie"



For n = 3 To 7

If IsNull(me(H(n))) = False Then


If DateDiff("n", Hx, Me(H(n))) > -360 Then

...

...et la mise � jour du formulaire se fera avec Me(H(n))=..., s ous

r�serve que les contr�les du formulaire soient modifiable s.


Non test�, mais en gros, c'est l'id�e



db



Merci ! Tout semble résolu.
Je vais lire un peu sur ces déclarations de tableau (je n'ai jamais fa it).
Etonnamment, je n'ai pas eu besoin de faire Me(H(n)) = nouvelle valeur. E n faisant directement
H(n) = H(n) + 1
mon contrôle a été directement mis à jour !
Bonne soirée !
db
Le #26301352
Le 11/08/2014 21:17, a écrit :

Etonnamment, je n'ai pas eu besoin de faire Me(H(n)) = nouvelle valeur. En faisant directement
H(n) = H(n) + 1
mon contrôle a été directement mis à jour !



Oui, c'est normal tant qu'il n'y a pas d'ambigüité. Mais le fait de
préfixer avec Me est une sage précaution :-).

db
jpaul.berard
Le #26301379
Le lundi 11 août 2014 22:02:07 UTC+2, db a écrit :

> Etonnamment, je n'ai pas eu besoin de faire Me(H(n)) = nouvelle valeu r. En faisant directement

> H(n) = H(n) + 1

> mon contrôle a été directement mis à jour !


Oui, c'est normal tant qu'il n'y a pas d'ambigüité. Mais le fait de

préfixer avec Me est une sage précaution :-).



Par contre Me(H(n)) = H(n) + 1 me renvoyait une erreur. Je n'ai pas essay é en utilisant Me(H(n)) = Dateadd ("d", 1, H(n))
Gloops
Le #26301610
a écrit le 11/08/2014 15:43 :
If IsNull(Me.Controls("H" & n)) = False Then



Bonjour,

Si c'est l'existence du contrôle, que tu veux tester, un temps on
trouvait sur le site de Raymond Sénèque ou celui d'Hervé Inisan une
fonction ControlExists. Hier j'ai échoué à retrouver ça, mais il se
pourrait bien que j'aie mal cherché.

De mémoire, il existe deux moyens :
- ou parcourir en boucle tous les contrôles pour comparer leurs noms au
nom à vérifier
- ou utiliser Application.SysCmd

La même chose s'applique aux tables, aux formulaires ...

Attention, pour les formulaires la syntaxe est différente selon qu'on
s'intéresse aux formulaires existants ou aux formulaires ouverts.
jpaul.berard
Le #26303145
Le mardi 12 août 2014 22:25:54 UTC+2, Gloops a écrit :

Bonjour,

Si c'est l'existence du contrôle, que tu veux tester, un temps on

trouvait sur le site de Raymond Sénèque ou celui d'Hervé Inisan une

fonction ControlExists. Hier j'ai échoué à retrouver ça, mais il se

pourrait bien que j'aie mal cherché.



De mémoire, il existe deux moyens :

- ou parcourir en boucle tous les contrôles pour comparer leurs noms au

nom à vérifier

- ou utiliser Application.SysCmd

La même chose s'applique aux tables, aux formulaires ...

Attention, pour les formulaires la syntaxe est différente selon qu'on

s'intéresse aux formulaires existants ou aux formulaires ouverts.



Bonsoir,
Comme je l'ai expliqué dans le post initial, il s'agit simplement de test er la cohérence entre des contrôles horaires (que l'horaire suivant sai si par l'opérateur n'intervienne pas avant le précédent...)
Mais avant de faire la vérification, je regarde que le contrôle ne soit pas vide d'où l'appel à la fonction IsNull().
Publicité
Poster une réponse
Anonyme