cbxlies concocter par dranreb pour matou59

grisan29

XLDnaute Accro
bonsoir le forum et Dranreb

puis je m'approprier ce projet de cbxlies si tu m'explique comment la 1ere combobox puisse prendre ses informations sur plusieurs(8 ou 10) feuilles de la même architecture que celle que tu as fait
dans ce post
pour m'exercer a manipuler tes cbxlies et créer un classeur client a mon voisin en m'appropriant celui que tu fait pour fenec

pascal
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

bonjour

et comment aurais tu procédé car moi je ne fait que réadapter ce que j'ai, d'ailleurs je suis en cours de revoir mes bas de page, car j'y avais bossé il y a 2 où 3 ans et je vais les remettrent au gout du jour, moins bordélique surtout

Pascal
 

Dranreb

XLDnaute Barbatruc
Re : cbxlies concocter par dranreb pour matou59

J'aurais fait comme ça: On sélectionne une partie de l'entête de facture, ça ouvre l'UserForm Clients pour l'y choisir et que ses coordonnées y soient mises. On sélectionne une cellule d'une ligne du corps de facture, ça ouvre l'UserForm Articles pour y mettre un article. Ce serait plus simple que de faire autrement. Et pour savoir si on est dans l'entête ou dans le corps de facture, des noms dans le classeur pour ces deux zones.
 

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

bonjour dranreb

merci de ta réponse tu dits
une partie de l'entête de facture, ça ouvre l'UserForm Clients
pas de souci en sélectionnant la cellule adéquate mais pas a chaque fois lors de modification d'un devis le client est déjà inscrit

mais ce que tu laisse entendre quand tu dits
sélectionne une cellule d'une ligne du corps de facture, ça ouvre l'UserForm Articles
c'est a faire a chaque ligne???, car bien souvent pour une SDB le devis s résume a 2 voir 3 feuilles

bon je vais essayer ce que tu dits

bonne journée

Pascal
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : cbxlies concocter par dranreb pour matou59

Bonjour.
L'idée c'est que ce soit l'userform Clients, déjà chargé en mémoire et prêt à intervenir, qui détecte qu'on à sélectionné un cellule faisant partie ou non d'une plage nommée EntêteFact, et qui saura que c'est tout cet entête qu'on veut éventuellement modifier, l'UserForm Articles, déjà chargé en mémoire et prêt à intervenir, qui détecte qu'on à sélectionné un cellule faisant partie ou non d'une ligne d'une plage nommée CorpsFact, et qui saura que c'est cette ligne là qu'on veut modifier. Besoin d'aucune programmation dans les classeurs de factures, juste veiller à ce que les zones soient bien nommées.
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

bonjour

donc si je comprends bien ce que tu dit il vaux mieux que j'ai 2 feuilles 1pour facture et 1 pour devis tout e sachant que je fait des factures d'acompte et acquittée
et comment un userform peut détecter qu'une cellule où plus est remplie pour s'ouvrir car cette option est une inconnue pour moi
je sais que dans le code de la feuille on peux le faire mais au dela ??

pascal
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : cbxlies concocter par dranreb pour matou59

