Multi Mini BD

PascalXLD

XLDnaute Barbatruc
Modérateur
Utilisez ce fil de discussions pour commenter et échanger sur Multi Mini BD

Gestion simplifiée de petites bases de données dans un même classeur.

Navigateur.
Recherches et tris.
Analyses des données.
Outils de maintenance.
Mini-guide.
Cette version supporte maintenant les images, les adresses Email et Internet
 

DidierC

XLDnaute Nouveau
Re : Multi Mini BD

Bonsoir.

Pour enlever le menu de MMBD il suffit de faire ALT [F8] et executer la macro ThisWorkbook.EffaceMenu
( C'est indiqué dans le Mini Guide ).

Didier.
 

David92Fr

XLDnaute Nouveau
Re : Multi Mini BD

Bonjour,

Vraiment un beau travail !

Je me sens un peu honteux de poser mes questions, mais je me lance :

- Comment modifier la BD pour y intégrer des champs avec des listes ?
- Y at'il moyen d'inclure des champs avec liste en cascade (permettant de voir apparaître dans ces listes certaines informations - qui peuvent être diiférentes - en fonction d'éléments sélectionnés) ?

Merci beaucoup.

David
 

DidierC

XLDnaute Nouveau
Re : Multi Mini BD

Bonsoir.

Pour modifier le Navigateur afin d'y intégrer des listes déroulantes il faudra passer par
le code VBA...
Vous y trouverez la section [PERSONNALISATION] qui explique la marche à suivre pour
"personnaliser" MMBD. ( Les exemples utilisent le cas des listes déroulantes ).

Pour les listes en cascade(s), ce n'est pas prévu pour le moment. Une piste toutefois...
Toujours dans la "personnalisation" il faudrait tester les changements effectués dans
la liste d'origine et en fonction du résultat charger la liste de destination.

Didier.
 

David92Fr

XLDnaute Nouveau
Re : Multi Mini BD

Bonjour et merci Didier,

J'ai bien fait les modifications des listes déroulantes dans la partie "Personnalisation". Tout fonctionne, c'est magnifique !!! :)

Là où cela se corse pour moi, c'est que je voudrais que les informations présentes dans la liste déroulante "MOTIFS" puissent varier en fonction de l'Item sélectionné dans la liste "PRESENCE".

Par exemple, si je sélectionne dans la liste déroulante "PRESENCE" l'Item "Interme", seuls les Items Entité, Groupe, Multisites apparaissent dans la liste "MOTIFS" et non les autres Items.

Que dois-je faire ???

Merci pour votre aide...

David
:)

'--------------------------------
'Mettre le nom de la 8ème colonne à personnaliser.
PersoNomColonne = "PRESENCE"

'Ici on détermine automatiquement le numéro de la colonne à personnaliser.
'( La première colonne n'est pas personnalisable ).
For BoucleCol = 8 To NbColonnes
If Cells(1, BoucleCol) = PersoNomColonne Then PersoNuméroColonne = BoucleCol
Next BoucleCol

'Ensuite on effectue le traitement de la personnalisation

If NomBD = PersoNomBD And Cells(1, PersoNuméroColonne) = PersoNomColonne Then
'Personnalisation

'Par exemple : Création d'une liste de choix
Controls("Champ" & PersoNuméroColonne).Clear
Controls("Champ" & PersoNuméroColonne).AddItem "Interne"
Controls("Champ" & PersoNuméroColonne).AddItem "XXXX"
Controls("Champ" & PersoNuméroColonne).AddItem "YYYY"
Controls("Champ" & PersoNuméroColonne).AddItem "Externe"
Controls("Champ" & PersoNuméroColonne).AddItem "ZZZZZ"
'C'est dans cet ordre que les items de la liste apparaitront.

'Pour changer la taille du Control.
Controls("Champ" & PersoNuméroColonne).Width = 100
Controls("Champ" & PersoNuméroColonne).Height = 16

'Pour activer la liste déroulante.
Controls("Champ" & PersoNuméroColonne).ShowDropButtonWhen = fmShowDropButtonWhenAlways

Else

End If

