Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

création d'une base de données VBA

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

stephals

XLDnaute Nouveau
Bonjour à toutes et à tous.
Je pratique la plongée sous marine et je me suis dit, tiens je vais tout mettre sur excel. Je n'ai que ce logiciel pour faire une base de données, alors qu'il existe access...
Je me suis armé de livre vba et de dvd polykromy. Grâce à vous j'ai pu voir beaucoup d'exemples de formule VBA, de bases de données...
Ma connaissance en la matière est casi nul, mais j'ai pu créer au bout d'un an avec des interruptions, un petit quelque chose qui me plait beaucoup. C'est génial toute les possibilités de ce logiciel.
Le souci est que je place les formules sans savoir où les mettre, et là je vous avoue que ça fait 2 mois que je bloque. est-ce que les formules ne sont pas appropriées ou est-ce que je les ai mal placées ?
Je vous demande votre aide pour l'élaboration de ce petit programme. Je vous expliquerai ce que je souhaiterai faire.
Merci
 
Re : création d'une base de données VBA

Bonjour Stephals

Le souci est que je place les formules sans savoir où les mettre, et là je vous avoue que ça fait 2 mois que je bloque. est-ce que les formules ne sont pas appropriées ou est-ce que je les ai mal placées ?

Déjà la, ça me fait un peu peur 😕.

Le mieux est de déposer une ébauche de fichier sans données confidentielles (on ne demande pas toute ta base) avec les points qui te posent problème.
 
Re : création d'une base de données VBA

Salut stephals et le forum
mais j'ai pu créer au bout d'un an avec des interruptions, un petit quelque chose qui me plait beaucoup
Rappel : il n'y a ni télépathe, ni devin sur ce site, et comme tu es devant, tu bloques la vue...

Pour t'aider, il faudrait avoir une idée de ce que tu as fait et qui te plait !

Un principe général consiste à créer une feuille base de données, et une ou plusieurs autres pour la manipuler, au travers de formulaires de saisie, d'édition, de consultation ou d'impression.

Une formule n'intervient que sur la cellule qui la contient.
Une macro fait à peu près tout ce que tu veux.
A+
 
Re : création d'une base de données VBA

Merci de votre aide. Mon fichier fait 104 ko, que je ne peux pas l'envoyer pour que vous ayez une bonne idée de cette base de données.
En premier temps, je vais vous expliquer de mon mieux mes problèmes et mes souhaits.

J'ai un userform1 que j'ouvre sur la feuille "menu", les informations saisies vont dans la feuille "BD saisie"
Sur ce que j'ai réalisé il y a un bug au niveau de mon ScrollBar1 : quand je clic sur le scrollbar de mon userform1 pour aller à ma première ligne de saisie N°2 (la 1 c'est l'entête), je peux continuer à remonter sur l'entête et si je clic encore une fois dessus il me met erreur. Vous avez une astuce pour arrêter à la première ligne de saisie ?

J'ai plusieurs combobox. Au départ j'avais une feuille "liste" pour que les combobox puisent individuellement les informations dans les colonnes de cette liste. Ca a bien marché. Mais c'est pas ça que je voulais. En fait, je souhaiterai que les informations saisient dans la combobox1 s'enregistrent dans la colonne A de la feuille "liste". Et que la combobox garde les éléments de la colonne A en mémoire. Et par la suite gérer les éléments de cette colonne, par exemple supprimer ceux que je n'utilise plus.

J'ai une autre combobox qui va servir à sélectionner plusieurs plongeurs pour la même ligne de saisie. Je n'ai pas du tout trouvé d'exemples (j'ai dû mal cherché)

Il y a une zone de texte "date". (ce n'est pas la date du jour, c'est une date saisie manuellement JJ/MM/AA). Oui mettre une date dans une zone de texte c'est étrange. j'ai vu des formules concernant ce sujet, mais quand j'inscrivais la date, il me mettait une autre date. je n'ai donc pas réussi...

