VBA : récupérer .caption d'un "Frame"
Je n'ai pas d'erreur de ce type.
As-tu cette erreur quel que soit le(s) OptionButton(s) choisi(s).
Il faudrait voir si quelqu'un d'autre à une erreur sur ce fichier.
J'utilise habituellement le point décimal mais j'ai fait de nombreux tests, y compris en testant avec l'Option virgule comme séparateur décimal, et ce code ne produit pas d'erreur.
Si tu utilises la virgule comme séparateur décimal tu peux aussi modifier cette ligne comme suit :
...Then comptFI = comptFI + CSng(Me.Controls("But" & i).Caption)
ça devrait peut-être solutionner ton problème.
Ces problèmes de compatibilité... quelle plaie !
A+
Re-Bonjour le forum,
Ca fonctionne !!! Merci galopin01 ! Je n'ai plus d'erreur avec ce code. Je ne sais pas si c'est à cause de problèmes de compatibilité entre les versions en tout cas ça marche.
Merci beaucoup à toi galopin01... Je vois qu'au Pays des "ventres jaunes", on maitrise mieux le VBA que dans le Beaujolais. J'aurais dû rester sur Bourg, tu m'aurais certainement appris plein de choses en excel...
Je vais tâcher d'adapter cette ligne de code à mon fichier d'origine alors je laisse le fil ouvert encore un peu... On ne sait jamais...
Merci encore et bon après-midi.
Fabrice,
Re- le forum,
galopin01, cela fait plus d'une heure et demie que j'essaye d'adapter ton code à mon fichier... Bien évidemment, je n'y arrive pas... Serait-il possible que tu regardes où je me plante dans le fichier joint qui est presque mon projet final mais zippé... En sachant qu'il y a un Userform qui n'est pas encore lié (UsfPInt) et dont le code n'est pas encore écrit...
https://www.excel-pratique.com/~files/doc2/MILOU_I_A_2009_V2.zip
Merci d'avance pour ton aide.
Fabrice,
re...
Le code corrigé pour UsfFI :
Private Sub UserForm_Initialize()
Unload UsfNoms
With Me
.StartUpPosition = 3
.Width = Application.Width
.Height = Application.Height
.Left = 0
.Top = 0
End With
Workbooks("MILOU_I&A_2009_V2.xls").Activate
LstNoms.RowSource = "Listes!Noms"
Calendar1.Value = Now
For Each Ctrl_Frame In Controls
If TypeName(Ctrl_Frame) = "Frame" Then
For Each Ctrl_OB In Ctrl_Frame.Controls
If TypeName(Ctrl_OB) = "OptionButton" Then
Ctrl_OB.Tag = Ctrl_Frame.Caption
End If
Next Ctrl_OB
End If
Next Ctrl_Frame
End Sub
Private Sub ButValiderFI_click()
Dim i%, comptFI!
If LstNoms = "" Then
LstNoms.SetFocus
MsgBox " *** VEUILLEZ SAISIR VOTRE NOM SVP !!! *** "
Exit Sub
End If
comptFI = 0
With Sheets("Journal_enregistrements_FI")
For i = 1 To 60
If Me.Controls("But" & i) Then comptFI = comptFI + CSng(Me.Controls("But" & i).Caption)
Next
If Not comptFI > 1 Then
For i = 1 To 60 'numéro des boutons
If Me.Controls("But" & i) Then
ligne = .[A65000].End(xlUp).Row + 1
.Cells(ligne, 1) = LstNoms
.Cells(ligne, 2) = Me.Calendar1
.Cells(ligne, 3).Value = Me.Controls("But" & i).Tag
.Cells(ligne, 4).Value = Me.Controls("But" & i).Caption
.Cells(ligne, 5) = TextBox1.Value
ligne = ligne + 1
End If
Next i
Else
MsgBox "Vous ne pouvez saisir une charge de travail > à 1 jour"
End If
End With
Unload UsfFI
End Sub
Private Sub ButAnnulerSaisieFI_Click()
Unload Me
End SubA+
Bonjour le forum,
Bonjour galopin01. Je viens de copier ton code dans mon fichier et j'ai toujours l'erreur : "Erreur d'exécution 13, Incompatibilité de type" et le débogage qui se positionne sur la ligne "... Then comptFI = comptFI + CSng...".
C'est vraiment rageant car en laissant la macro continuer, tout à l'air parfait...
J'ai essayé de remplacer la ligne qui pose problème par : Then comptFI = comptFI + CSng(Replace(Me.Controls("But" & i).Caption, ",", ".")) mais rien n'y fait.
Aurais-tu une petite étincelle qui me donnerait une lueur d'espoir ?
Merci d'avance.
Fabrice,
Ben... à priori comme ça je ne vois pas pourquoi hier ça marchait et aujourd'hui non...
Peut-être ce petit phénomène du aux problèmes des fichiers trop bricolés. A la longue les résidus finissent par encombrer tellement le projet que l'on est obligé de tout remettre à plat.
Je travaillais ce matin précisément sur ton projet (mais dans une tout autre direction) et je n'ai même pas réussi à créer un autre USF. A chaque fois j'aboutissais à un plantage total : J'ai été obligé de recommencer sur un classeur neuf...
Dans l'immédiat, je ne vois pas d'autre possibilité.
A+
Re-,
Merci encore à toi galopin01 pour ton aide précieuse... Effectivement, c'est incompréhensible. Pourquoi hier, la modif de cette ligne a fonctionné alors qu'aujourd'hui plus rien. C'est vraiment frustrant...
Honnêtement, je ne pense pas avoir trop bricolé dans mon fichier hier et, en plus, j'ai tout effacé ce matin pour recopier ton code par dessus... Ce devrait être propre... Comprend pas !
J'espère que tu pourras me sortir de cette impasse.
Merci d'avance.
Amicalement.
Fabrice,
bonsoir,
Tout effacer ne nettoie pas le fichier, bien au contraire, c'est à cette occasion qu'Excel accumule des scories de données des bribes de chaînes de code perdues et invisibles pour l'utilisateur; et qui alourdisse inutilement le fichier et polluent le fonctionnement.
La seule solution est de remettre un plat un classeur propre en ne collant que les données voulues. (pas par importation, mais par Copier/Coller !)
Même si tu n'as pas l'impression d'avoir trop pinaillé ce peut être quand même déjà trop.
Notre ami cfn3cfn en a fait récement l'expérience dans ce fil. et pourtant son classeur était beaucoup moins complexe que le tien !
il lui a suffit de créer une nouvelle feuille et faire un copier coller des données pour résoudre son problème !
A+
Re- le forum,
Bonjour galopin01,
Si j'ai bien compris, tu me suggères d'ouvrir un nouveau classeur, de prendre les onglets et de les copier un à un, puis de prendre tous les Userforms et les modules et de les copier également dans le nouveau classeur ?
Si c'est ce que tu penses, j'effectuerai l'opération dans la journée et viendrai vous tenir au courant de l'évolution du projet...
Bone journée.
Fabrice,
bonjour,
Oui c'est celà. Attention : Pas d'importation ! l'importation importe également les résidus...
Copier / Coller pour les données (et les formats et les objets) des feuilles.
Création de nouveaux USF et Copier / Coller des anciens Contrôles sur les nouveaux USF, puis copier Coller des Codes des différents modules...
Je sais c'est chiant... ça ne résoudra pas forcément ton problème mais toujours utile.
Yaka comparer la taille du fichier d'origine et la taille du nouveau fichier pour comprendre...
A+
Bonjour à tous,
galopin01, j'ai tout refait sur un nouveau classeur, en copier coller (pour l'objet USF c'est pénible...) et la taille de mon nouveau fichier est de 246 Ko contre 263 Ko auparavant. Mais j'ai toujours la même erreur "Erreur d'exécution 13, Incompatibilité de type" et je n'arrive pas à m'en sortir.
Honnêtement, je ne pensais pas que ce serait aussi compliqué de faire un contrôle sur une somme de saisies et je commence à me décourager... Je me demande si je n'ai pas vu trop grand...
Penses-tu qu'une solution existe sans tout refaire ? Je me vois mal tout recommencer...
Merci d'avance.
Amicalement.
Fabrice,
bonjour,
Si possible appelle moi en début d'après midi ou en début de soirée.
Je t'ai mis mon N° de Tel en MP
Nécessité d'être en face de ton ordi et de ton appli pendant la communication...
A+
Bonsoir,
juste pour cette erreur "13" :
Fabrice, au début, Galopin t'avait donné un code, remplaçant le point, par la virgule...ou quelque chose comme cela (je ne sais plus, il a effacé son code ...)
Cependant, tu avais déjà une virgule, dans le caption...
L'instruction CSng convertit en Single les nombres comportant des "Virgules"..
Or tes Captions comportent des "Points"...
Soit tu reprends le code initial, soit tu remplaces tes Points, par des Virgules...
2.5 est différent de 2,5Bonne soirée
Re-,
D'abord, un grand merci à tous pour votre aide. Galopin01, je suis au boulot et ma MP est à mon domicile (50 kms...). Ma fille rentre vers 14 h 15 et je lui demanderai de me communiquer ton n°. Mon fichier est sur le poste de mon boulot pour l'instant...
cousinhub, je vais tenter de changer les points par des virgules dans l'après-midi car, effectivement, je n'y avais pas pensé. Mais comme cela a fonctionné pendant un moment hier je n'ai pas cherché plus loin.
Je vous tiens au courant sinon j'essaye de t'appeler galopin01.
Merci encore.
Amicalement.
Fabrice,
Re-,
Hop ! Hop ! Hop ! Les amis !
En combinant vos 2 suggestions, c'est à dire en prenant le nouveau fichier dans lequel j'ai effectué les "copier-coller" et en changeant les "." de mes captions en "," cela re-fonctionne miraculeusement. Je finis de tout remettre en forme, d'essayer d'adapter le code de galopin01 sur mes autres USF pour contrôler le dépassement de journée, et je reviens vous prévenir de la fin de mon projet (enfin j'espère...).
Un grand merci (je sais je me répète) à vous tous.
Amicalement.
Fabrice,
Bonjour,
cela re-fonctionne miraculeusement....
Je ne pense pas qu'un miracle ait eu lieu....
pour contrôler le dépassement de journée
Pour ce souci, à mon humble avis, seul le recours à des modules de classe pourrait te donner la solution "miracle" (comme tu aimes tant....)
Cependant, avant de me lancer dans cette aventure, il faudrait que ton projet soit bien "saucissoné", car toute action fera référence à un "OptionButton", chaque "OptionButton" aura son nom, avec sa "Frame"...
Et les durées ne seront inscrites dans l'onglet qui va bien que lors de l'action "Valider" de l'USF "usfNom"
Tous les USF que tu ouvriras, lors d'une "Session", donneront leurs "périodes de travail", et ceci, pour une journée "Uniquement"
A l'action "Valider", tu pourrais rajouter un ListBox, avec ce que l'employé à donné comme "Charge de Travail", afin de contrôle, et ensuite valider ses horaires...
Reste la gestion du "Oupsss, je m'a trompé....."
Il faut également penser à annuler l'erreur de saisie....
Bref :
Je me demande si je n'ai pas vu trop grand...
Ben, peut-être.....
Bon courage
Bonjour à tous,
cousinhub, je te remercie pour tes judicieux conseils. Je pensais mon projet relativement bien "sauicissoné" mais le problème, c'est qu'en avançant petit à petit, tu t'aperçois que tu peux encore faire mieux et tu essayes d'améliorer au fur et à mesure.
Cependant, je n'ai pas tes connaissances ou celles de vba-new et de galopin01 en VBA et c'est vrai que je "tatonne" un peu dans cet exercice...
Je ne connais pas les modules de classe mais j'ai bien mon projet en tête maintenant et pas question d'en changer (mais si c'est plus simple et plus fiable avec les modules de classe, je veux bien apprendre...).
En résumé, le 1er USF (UsfNoms) me donne le choix entre 3 autres USF via une ListeBox pour la saisie des charges d'une journée.
Dans chacun de mes 3 USF, l'utilisateur va cocher sur des boutons correspondant à des quarts de journée (0.25, 0.50, 0.75 et 1) dans des frames que j'ai nommés. Je récupère les valeurs des boutons cochés (en ne dépassant pas 1) et les captions des frames pour constituer un onglet d'enregistrements quotidiens en fonction du 1er choix dans UsfNoms (journal_enregistrementsFI ou journal_enregistrementsPI ou journal_enregistrementsPE).
Ce fichier me fabrique, en fait, 3 feuilles alimentées au jour le jour et ligne après ligne. Après, je synthétise tout ça dans un autre fichier pour faire mes statistiques.
Voilou ! Je ne sais pas si j'ai employé la meilleure méthode pour gérer ces fameuses charges mais j'étais assez content de mon projet. J'avais sans doute minimisé les difficultés pour tous les controles que je voulais effectués...
Je ne passe pas le fil en résolu tout de suite même si j'espère m'en sortir seul maintenant et ne manquerai pas de vous tenir informés dès que j'aurai terminé.
Encore merci à tous et bon week-end.
Fabrice,
Re-bonjour le forum,
Il y a quelques temps déjà, j'avais reçu l'aide de vba-new, Mytå, galopin01 et cousinhub pour ce post que, heureusement, je n'avais pas fermé... Je pensais être capable d'adapter les codes fournis par les membres du forum cité plus haut pour terminer mais rien à faire... Cela fait maintenant 2 après-midi que je galère et que je me prends la tête sur ces Userforms.
Quelqu'un pourrait-il me donner un coup de main pour alimenter l'onglet "Journal_enregistrements_PE" via le userform "UsfPExt". C'est exactement le même principe que l'onglet "Journal_enregistrements_FI" qui s'alimente via le userform "UsfFI" mais je n'arrive pas à imbriquer les boucles et cela ne fonctionne que partiellement...
Merci pour votre aide
Fabrice,
Bonjour à tous, Forum,
Vraiment personne pour m'aider sur ce coup...
Merci d'avance.
Fabrice,
Bonjour forum, fabrice,
Pas facile ton histoire
Mais essaie avec ce code :
Private Sub ButValiderPExt_click()
Dim i%, comptPE!
Dim j%, valTyp!
Dim k%, l%
k = 1
l = 1
If LstNoms = "" Then
LstNoms.SetFocus
MsgBox " *** VEUILLEZ SAISIR VOTRE NOM SVP !!! *** "
Exit Sub
End If
comptPE = 0
'valTyp = 0
Sheets("Journal_enregistrements_PE").Activate
With Sheets("Journal_enregistrements_PE")
For i = 1 To 12
If Me.Controls("But" & i) Then comptPE = comptPE + CSng(Me.Controls("But" & i).Caption)
Next
If Not comptPE > 1 Then
For i = 1 To 12 'numéro des 12 boutons ("But..")
If comptPE = 0 Then
MsgBox "IL VOUS FAUT SAISIR UNE VALEUR DE TEMPS !!!"
Exit Sub
End If
If (i + 3) Mod 4 = 0 Then
k = (i + 3) / 4
End If
If Me.Controls("But" & i) Then
ligne = .[A65000].End(xlUp).Row + 1
.Cells(ligne, 1) = LstNoms.Value
.Cells(ligne, 2).Value = Me.Calendar1
.Cells(ligne, 3).Value = Me.Controls("But" & i).Tag
'permet de renseigner les informations concernant les chantiers
If Me.Controls("LstChantiers" & k).ListIndex = -1 Then
.Cells(ligne, 4).Value = ""
Else
.Cells(ligne, 4).Value = Me.Controls("LstChantiers" & k).List(Me.Controls("LstChantiers" & k).ListIndex)
End If
For l = l To l + 1 'permet de boucler sur les options "Local" et "Communautaire"
If Me.Controls("Typ" & l) Then
.Cells(ligne, 5).Value = Me.Controls("Typ" & l).Caption
End If
Next l
.Cells(ligne, 6).Value = Me.Controls("But" & i).Caption
End If
Next i
Else
MsgBox "Vous ne pouvez saisir une charge de travail > à 1 jour"
Exit Sub
End If
End With
Unload UsfPExt
Unload UsfNoms
End SubÇa devrait le faire