'--------------------------------
'Mettre le nom de la 9ème colonne à personnaliser.
PersoNomColonne = "MOTIFS"

'Ici on détermine automatiquement le numéro de la colonne à personnaliser.
'( La première colonne n'est pas personnalisable ).
For BoucleCol = 9 To NbColonnes
If Cells(1, BoucleCol) = PersoNomColonne Then PersoNuméroColonne = BoucleCol
Next BoucleCol

'Ensuite on effectue le traitement de la personnalisation

If NomBD = PersoNomBD And Cells(1, PersoNuméroColonne) = PersoNomColonne Then
'Personnalisation

'Par exemple : Création d'une liste de choix
Controls("Champ" & PersoNuméroColonne).Clear
Controls("Champ" & PersoNuméroColonne).AddItem "Entité"
Controls("Champ" & PersoNuméroColonne).AddItem "Groupe"
Controls("Champ" & PersoNuméroColonne).AddItem "Multisites"
Controls("Champ" & PersoNuméroColonne).AddItem "Emploi salarié"
Controls("Champ" & PersoNuméroColonne).AddItem "RTT"
Controls("Champ" & PersoNuméroColonne).AddItem "Vacances"
Controls("Champ" & PersoNuméroColonne).AddItem "Congés"
Controls("Champ" & PersoNuméroColonne).AddItem "Retraite"
Controls("Champ" & PersoNuméroColonne).AddItem "Nada"
'C'est dans cet ordre que les items de la liste apparaitront.

'Pour changer la taille du Control.
Controls("Champ" & PersoNuméroColonne).Width = 100
Controls("Champ" & PersoNuméroColonne).Height = 16

'Pour activer la liste déroulante.
Controls("Champ" & PersoNuméroColonne).ShowDropButtonWhen = fmShowDropButtonWhenAlways

Else

End If
 

DidierC

XLDnaute Nouveau
Re : Multi Mini BD

Bonsoir.

Le code que vous avez mis ci-dessus est dèjà un code de personnalisation.
Je ne peux pas résoudre directement votre problème sans connaitre la stucture exacte de votre BdD...

Toutefois j'ai intégré votre pb dans la BdD exemple de MMBD 5.00 ( BD_Bidon ) :

J'ai ajouté une nouvelle colonne dans la BdD : Perso3 qui servira de liste "cascade" modifiée en fonction du contenu du champ Perso2.

J'ai "déclaré" une nouvelle variable dans le code VBA du Navigateur : Dim PersoRéfColOrigine As Integer ( A mettre avec les autres déclarations - En haut du code VBA )

J'ai remplacé le code VBA du Navigateur, Section [PERSONNALISATION] par le code ci-dessous...

'===DEBUT DE LA MODIFICATION DU CODE==========================================================

'--------------------------------
'Mettre le nom de la 2ème colonne à personnaliser.
PersoNomColonne = "Perso2"

'Ici on détermine automatiquement le numéro de la colonne à personnaliser.
'( La première colonne n'est pas personnalisable ).
For BoucleCol = 2 To NbColonnes
If Cells(1, BoucleCol) = PersoNomColonne Then PersoNuméroColonne = BoucleCol
Next BoucleCol

'Ensuite on effectue le traitement de la personnalisation

If NomBD = PersoNomBD And Cells(1, PersoNuméroColonne) = PersoNomColonne Then
'Personnalisation

'Par exemple : Création d'une liste de choix
Controls("Champ" & PersoNuméroColonne).Clear
Controls("Champ" & PersoNuméroColonne).AddItem "Masculin"
Controls("Champ" & PersoNuméroColonne).AddItem "Féminin"
Controls("Champ" & PersoNuméroColonne).AddItem "Autre"
'C'est dans cet ordre que les items de la liste apparaitront.

'Pour changer la couleur du fond et du texte.
Controls("Champ" & PersoNuméroColonne).BackColor = vbYellow
Controls("Champ" & PersoNuméroColonne).ForeColor = vbRed

'Pour activer la liste déroulante.
Controls("Champ" & PersoNuméroColonne).ShowDropButtonWhen = fmShowDropButtonWhenAlways

Else

End If

'--------------------------------
'Mettre le nom de la 3ème colonne à personnaliser.
PersoNomColonne = "Perso3"

