Bonsoir G'Claire, le Forum
Alors comme çà tu m'avais réservé une petite surprise avec un beau fichier joint. Hélas je n'ai pas vraiment de temps pour me consacrer à des fichiers entiers comme j'ai pu le faire avant pour pas mal de gens ici.
J'y ai tout de même passé un petit moment. Ce que je peux te conseiller c'est d'abord de privilégier le but initial de ton programme et son intégrité plutôt que de t'aventurer dans des tas de manips pour le visuel du UserForm.
Ce que tu as fait est très beau, çà fait assez pro. Mais à ce stade il faut ruser un peu plus pour arriver à tes fins.
Je ne peux pas passer une partie de ma nuit dessus mais je vais t'aiguiller sur des bases simples.
Dans les propriétés, il y a un "TAG" pour tous les Controls d'un UserForm. Cette astuce du Tag m'a été donnée par notre Ti national. A vue de nez tu as des boutons qui doivent apparaître si on agit en Entrée ou en Sortie. Donc tu les Tags respectivements "IN" et "OUT" par la fenêtre proprité.
Ensuite, par exemple tu peux faire une boucle comme ceci pour le cas IN :
Private Sub cmdModifIn_Click()
Dim CTRL As Control
For Each CTRL In Controls
If CTRL.Tag = "IN" Then
CTRL.Visible = True
ElseIf CTRL.Tag = "OUT" Then
CTRL.Visible = False
End If
Next CTRL
Et une comme celle-là pour le cas OUT :
Private Sub cmdModifOut_Click()
Dim CTRL As Control
For Each CTRL In Controls
If CTRL.Tag = "IN" Then
CTRL.Visible = False
ElseIf CTRL.Tag = "OUT" Then
CTRL.Visible = True
End If
Next CTRL
On pourrait même envisager une simple boucle pour les deux cas de figures et mettre deux Boolean Public à la place d'indiquer False et True, mais je préfère pas trop m'aventurer encore sur ce coup avec toi
.
Au vue de tes lignes de codes il se peut que tu aies également besoin de faire une distinction dans les Controls IN eux-mêmes ainsi que dans les Control OUT eux-mêmes, alors on peut aussi jouer avec le nom du Control lui même an addition du Tag comme ceci :
For Each CTRL In Controls
If CTRL.Tag = "IN" Then
If Right(CTRL.Name, 3) = "VAL" Then CTRL.Visible = True
ElseIf CTRL.Tag = "OUT" Then
If Right(CTRL.Name, 3) = "VAL" Then CTRL.Visible = False
End If
Next CTRL
Ce dernier exemple implique obligatoirement que tu changes ta manière de dénommer tes Controls CommandButtons comme étant : "CmdOutVAL" et "CmdInVAL" en lieu et place de "cmdValiderOut" et "cmdValiderIn", car le code ci dessus cherchera dans le nom de tes Controls les 3 caractères de droite dans le Nom.
(J'espère que tu me suis)
Voilà à peu près ce que je peux faire pour l'instant.
Sinon je ne pense pas qu'il soit impératif de jouer avec les Top et Left. Visible False/True est bien plus conventionnel dans ce cas de figure.
Pour les images, je ne vois pas la nécessité non plus de faire appel à LoadPicture puisque tu as déjà des boutons prédéfinis différents qui contiennent chacun l'image en dur dans Excel depuis la Propriété du Bouton. Donc inutile de charger des image à part et compliquer le tout, surtout si ce fichier doit circuler.
Voilà pour ma consultation et mon diagnostic Mr G'Claire !
Bonne Continuation et surtout bon courage
@+Thierry