Il y a 2 zones de texte, "H entrée" et "H sortie". (c'est l'heure d'entrée sous l'eau et l'heure de sortie de plongée). C'est pareil je n'ai pas trouvé à forcer le format en HH:MM.
Vous verrez dans les formules des modules "initialisation" et "majlignecourt" qu'il n'y a pas la ligne 6, car je souhaiterai la réserver pour une soustraction entre H sortie et H entrée et que le résultat vienne s'incrémenter dans la ligne 6. Je n'ai pas réussi non plus.



Ca en fait des souhaits...
J'ai effacé toutes les formules qui ne fonctionnaient pas ou que j'avais mal placé pour que ça soit plus clair.
Pour la pluspart de ces problèmes il y a des formules dans ce site et des exemples. Mais je ne sais pas trop où les placer.
C'est pour ça que je fais appel à vos connaissances.

Je vais me lancer ensuite dans les tableaux croisés dynamique pour puiser les données de la BD, je n'ai pas encore mis le nez dedans, mais je vais m'y interesser plus tard...

Je vous mets dans un autre message mes modules. Si il faut autre chose n'esitez pas à me le demander. Il n'y a pas de caractères d'urgence, c'est juste pour moi et mes maux de tête. Merci à vous
 
Re : création d'une base de données VBA

Module 1

Option Explicit
Sub Affiche_formulaire()
Sheets("BD saisie").Select
'Cette procédure affiche le formulaire
'Déprotection de la feuille
ActiveSheet.Unprotect
'Test de l'existence d'éléments dans la liste.
'S'il n'y en pas, on ajoute 1 à la première cellule de la deuxième ligne.
If Range("A65532").End(xlUp).Row = 1 Then Cells(2, 1).Value = 1
'Si on se trouve dans la première ligne,
'alors la cellule active se déplace en deuxième ligne
If ActiveCell.Row = 1 Then Cells(2, 1).Select
'Si la cellule active se trouve en dessous de la liste, alors
'la cellule active se déplace sur la dernière ligne.
If ActiveCell.Row > Range("A65532").End(xlUp).Row Then Cells(Range("A65532").End(xlUp).Row, 1).Select
'Initialisation du formulaire en fonction des données de la cellule active
initialise_formulaire (ActiveCell.Row)
'Affichage du formulaire.
UserForm1.Show
End Sub
Sub initialise_formulaire(ligne As Long) 'On notera que la variable ligne est de la forme Long.
'Initialisation du formulaire.
Sheets("BD saisie").Select
With UserForm1
.UF_numero = Cells(ligne, 1).Value
.UF_date = Cells(ligne, 2).Value
.ComboBox1 = Cells(ligne, 3).Value
.UF_Hentree = Cells(ligne, 4).Value
.UF_Hsortie = Cells(ligne, 5).Value
.ComboBox2 = Cells(ligne, 7).Value
.ComboBox3 = Cells(ligne, 8).Value
.ComboBox4 = Cells(ligne, 9).Value
.UF_profondeur = Cells(ligne, 10).Value
.UF_Visibilte = Cells(ligne, 11).Value
.UF_temperature = Cells(ligne, 12).Value
.UF_courant = Cells(ligne, 13).Value
.ComboBox5 = Cells(ligne, 14).Value
.ComboBox6 = Cells(ligne, 15).Value

'Dans la mesure où un événement de mise à jour est associé au changement
'dans la barre d'outil, cette mise à jour se fait donc à la fin.
.ScrollBar1.Max = Range("A65532").End(xlUp).Row
.ScrollBar1 = ligne
End With
'Sélection de la ligne du formulaire en cas de changement
Rows(ligne).Select
End Sub


Module 2

Option Explicit

Sub majligneencours()
Sheets("BD saisie").Select
'Définition des variables
Dim ligne As Long
'Cette procédure met à jour la base de données à partir des données du formulaire.
With UserForm1
'Définition de la ligne en fonction de la valeur de la barre de défilement.
ligne = .ScrollBar1
'Attribution des valeurs aux lignes de la base de données.
Cells(ligne, 1).Value = .UF_numero * 1
Cells(ligne, 2).Value = .UF_date
Cells(ligne, 3).Value = .ComboBox1
Cells(ligne, 4).Value = .UF_Hentree
Cells(ligne, 5).Value = .UF_Hsortie
Cells(ligne, 7).Value = .ComboBox2
Cells(ligne, 8).Value = .ComboBox3
Cells(ligne, 9).Value = .ComboBox4
Cells(ligne, 10).Value = .UF_profondeur
Cells(ligne, 11).Value = .UF_Visibilte
Cells(ligne, 12).Value = .UF_temperature
Cells(ligne, 13).Value = .UF_courant
Cells(ligne, 14).Value = .ComboBox5
Cells(ligne, 15).Value = .ComboBox6


End With
End Sub
Sub protegefeuille()
'Protège la feuille en cours
Sheets("BD saisie").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub
 
Re : création d'une base de données VBA

Je vous propose aussi mes formules des "boutons de commande" si sa peut aider.
Option Explicit

Private Sub TextBox4_Change()

End Sub

Private Sub ComboBox1_Change()

End Sub

Private Sub ComboBox2_Change()

End Sub

Private Sub ComboBox6_Change()

End Sub

Private Sub CommandButton1_Click()
'Nouvel enregistrement

'Mise à jour de la ligne en cours
majligneencours
'Ajout du numéro de clef en fonction du maximum de la colonne A.
Range("A65532").End(xlUp).Offset(1, 0).Value = WorksheetFunction.Max(Range("A:A")) + 1
'Modification de la valeur maximale de la barre de défilement.
UserForm1.ScrollBar1.Max = Range("A65532").End(xlUp).Cells.Row
'Modification de la valeur en cours de la barre de défilement.
UserForm1.ScrollBar1 = Range("A65532").End(xlUp).Cells.Row
End Sub

Private Sub CommandButton10_Click()
UserForm4.Show
End Sub

Private Sub CommandButton2_Click()
'Insertion d'une nouvelle ligne

'Mise à jour de la ligne en cours
majligneencours
'Insertion d'une nouvelle ligne en reprenant le format de la ligne du dessous
Selection.Copy
Selection.Insert Shift:=xlDown
Selection.ClearContents
'Ajout dans la première cellule le numéro de la clef basé sur le max+1 de la colonne A
Cells(ActiveCell.Row, 1).Value = WorksheetFunction.Max(Range("A:A")) + 1
'Modification de la valeur maximale de la barre de défilement.
UserForm1.ScrollBar1.Max = Range("A65532").End(xlUp).Row
'Modification de la valeur en cours de la barre de défilement.
UserForm1.ScrollBar1 = ActiveCell.Row
'Initialisation du formulaire.
initialise_formulaire (Me.ScrollBar1.Value)
End Sub

Private Sub CommandButton3_Click()
If MsgBox("Confirmation de la suppression de l'enregistrement ?", 52, "Confirmation") = vbYes Then
If Range("A65532").End(xlUp).Cells.Row = 2 Then
ActiveSheet.Rows(UserForm1.ScrollBar1).Delete
UserForm1.Hide
If MsgBox("Vous avez supprimé tous les enregistrements de la liste." & Chr(13) & "Voulez-vous en créer un nouveau ?", 36, "Nouvel enregistrement") = vbYes Then
Affiche_formulaire
End If
protegefeuille
ElseIf UserForm1.ScrollBar1 < Range("A65532").End(xlUp).Cells.Row Then
ActiveSheet.Rows(UserForm1.ScrollBar1).Delete
initialise_formulaire (UserForm1.ScrollBar1)
UserForm1.ScrollBar1.Max = Range("A65532").End(xlUp).Cells.Row
Else
ActiveSheet.Rows(UserForm1.ScrollBar1).Delete
Selection.Offset(-1, 0).Select
initialise_formulaire (UserForm1.ScrollBar1 - 1)
UserForm1.ScrollBar1.Max = Range("A65532").End(xlUp).Cells.Row
End If
End If
End Sub

Private Sub CommandButton4_Click()
'Validation des données de la ligne en cours.
majligneencours
End Sub

Private Sub CommandButton5_Click()
majligneencours
UserForm1.Hide
protegefeuille
Sheets("Menu").Select
End Sub

Private Sub ListBox1_Click()

End Sub

Private Sub CommandButton7_Click()

End Sub

Private Sub CommandButton6_Click()
UserForm2.Show

End Sub

Private Sub CommandButton9_Click()
UserForm3.Show

End Sub

Private Sub ScrollBar1_Change()
'Initialisation du formulaire lié au changement de la barre de défilement.
initialise_formulaire (Me.ScrollBar1.Value)
End Sub

Private Sub UF_date_Change()

End Sub

Private Sub UF_numero_Change()

End Sub

Private Sub UserForm_Click()

End Sub
 
Re : création d'une base de données VBA

n'ésitez pas à me demander d'autres renseignements, grâce à vous je vais pouvoir aboutir à mon début de création de base de données, qui au départ me paraissais simple à élaborer, mais qu'au fur et à mesure du temps me paraissais inachevable. Par contre c'est peut-être infaisable...
A bientôt.
 
Re : création d'une base de données VBA

Re

Sur XLD, on préfère travailler sur du concret.

Sur Ci-joint.fr, tu peux poster ton fichier 🙂.

Merci pour le fichier, pas contre ce week-end, je suis full-up 😱.

Il y aura bien quelq'un pour t'aider. Sinon, pense à poser les questions au fur et à mesure 🙂.
 
Dernière édition:
Re : création d'une base de données VBA

Bonjour à tous,

Ci-joint le lien de mon fichier :
Cijoint.fr - Service gratuit de dépôt de fichiers

il n'y a pas de mot de passe pour la protection. Ce fichier n'est pas confidentiel non plus.
Ca sera effectivement plus simple de visionner la base de données.

Merci de m'accorder votre temps.
Bon appétit.
 
Re : création d'une base de données VBA

Bonjour Stephals

Bon, j'ai regardé un peu ton fichier et la je me suis dit "ton fichier est trop abouti".

Il est très dificile d'aider, surtout si tu as fait le plus gros et que cela risque d'être long à debugger.

Sinon pour ton histoire de scrollbar, il faut que tu définisses ton min à 2 et ton max au nombre de lignes dans ta BD, mais il vaut mieux en général le faire dans le Userform_Initialize (en plus avec l'auto-complétion, c'est pas trop difficile).

ex:

Code:
Private Sub UserForm_Initialize()
Me.ScrollBar1.Min = 2
Me.ScrollBar1.Max = Sheets("BD Saisie").Range("A65536").End(xlUp).Row
Me.ScrollBar1.SetFocus
Application.SendKeys ("{Home}")
UF_date.SetFocus
End Sub

Pour le reste, il faudra que tu le fasses par étape.

De plus, je te conseille de remettre ton fichier corrigé avec quelques lignes (une dizaine sans données confidentielles), car c'est plus simple pour voir le comportement en vrai des Userforms.
 
Re : création d'une base de données VBA

Bonjour MJ13,
Merci beaucoup d'avoir trouvé la solution pour mon scrollbar, vous m'enlevez une épine du pied.

Il est vrai que je me suis attaqué à du lourd.
Comme vous dites je vais procéder par étape et faire des essais à chaque manipulation.

Encore une fois merci à vous, et au site.
Stéphane
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
290
Réponses
6
Affichages
158
Réponses
4
Affichages
138
Réponses
10
Affichages
172
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…