Probleme de set focus

drdege

XLDnaute Nouveau
Bonjour,
Je développe un petit programme, dont voici une partie du code
'GESTION MEDECIN REPRENEUR
Private Sub MAJListeDeroulanteMEDREPRENEUR()
'SUB05
'CHOIX DU MEDECIN REPRENEUR par défaut LE PREMIER DE LA LISTE
Dim LigneSel As Long 'Ligne de sélection du médecin dans le listing des médecins FAGC
Dim RPNom As String 'Nom du Médecin repreneur
Dim RPPrenom As String 'Prenom du Médecin repreneur
Dim RPLocalite As String 'Localité du Médecin repreneur
Dim RPSecteur As String 'Secteur du Médecin repreneur
Dim RPMail As String 'Mail du Médecin repreneur
Dim vCompteur As Long
Dim vAjoutMedecin As String
'ADAPTATION DES VISIBILITES DES FRAMES
10 Frame3RefREPRENEUR.Visible = True
20 Label1.Caption = Sheets("F_para").Range("F8").Value 'SUIVI De l'encodage en cours
'DONNE LE FOCUS A LA LISTE DE CHOIX MEDECIN REPRENEUR

30 CBREPRENEUR.SetFocus 'c'est ici que cela ?????????????????? NE FONCTIONNE PAS

'COMPLETE LA LISTE DE CHOIX AVEC LES DONNEES DE LA TABLE F_MEDFAGC
40 If CBREPRENEUR.LineCount <= 1 Then
50 For vCompteur = 2 To Sheets("f_medFAGC").Range("C2").End(xlDown).Row
60 vAjoutMedecin = Sheets("f_medFAGC").Range("C" & vCompteur).Value
70 CBREPRENEUR.AddItem (vAjoutMedecin)
80 Next vCompteur
90 End If

Ce code est identique à SUB02, qui elle fonctionne, mais en SUB05 la ligne 30 ne fonctionne pas!
QUID? En vous remerciant par avance pour votre collaboration
DG
en annexe le fichier
 

Pièces jointes

  • gardememo.xlsm
    243.9 KB · Affichages: 457

Iznogood1

XLDnaute Impliqué
Bonjour,

je crains une mauvaise compréhension de la propriété LineCount.

LineCount renvoie le nombre de ligne(s) du texte (Propriété Text)
Or, quant ta liste est vide, le Text n'est pas défini, il est donc impossible de lire LineCount.

Si je comprends bien ton code, tu veux savoir si la liste est vide.
Dans ce cas, il faut utiliser ListCount et non LineCount.

Remplace la ligne
Code:
40  If CBREPRENEUR.LineCount <= 1 Then
par
Code:
40  If CBREPRENEUR.ListCount <1 Then
Tu peux alors te passer de ce SetFocus qui t'ennuie.
 

drdege

XLDnaute Nouveau
Bonjour,
D'abord MERCI de te pencher sur le problème.
J'ai essayé ta proposition, mais cela bugg toujours.

En fait, si tu vas voir dans le fichier en annexe, tu verras dans le code de l'UFdonnees
SUB01 OK
la SUB02 lance, dans le "Frame1RefCEDANT", une mise à jour du listing, et cela fonctionne, avec le set focus CBCEDANT (en ligne 30)
SUB03 Ok
SUB04 Ok

la SUB05 lance, dans le "Frame3RefREPRENEUR", une même mise à jour, selon la même procédure, mais là, j'ai un flop avec le set focus CBREPRENEUR (en ligne 30)
Si je ne mets pas le "set focus" le programme me le réclame.
J'ai contrôlé les divers noms, par sécurité, tout me semble corrrect.
Pour que tu comprennes et que tu constates, effectivement, le problème, tu peux lancer le programme et regarder le code des sub02&05. ???????
Je ne comprends pas. Ma logique me semble pourtant Logique.
BàToi
DG
 

