XL 2016 INSERER PHOTOS USERFORM

youpi457032

XLDnaute Occasionnel
Bonjour,
J'ai un userform qui reprend une base de données. Jusque là pas de problème ! tout fonctionne selon mes besoins.
Il me prend l'idée de faire apparaître la photo de chaque élève, c'est à dire nom après nom dans l'userform (formulaire_élève)
Ce formulaire, je l'ai lié à un document word (fiche élève) qui par publipostage reprend les informations voulues.
Comment d'une part dans ma base de données de référence (base_malafretaz) inserer soit les photos soit les liens de celles ci, afin que mon userform les reprenne, et d'autre part pour chaque élève faire apparaître la photo voule dans ma fiche élève Word (construite par publipostage). Chaque élève devant disposer de sa photo sur l'userform ? Et qu'elle s'auto ajuste dans le cadre imposé ?
Le tout en VBA, de préférence au moins pour Excel….
Merci à vous tous pour votre aide ….
 

Pièces jointes

  • essai photos.xlsm
    323.5 KB · Affichages: 34

Dranreb

XLDnaute Barbatruc
Ben par exemple CA.Add Me.CkxToto, "Titre", "Oui!;Non.;?"
À tester, ça n'a encore jamais trouvé d'application.
Pour les Image on peut spécifier un dossier, et pour la plupart des autres contrôles un format d'affichage du texte. C'est pourquoi cet argument facultatif s'appelle Fmt.
Le "Titre" en guise de spécification de colonne n'est applicable que si un ListObject couvre la plage, c'est à dire si celle ci a fait l'objet
d'une mise sous forme de tableau. Mais pour que ça marche il faut affecter par un Set à la propriété Colonnes du ControlsAssociés celle du ComboBoxLiées. Seul ce dernier a les billes au départ grâce à sa méthode Plage qui analyse ce qu'il doit prendre comme données.
 
Dernière édition:

youpi457032

XLDnaute Occasionnel
Ben par exemple CA.Add Me.CkxToto, "Titre", "Oui!;Non.;?"
À tester, ça n'a encore jamais trouvé d'application.
Le "Titre" en guise de spécification de colonne n'est applicable que si un ListObject couvre la plage, c'est à dire si celle ci a fait l'objet
d'une mise sous forme de tableau.
Pour les Image on peut spécifier un dossier, et pour la plupart des autres contrôle un format d'affichage du texte. C'est pourquoi cet argument facultatif s'appelle Fmt.
Je nage….
je voudrais du coup faire plus simple avec ce que je possède déjà….sinon je ne vais pas y arriver….
j'ai pas mal avancé sur mon projet ce soir…. j'ai construit mon userform et la base associée….
il me reste plus qu'à bâtir la fonction filtre….
je possède déjà une fonction filtre sur une autre base qui fonctionne très bien… elle compare les données pour chaque ligne, colonne après colonne, à une plage de référence L1. Si les données contenues dans la base sont identiques à la plage de valeur de rérence, il affiche dans une fenêtre L2 les résultats, et surtout les copie dans une feuille distincte… Je voudrais reprendre ce schéma de fonctionnement.
Sauf qu'avec des checkbox (case à cocher) en Userform le résultat renvoyer n'est pas le même que celui des TXT, CBBox…
il me faut absolument pouvoir faire dire à mes ChKbox que si activées alors la valeur est ="GALA", par exemple. Comme ca il écrit gala dans la cellule concernée, je retrouve une valeur qui est connue de mon filtre et le tour est joué, je m'en sors…
EX si pour le nom 1 (ligne 1 en fait), Case a cocher Gala cochée, écrire dans la BDD concernée, colonne Gala "GALA" sinon rien.
peux tu m'aider a coder ca...
Si T5 Coché ecrire "GALA sinon rien.
SI T6 coché écrire Soirée dansante, sinon rien
Si T7 cochée écrire OLA chikita, sinon rien
Peux tu m'aider à coder ça STP
je te mets en copie le code qui doit faire fonctionner cela… de l'USERFOM vers la feuille "Manifestations"