'Ici on détermine automatiquement le numéro de la colonne à personnaliser.
'( La première colonne n'est pas personnalisable ).
For BoucleCol = 2 To NbColonnes
If Cells(1, BoucleCol) = PersoNomColonne Then PersoNuméroColonne = BoucleCol
Next BoucleCol

'Ensuite on effectue le traitement de la personnalisation

If NomBD = PersoNomBD And Cells(1, PersoNuméroColonne) = PersoNomColonne Then
'Personnalisation

'Pour changer la couleur du fond et du texte.
Controls("Champ" & PersoNuméroColonne).BackColor = vbBlue
Controls("Champ" & PersoNuméroColonne).ForeColor = vbYellow

'Pour activer la liste déroulante.
Controls("Champ" & PersoNuméroColonne).ShowDropButtonWhen = fmShowDropButtonWhenAlways

'---------------------------------------------------------------
'
'On souhaite que cette liste se modifie en fonction du contenu
'de la liste précédente. Il faut pour cela créer une série de procédures.
'Ces procédures sont à placer tout en bas du code VBA...
'
'---------------------------------------------------------------
'Sub Champ11_Change() 'Il faut connaitre le No du champ d'origine
'
'If NomBD = PersoNomBD Then PersoChamp11
'
'End Sub
'-----
'Sub Champ11_Click() 'Il faut connaitre le No du champ d'origine
'
'If NomBD = PersoNomBD Then PersoChamp11
'
'End Sub
'-----
'Sub PersoChamp11() 'Il faut connaitre le No du champ d'origine
'
'If NomBD <> PersoNomBD Then Exit Sub
'
' PersoRéfColOrigine = 11 'Il faut connaitre le No de la colonne du champ d'origine de l'évènement
' PersoNuméroColonne = 12 'Il faut connaitre le No de la colonne du champ "cascade"
'
' Controls("Champ" & PersoNuméroColonne).Clear
'
' If Controls("Champ" & PersoRéfColOrigine) = "Masculin" Then
' Controls("Champ" & PersoNuméroColonne).AddItem "Cas MA"
' Controls("Champ" & PersoNuméroColonne).AddItem "Cas MB"
' Controls("Champ" & PersoNuméroColonne).AddItem "Cas MC"
' End If
'
' If Controls("Champ" & PersoRéfColOrigine) = "Féminin" Then
' Controls("Champ" & PersoNuméroColonne).AddItem "Cas F1"
' Controls("Champ" & PersoNuméroColonne).AddItem "Cas F2"
' Controls("Champ" & PersoNuméroColonne).AddItem "Cas F3"
' End If
'
'End Sub
'---------------------------------------------------------------

Else

End If

'--------------------------------
'On fait ensuite la même chose pour la 4ème colonne à personnaliser.
'--------------------------------
'Puis pour les colonnes suivantes...
'--------------------------------
'.../...
'--------------------------------
'Et pour une autre BD.
'--------------------------------

End Sub 'NE JAMAIS SUPPRIMER CETTE LIGNE

Sub Champ11_Change() 'Il faut connaitre le No du champ d'origine

If NomBD = PersoNomBD Then PersoChamp11

End Sub

Sub Champ11_Click() 'Il faut connaitre le No du champ d'origine

If NomBD = PersoNomBD Then PersoChamp11

End Sub

Sub PersoChamp11() 'Il faut connaitre le No du champ d'origine

If NomBD <> PersoNomBD Then Exit Sub

PersoRéfColOrigine = 11 'Il faut connaitre le No de la colonne du champ d'origine de l'évènement
PersoNuméroColonne = 12 'Il faut connaitre le No de la colonne du champ "cascade"

Controls("Champ" & PersoNuméroColonne).Clear

If Controls("Champ" & PersoRéfColOrigine) = "Masculin" Then
Controls("Champ" & PersoNuméroColonne).AddItem "Cas MA"
Controls("Champ" & PersoNuméroColonne).AddItem "Cas MB"
Controls("Champ" & PersoNuméroColonne).AddItem "Cas MC"
End If