drdege

XLDnaute Nouveau
J'ai recontrôlé toutes les propriétés des combox CBCEDANT & CBREPRENEUR
J'ai essayé en mettant un nom dans le combox avant son remplissage
Je ne comprends pas pourquoi en SUB02 cela fonctionne et ne fonctionne pas en SUB05 ??????
A l'aide SVP, le cerveau commence à bouillir
En vous remerciant par avance
Ci dessous le code de SUB02

'GESTION MEDECIN CEDANT
'*****************************************************************
Private Sub MAJListeDeroulanteMEDCEDANT()
'SUB02
'CHOIX DU MEDECIN CEDANT par défaut le médecin utilisateur
Dim LigneSel As Long 'Ligne de sélection du médecin dans le listing des médecins FAGC
Dim CDNom As String 'Nom du Médecin cédant
Dim CDPrenom As String 'Prenom du Médecin cédant
Dim CDLocalite As String 'Localité du Médecin cédant
Dim CDSecteur As String 'Secteur du Médecin cédant
Dim CDMail As String 'Mail du Médecin cédant
Dim vCompteur As Long 'Variable de travail cmptgeur ddu nombre de médecins dy listing FAGC
Dim vAjoutMedecin As String 'Variable de travail constituant la liste de choix du combox
'ADAPTATION DES VISIBILITES DES FRAMES
10 Frame1RefCEDANT.Visible = True 'COORD MEDECIN CEDANT
20 Label1.Caption = Sheets("F_para").Range("F6").Value 'SUIVI De l'encodage en cours
'DONNE LE FOCUS A LA LISTE DE CHOIX MEDECIN CEDANT

30 CBCEDANT.SetFocus 'ICI CELA FONCTIONNE ??

'COMPLETE LA LISTE DE CHOIX AVEC LES DONNEES DE LA TABLE F_MEDFAGC
40 If CBCEDANT.LineCount <= 1 Then
50 For vCompteur = 2 To Sheets("f_medFAGC").Range("C2").End(xlDown).Row 'Nombre de médecin du listing Médecins
60 vAjoutMedecin = Sheets("f_medFAGC").Range("C" & vCompteur).Value
70 CBCEDANT.AddItem (vAjoutMedecin)
80 Next vCompteur
90 End If
'PAR DEFAUT
'INITIALISATION DES VARIABLES MEDECIN CEDANT PAR DEFAUT EN F_PARA B2
100 LigneSel = Sheets("F_PARA").Range("A1").Value + 2 'Reprend la N°de ligne du médecin cédant par défaut en parametre
110 CDNom = Sheets("F_medFAGC").Range("C" & LigneSel).Value 'reprend le Nom du médecin depuis le listing des medecins FAGC
120 CDPrenom = Sheets("F_medFAGC").Range("B" & LigneSel).Value 'reprend le Prénom du médecin depuis le listing des medecins FAGC
130 CDLocalite = Sheets("F_medFAGC").Range("H" & LigneSel).Value 'reprend la Localité du médecin depuis le listing des medecins FAGC
140 CDSecteur = Sheets("F_medFAGC").Range("J" & LigneSel).Value 'reprend le Secteur du médecin depuis le listing des medecins FAGC
150 CDMail = Sheets("F_medFAGC").Range("E" & LigneSel).Value 'reprend le Mail du médecin depuis le listing des medecins FAGC

'AFFECTATION DES VARIABLES AU "VALUE" DES TXTBOX DU MEDECIN CEDANT
'ce sont les données qui apparaissent dans l'UF
160 CBCEDANT.Text = CDNom 'Affecte la variable au combox NOM du médecin cédant
170 TBCEDANTPRENOM.Value = CDPrenom 'Affecte la variable au Txtbox PRENOM du médecin cédant
180 TBCEDANTLOCALITE.Value = CDLocalite 'Affecte la variable au Txtbox LOCALITE du médecin cédant
190 TBCEDANTSECTEUR.Value = CDSecteur 'Affecte la variable au Txtbox SECTEUR du médecin cédant
200 TBCEDANTMAIL.Value = CDMail 'Affecte la variable au Txtbox MAIL du médecin cédant