[CODE\]
Option Explicit
Private Sub Bt1_Click()
Dim Lig&, i&
If T1 = "" Or T2 = "" Then MsgBox "Vous devez au minimum remplir le nom et le pr?nom pour pouvoir enregistrer un ?l?ve!!", vbCritical, "Manque de donn?e": Exit Sub
With Feuil6
If T1.ListIndex <> -1 Then
Lig = T1.ListIndex + 2
For i = 1 To 17
If i = 10 Or i = 11 Or i = 15 Or i = 18 Or i = 21 Then .Cells(Lig, i) = Controls("T" & i): GoTo 1
If IsNumeric(Controls("T" & i)) Then
.Cells(Lig, i) = CDbl(Controls("T" & i))
Else
.Cells(Lig, i) = Controls("T" & i)
End If
1 Next i
Else
Lig = .Range("A" & Rows.Count).End(3).Row + 1
For i = 1 To 17
If i = 10 Or i = 11 Or i = 15 Or i = 18 Or i = 21 Then .Cells(Lig, i) = Controls("T" & i): GoTo 2
If IsNumeric(Controls("T" & i)) Then
.Cells(Lig, i) = CDbl(Controls("T" & i))
Else
.Cells(Lig, i) = Controls("T" & i)
End If
2 Next i
End If
End With
End Sub
Private Sub Bt2_Click()
Unload Me
End Sub
Private Sub Bt3_Click()
Dim rep, rep1
If T1.ListIndex <> -1 Then
rep = MsgBox("Attention vous allez Supprimer l'?l?ve actuellement s?lectionn?, ?tes vous sur de vouloir Supprimer l'?l?ve??", vbCritical + vbYesNo, "Suppression d'un ?l?ve")
If rep = vbNo Then Exit Sub
rep1 = MsgBox("Attention vous allez Supprimer un ?l?ve??, confirmer vous la suppression, action irr?versible??", vbCritical + vbYesNo, "Confirmation de Suppression d'un ?l?ve")
If rep1 = vbNo Then Exit Sub
Feuil6.Rows(T1.ListIndex + 2).Delete Shift:=xlUp
Bt2_Click
End If
End Sub
Private Sub Bt4_Click()
Unload Me
End Sub
Private Sub Filtre_manif_Click()
Filtre_manifestations.Show 0
End Sub
Private Sub T1_Click()
Dim Lig&, i&
If T1.ListIndex <> -1 Then
Lig = T1.ListIndex + 2
For i = 1 To 17
Controls("T" & i) = Feuil6.Cells(Lig, i).Value
Next i
End If
End Sub

Private Sub T360_BeforeDragOver(ByVal Cancel As MSForms.ReturnBoolean, ByVal Data As MSForms.DataObject, ByVal x As Single, ByVal Y As Single, ByVal DragState As MSForms.fmDragState, ByVal Effect As MSForms.ReturnEffect, ByVal Shift As Integer)
End Sub
Private Sub UserForm_Initialize()

Worksheets("manifestations").Range("A2:C600").Value = Worksheets("base_MALAFRETAZ").Range("A2:C600").Value
Worksheets("manifestations").Range("D2:D600").Value = Worksheets("base_MALAFRETAZ").Range("P2:p600").Value

Dim aa, fin&, i&
With Feuil6
fin = .Range("A" & Rows.Count).End(3).Row
If fin < 2 Then Exit Sub
aa = .Range("A2:AC" & fin)
End With
T1.ColumnCount = 2
T1.List = aa
End Sub
[/CODE]

Je veux que mes T qui sont des chekbox ne renvoie pas 0 ou -1, Vrai ou faux....
je veux qu'elle renvoie pour chaque T différend une valeur bien définie
T5 soirée dansante. sinon Vide
T6 gala, sinon vide
T7 Ola chikita, sinon vide
T8 base de loisir, sinon vide
ETc.….pour chaque TXt….
c'est ca que je cherche a faire….
 

Dranreb

XLDnaute Barbatruc
Oh ben non, vous avez maintenant un outils qui ventile tout seul des valeurs de controles associés à un jeu de ComboBox liées genre Nom, Prénom et Date de naissance, vous n'allez pas employer autre chose quand même ?
Note: le ControlsAssociés s'occupe de convertir en nombre les textes numériques de TextBox, sauf si on spécifie Fmt:="&" au Add, signifiant expressément qu'on les veut sous forme de textes.
 
Dernière édition:

youpi457032

XLDnaute Occasionnel
Je ne sais pas super bien coder….je bidouille !
J'aime bien votre code…. mais je sais pas le transposer à mes chekbox !!!
En fait je suis perdu là….
je devrais faire autrement qu'avec les contrôle checkbox…. c'est dommage, je les trouvais simples et efficaces...
 

youpi457032

XLDnaute Occasionnel
Je ne sais pas super bien coder….je bidouille !
J'aime bien votre code…. mais je sais pas le transposer à mes chekbox !!!
En fait je suis perdu là….
je devrais faire autrement qu'avec les contrôle checkbox…. c'est dommage, je les trouvais simples et efficaces...
Oh ben non, vous avez maintenant un outils qui ventiles tout seul des valeurs de controles associés à un jeu de ComboBox liées genre Nom, Prénom et Date de naissance, vous n'allez pas employer autre chose quand même ?
Note: le ControlsAssociés s'occupe de convertir en nombre les textes numériques de TextBox.
Oh ben non, vous avez maintenant un outils qui ventiles tout seul des valeurs de controles associés à un jeu de ComboBox liées genre Nom, Prénom et Date de naissance, vous n'allez pas employer autre chose quand même ?
Note: le ControlsAssociés s'occupe de convertir en nombre les textes numériques de TextBox.