If Controls("Champ" & PersoRéfColOrigine) = "Féminin" Then
Controls("Champ" & PersoNuméroColonne).AddItem "Cas F1"
Controls("Champ" & PersoNuméroColonne).AddItem "Cas F2"
Controls("Champ" & PersoNuméroColonne).AddItem "Cas F3"
End If

End Sub

'===FIN DE LA MODIFICATION DU CODE============================================================

( Attention : Ce code ne teste pas si les données sélectionnées/saisies dans Perso3 sont compatibles avec celles de Perso2 ).

Ces modifications fonctionnent dans MMBD 5.00 qui, du coup, vient de passer en version 5.01.

A vous d'adapter cela à votre BdD. ( En cas de pb n'hésitez pas à laisser un message ici ).

Bon Courage et A+

Didier.
 

David92Fr

XLDnaute Nouveau
Re : Multi Mini BD

Merci Didier.

J'ai fait les modifications et tout marche à merveille. Merci beaucoup pour votre aide.

David
 
Dernière édition:

lmico

XLDnaute Nouveau
Multi Mini BD Customisation ?

Bonsoir Didier,

J'ai beaucoup apprécié ta MMBd, et je me suis amusé à la modifier largement, mais j'atteint les limite de ma modeste compétence sur deux points :
- En cliquant sur le bouton "Champs image" que j'utilise en format d'un de mes champs du formulaire, je souhaiterais que le fenetre explorateur s'ouvre directement dans le dossier qu regroupe toutes les photos de ma base;
- Et d'autre part, pour pouvoir trimballer cette base sur diverses machine, j'aimerais pouvoir intégrer toutes les adresses de ces photos en adresses relatives (references adresses en fonction de la position de la feuille excel de la base, et non de l'emplacement sur le PC)

Peux tu me donner un coup de main la dessus ?

Merci
 

DidierC

XLDnaute Nouveau
Re : Multi Mini BD

Bonjour Imico, le forum.

Pour tenter de répondre à ton problème, je te propose…

Sur l'onglet MMBD_Guide :
( A déprotèger au préalable - Il n'y a pas de mot de passe )

Mettre en
Cellule M2 Chemin par défaut des fichiers images
Cellule M3 D:\Mes images
Cellule M4 Chemin par défaut des fichiers attachés
Cellule M5 E:\Mes fichiers

Dévérouiller les cellules M3 et M5 ( Sinon on ne pourra pas en changer le contenu ).
( L'onglet se reprotègera automatiquement ).


Dans le code VBA du Navigateur :

Déclarer une nouvelle variable ( Au début du code du Navigateur )
Dim CheminFichiers as String

Ajouter la ligne de code dans la procédure Sub CheminImage_Click()
( Juste en dessous du Sub )
CheminFichiers = ThisWorkbook.Sheets("MMBD_Guide").Range("M3").Value

Ajouter la ligne de code dans la procédure Sub CheminFichierAttaché_Click()
( Juste en dessous du Sub )
CheminFichiers = ThisWorkbook.Sheets("MMBD_Guide").Range("M5").Value

Dans le code de la procédure Function SélectionnerFichier()
Remplacer la ligne
.lpstrInitialDir = "C:\"
par la ligne
.lpstrInitialDir = CheminFichiers


Cela devrait pouvoir répondre à ta première demande.
Pour la suite, je ne suis pas sur de bien comprendre mais peut être que ce que
je viens de te proposer te servira de piste

Bon courage et A+

Didier.

Complément d'info.
Le contenu des cellules M3 et M5 est bien évidemment à adapter en fonction des adresses des fichiers...
 
Dernière édition:

lmico

XLDnaute Nouveau
Re : Multi Mini BD

Merci et bravo :

C'est parfait : cela fonctionne parfaitement, y compris en mettant une adresse relative (..\xxx\yyy) dans les cellule M3 et M5

En revanche, je n'arrive pas à retourner une adresse relative dans la cellule cible du bouton formaté en "Image". Je n'obtiens qu'une adresse absolue du type c:\zzz\www\xxxx\yyy...

Laurent
 

Statistiques des forums

Discussions
312 684
Messages
2 090 917
Membres
104 699
dernier inscrit
Azyra