'AFFECTATION DES DONNEES MEDECIN CEDANT A LA PRE-VALIDATION EN F_journal LIGNE 3
'ce sont les données qui apparaissent dans le journal
210 Sheets("F_journal").Range("A3").Value = CBCEDANT.Text 'Affecte la variable au listing de prévalidation NOM
220 Sheets("F_journal").Range("B3").Value = CDPrenom 'Affecte la variable au listing de prévalidation PRENOM
230 Sheets("F_journal").Range("C3").Value = CDLocalite 'Affecte la variable au listing de prévalidation LOCALITE
240 Sheets("F_journal").Range("D3").Value = CDSecteur 'Affecte la variable au listing de prévalidation SECTEUR
250 Sheets("F_journal").Range("E3").Value = CDMail 'Affecte la variable au listing de prévalidation MAIL
End Sub
 

eriiic

XLDnaute Barbatruc
Bonjour,

apparemment dans le Activate il ne supporte pas du tout :
300 CheckBoxREPRENEUR = False 'CHECKBOX MEDECIN REPRENEUR
Supprime et recrée la checkbox.
Je trouve ça un peu inquiétant. Tu pourrais nettoyer un coup le projet avec http://www.appspro.com/Utilities/CodeCleaner.htm

Et il plante à l'ouverture sur :
110 Sheets("F_MENU").Range("A1").Select 'Sélectionne la première cellule du MENU
Il faudrait activer cette feuille avant. D'ailleurs ce .Select est-il vraiment nécessaire ? 99% sont inutiles.
eric
 

drdege

XLDnaute Nouveau
Bonjour,
Merci de m'aider
1/ J'ai corrigé le problème d'ouverture, Merci Eric
2/ j'ai installé le "codecleaner" qui n'a rien indiqué (NB il ne travaille que sur 32bits, je me suis arrangé)
3/ J'ai essayé de corriger le problème en
- supprimant et recréant la CB RAS
- en recopiant complètement la sub02 et en modifiant des données de variables et de noms RAS
- changeant de nom de la CB RAS

il reste une solution simpliste,
le nom du MCedant étant le nom de l'utilisateur, je vais l'implémenter par défaut
et utiliser la frame du cédant pour le choix du repreneur
cela me permettra de poursuivre et de voir par après le problème (c'est c.. mais simple)

Mais je râle de ne pas comprendre. Si quelqu'un veut encore bien râler avec moi ?
Dans tout les cas, merci les amis
GD
 

Iznogood1

XLDnaute Impliqué
Si je ne mets pas le "set focus" le programme me le réclame.

Et pourquoi te le réclame-t-il ?
Sauf erreur de ma part c'est pour pouvoir utiliser la propriété LineCount.

D'où la question suivante : pourquoi utiliser cette propriété ?
Peux-tu répondre à cette question ?

(je ne comprends pas à quoi ça sert ; j'ai l'impression que tu veux savoir si ta liste est vide ou non. Si c'est le cas, n'utilise pas LineCount mais ListCount).
 

drdege

XLDnaute Nouveau
Bonjour,
En fait, je pense que je me complique la vie, j'ai revu la façon de manipuler les combox et je vais modifier ma façon de faire.
Mon problème est de réinitialiser les combox à chaque utilisation du programme. Il y a donc plus simple.
Je ne suis pas programmeur, loin s'en faut, et j'ai un horaire très tendu, j'ai donc copié-collé une séquence qui semblait marcher. Merci de m'en avoir fait prendre conscience.

Dès que cela fonctionne, je reviens sur le site pour info.
Merci à toi, à vous.
GD
 

Discussions similaires