Je ne sais pas super bien coder….je bidouille !
J'aime bien votre code…. mais je sais pas le transposer à mes chekbox !!!
En fait je suis perdu là….
je devrais faire autrement qu'avec les contrôle checkbox…. c'est dommage, je les trouvais simples et efficaces...

Ce lien n'existe plus Ce lien n'existe plus Ce lien n'existe plus
 

Dranreb

XLDnaute Barbatruc
C'est pareil que pour les autres contrôles. Si vous cochez une CheckBox ayant fait l'objet d'un Add de ControlsAssociés il va mettre une valeur correspondante dans la colonne qui lui est attribuée. Enfin tout au moins quand on va valider la modification. Et vous pouvez préciser au Add le texte qui doit être mis quand elle est True;False;ou Null. Elle ne peut être remise Null par l'utilisateur que si on a demandé par je ne sais plus laquelle de ses propriétés à ce qu'elle puisse avoir 3 états)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Bonjour.
Cela dit il est possible que des CheckBox ne soit pas la solution à vos problème parce que pas assez souples.
J'ai plutôt l'impression que c'est un problème de liens entre une base de cours ou d'évènements, à créer, et des élèves qui peuvent y participer ou non.
Je me suis amusé ce matin à écrire du code pour utiliser des Dictionnaires multi items et les inverser.
 

Pièces jointes

  • DicoMultiItems.xlsm
    24.1 KB · Affichages: 15

youpi457032

XLDnaute Occasionnel
Bonjour.
Cela dit il est possible que des CheckBox ne soit pas la solution à vos problème parce que pas assez souples.
J'ai plutôt l'impression que c'est un problème de liens entre une base de cours ou d'évènements, à créer, et des élèves qui peuvent y participer ou non.
Je me suis amusé ce matin à écrire du code pour utiliser des Dictionnaires multi items et les inverser.
Bonjour Dranreb...
Bon, la première chose à faire est de te remercier pour te pencher sur mon problème épineux...
Je pnse que tu as tout compris, c'est bien un problème de lien entre base élèves et cours...

Dans l'absolu et l'idéal il me faudrait pouvoir filtrer sur trois critères :
premier critère : par cours : (ex Zumba,)
deuxième critères : par evènements : (ex : Gala)
troisième critères et dernier critères après sous filtrage des deux premiers critères par élèves ( ex : dupont)
ce qui reviendrait à trier pour exemple : quels élèves, dans le cours zumba volontaire pour le gala ? c'est ça la finalité de mon projet ? avec un point clé essentiel, je dois pouvoir copier les résultats sur une feuille distincte, pour ensuite récupérer le champ mail et lui appliquer mon champ macro mail ...
c'est ça mon projet ? en fait je cherche a faire la même chose que mon outil filtre par cours déjà créé, mais en lui ajoutant deux critères de tri complémentaires (evènemements et élèves). Par case à cocher qui génère du filtrage er recopie automatique dès qu'on coche ce serait bien...
Est-ce que tu me comprends ????
 
Dernière édition:

youpi457032

XLDnaute Occasionnel
je t'envoie un fichier que j'ai trouvé…. dans l'idée j'aimerais ce type de fonctionnement…. adapté à mes besoins. C'est pour que tu vois ce que j'aimerai bâtir….
je voudrais qu'à recopie après filtrage dans la feuille distincte, que figure juste des éléments simples de ma base, nom, prénom et champs mail… rien de plus. Comme ça derrière je repars de ma macro mail déjà construite et la boucle est bouclée !
mes trois critères à moi : tri par cours, évènements, danseurs, avec possibilité de filtrer sur un, deux, ou trois de ces critères en même temps ou pas ...
avec possibilité à chaque fois de choisir un ou plusieurs cours, un ou plusieurs élèves, un ou plusieurs évènements dans la fonction tri….
 

Pièces jointes

  • Copie de FormFiltreCaseCocher.xls
    95 KB · Affichages: 19

Dranreb

XLDnaute Barbatruc
Ce n'est pas comme ça que j'avais compris la chose.
Je pensais à une base évènement, manifestation ou cours dépourvu d'élève et on associerait par une troisième tableau certains élèves à certains cours.
Je n'ai rien qui ressemble à ce que tu voudrais pour une base avec à nouveau l'identification de l'élève, ni surtout avec possibilité de choisir plusieurs choses à la fois dans une ou plusieurs ListBox. Une seule chose dans plusieurs ComboBox, ça oui, l'objet ComboBox le fait très bien. Si plusieurs lignes correspondent à la combinaison de choix son évènement Résultat en communique dans un argument Lignes() As Long la liste des numéros de Lignes.
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 926
Membres
101 842
dernier inscrit
seb0390