et comment un userform peut détecter qu'une cellule où plus est remplie pour s'ouvrir
Non, qu'elle est sélectionnée.
En y ayant déclaré en global un objet WithEvent As Application. Cet objet figure dès lors dans la liste déroulante de gauche (Objet) qui surmonte la fenêtre de code (tout comme CL d'ailleurs) et la liste de droite (Procédure) montre tous les évènements Excel pouvant être directement pris en charge depuis l'UserForm par les procédures appropriés dont le modèle peut être implanté d'un simple clic dans cette liste. Pour qu'il devienne opérationnel il doit avoir fait l'objet d'un Set de = Application.

Si donc est déclaré en tête une Dim WithEvents Ex As Application
et que dans l'UserForm_Initialize on a fait Set Ex = Application
À condition que l'UserForm soit bien chargé mais simplement masqué, une Private
Sub Ex_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
serait exécutée chaque fois qu'on sélectionne une cellule quelconque d'un classeur quelconque. Il ne reste plus qu'à vérifier si elle est contenue dans une plage nommée de façon appropriée pour décider de réafficher l'UserForm et noter la plage destinatrice sélectionnée.
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

bonsoir Dranreb

c'est de l'exemple .pdf que je joints dont tu parles dans ta réponse
Cet objet figure dès lors dans la liste déroulante de gauche (Objet) qui surmonte la fenêtre de code (tout comme CL d'ailleurs) et la liste de droite (Procédure) montre tous les évènements Excel pouvant être directement pris en charge depuis l'UserForm par les procédures appropriés dont le modèle peut être implanté d'un simple clic dans cette liste. Pour qu'il devienne opérationnel il doit avoir fait l'objet d'un Set de = Application.

Pascal
 

Pièces jointes

  • propriétés vba.pdf
    189.7 KB · Affichages: 32

Dranreb

XLDnaute Barbatruc
Re : cbxlies concocter par dranreb pour matou59

Le pdf montre l'explorateur d'objets. Moi je parlais de la fenêtre de code: celle ou on tape les instructions. Tu n'avais jamais remarqué qu'elle était surmontée de deux larges listes déroulantes ? Elle ne sont pas là pour la décoration. Elle permettent de retrouver du code existant dans le module, mais leur principal intérêt c'est l'implantation automatique de modèles de procédures évènements.

La liste de gauche propose tous les objets disponibles générateurs d'évènements, celle de droite les évènements existants de l'objet sélectionné dans celle de gauche.
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

d'accord
je t'ai mal compris, bien sur que j'ai vu ces 2 liste déroulantes pour les utilisés de temps en temps pour activate, initialise principalement

Pascal
 
Dernière édition:

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

bonjour Dranreb

j'ai fouillé un peu le forum pour voir tes réponses sur les cbxliés et j'ai trouvé un classeur qui permet d'ouvrir un userform en cliquant sur n'importe quelle cellule, est ce bien de cela qu'il s'agit en limitant la zone de sélection

Pascal
 

Pièces jointes

  • CBxLiéesAnnelolu.xls
    231 KB · Affichages: 36

Dranreb

XLDnaute Barbatruc
Re : cbxlies concocter par dranreb pour matou59

Bonjour.

Oui, c'est un peu le même principe, sauf que dans le cas de ce fichier l'affichage est commandé par une Worksheet_SelectionChange dans la feuille. Or moi je propose que ce soit l'UserForm lui même qui détecte qu'il est à même de jouer son rôle. Il suffit de mettre un nom par exemple "CorpsFact" dans toutes les feuilles des fichiers concernés et de détecter si la plage sélectionnée appartient à une plage ainsi nommée.
 

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

bonjour
merci de ta réponse
sur ce principe
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
UserForm1.Show
End Sub
le clic sur n'importe quelle cellule ouvre l'userform
bon je t'envoie le classeur de Matou59 agrémenté de 2 feuilles vierges nommées facture et devis et sur lesquelles j'ai nommées des plages de cellules, est ce dans cet ordre que tu veux que je fasse

Pascal
 

Pièces jointes

  • CbxLiésgrisan9-v2.xls
    370 KB · Affichages: 34
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : cbxlies concocter par dranreb pour matou59

Ah mais moi je ne veux pas t'imposer ce que tu dois faire, je propose c'est tout.
Il vaudrait mieux un nom identique pour les devis et les factures défini au niveau de la feuille alors pour pouvoir avoir le même dans plusieurs.
C'est encore une vieille version ça. Je propose dans la nouvelle :
VB:
Private Sub Ex_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Dim F As Worksheet
Me.Hide
If Target Is Nothing Then Exit Sub
On Error Resume Next
If Target.Rows.Count <> 1 Then Exit Sub
Set F = Sh
If Intersect(F.[CorpsDevFac], Target) Is Nothing Then Exit Sub
If Err Then Exit Sub
Set PlgDest = Intersect(F.[CorpsDevFac], Target.EntireRow)
' éventuellement ici: réafficher dans les contrôles les données trouvées dans cette ligne
Me.Show
End Sub
L'Userform doit avoir été chargé préalablement.
 

grisan29

XLDnaute Accro
Re : cbxlies concocter par dranreb pour matou59

re
oui je sais que c'est une ancienne version , mais c'était juste pour te demander si pour les feuilles c'étaient bon, je vais appliquer ton code dans une nouvelle version

j'ai mis ton code mais je ne comprends comment il doit fonctionner

Pascal
 

Pièces jointes

  • CbxLiéesGrisan29-v2.xls
    357.5 KB · Affichages: 32
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : cbxlies concocter par dranreb pour matou59

Changer le nom dans Ex_SheetSelectionChange :
VB:
If Intersect(F.[CorpsDevFac], Target) Is Nothing Then Exit Sub
If Err Then Exit Sub
Set PlgDest = Intersect(F.[CorpsDevFac], Target.EntireRow)
Et ajouter un Bouton de commande nommé BtnOK. Etoffer la procédure BtnOK_Click

Remplacer aussi plus haut, dans If Target.Count <> 1 Then Exit Sub Target.Count par Target.Rows.Count s'il peut y avoir des putains de cellule fusionnées dans la ligne.
L'entête de facture ne pourrait-il se mettre dans l'entête et pied de page de la feuille ?

Je m'aperçois que je me suis trompé de constante dans la dernière procédure. C'est :
VB:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode <> vbFormControlMenu Then Exit Sub
Cancel = True: Me.Hide
End Sub
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 024
Messages
2 084 718
Membres
102 638
dernier inscrit
TOTO33000