Je viens vous trouvez dans ce temple du codage car je sèche completement sur mon code VBA pour l'utilisation d'un UserForm que j'ai créé.
Tout d'abord, je n'ai pas un niveau très élevé en VBA mais grace à internet, en puisant à quelques endroits, j'ai réussi à créer mon UserForm souhaité à quelques problèmes près.
J'expose le contexte :
Je souhaites créer une BDD qui a pour but de stocker des messages audios (pas le fichier, juste le texte).
Cette BDD sera utilisée par de nombreuses personnes et leur demandera un petit effort en + à fournir pour remplir cette BDD. C'est pourquoi je souhaites automatiser cette BDD le + possible.
Venons en au but :
Afin d'avoir un suivi de qui a fait quoi sur cette BDD (modif message, ajout, suppression...), j'ai créé une feuille en + ayant pour but de répertorier le passage de l'utilisateur (si modification du fichier excel)
Ainsi j'ai créé un bouton "sauvegarder" qui a pour but d'afficher à l'utilisateur un formulaire lui demandant de remplir:
- l'application modifiée
- le type de modif
- description de la modif
Aparaitrons aussi dans le tableau la date et l'ID de l'utilisateur.
Actuellement le formulaire marche à 2 ou 3 problèmes près.
Je peut :
- Entrer une nouvelle modification et la stocker dans le tableau
- quitter les formulaire
Mes problèmes:
- Je voudrais pouvoir en appuyant sur le bouton "Ajout Supplémentaire" ajouter de nouveau une modification de message tout en stockant la précédente remplie par l'utilisateur(une sorte de relance de UserForm avec stockage).
- Je voudrais pouvoir sauvegarder tout le document excel lorsque l'utilisateur appuie sur le bouton "Valider"
- J'ai commencé à créer un systeme de modification de la modif effectuée par l'utilisateur stockée sur le tableaux lors d'un double-click sur la ligne en question. Lors de ce double click, le formulaire doit réapparaitre avec les infos enregistrées et prêtes à être modifiées. Or ça ne marche pas et l'erreur est introuvable pour moi.
Dans le code j'ai donc:
- Mon UserForm (UserForm1)
- Ma feuille (MAJ)
- Un module pour lancer UserForm1 (Sauvegarde_et_infos_utilisteur)
- Un module pour la macro du bouton "Ajout Supplémentaire".
J'aimerais donc être aiguillé pour trouver les réponses à mes problèmes.
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 15 févr. 2013 à 13:30
Salut
VBA est un langage dérivé de VB6 : Catégorie modifiée
Pas compris grand chose à ton descriptif détaillé, mais trop détaillé.
En effet, on ne sait rien de la manière dont tu comptes enregistrer les fiches. Dans une feuille Excel ou dans une vraie DB ?
Essaye de poser des questions plus techniques. Là, on se perd à essayer de comprendre l'organisation de ton projet et ce n'est pas le but.
Exemple : "ajouter de nouveau une modification de message" ne me dit pas grand chose.
Seule chose à laquelle je peux répondre :
"Je voudrais pouvoir sauvegarder tout le document excel lorsque l'utilisateur appuie sur le bouton "Valider""
Ce qui équivaut à cliquer sur l'icone "disquette" ou à faire menu Fichier+Enregistrer.
Tu découvriras le code ce cette fonction est enregistrant une macro pendant que tu fais la manip à la main.
Ça doit être bêtement ActiveWorkbook.Save
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on le partage (Socrate)
Merci pour ton aide pour la sauvegarde du fichier, ça marche très bien ;)
Tu as raison je me suis trop étendu sur le sujet et moins sur la technique. Je vais aller directement au but.
Voici le code de mon formulaire :
Option Explicit
Private Sub btnQuitter_Click()
Unload Me
End Sub
Private Sub btnValider_Click()
Dim Ligne As Long
'Ajout ou modification d'une ligne d'enregistrement
With ThisWorkbook.Sheets(1)
If Modification Then
Ligne = ActiveCell.Row
Else
'Déterminer la première ligne libre du tableau
Ligne = .Range("B65536").End(xlUp).Row + 1
End If
'MAJ de la ligne d'enregistrement
'date
.Cells(Ligne, 2) = Now
'nom utilisateur
.Cells(Ligne, 3) = Application.UserName
'application modifiée
.Cells(Ligne, 5) = ComboBox1
'type modification
.Cells(Ligne, 7) = ComboBox2
'description
.Cells(Ligne, 9) = TextBox2
'Bordure de cellules
.Range(.Cells(Ligne, 2), .Cells(Ligne, 9)).Borders.LineStyle = xlContinuous
SauvegardeFichierXL
End With
Unload Me
End Sub
Private Sub CommandButton1_Click()
MacroNewModif
End Sub
Private Sub UserForm_Initialize()
Dim i As Byte
Dim Ligne As Long
With Label5
UserForm1.Label5.Caption = Application.UserName
End With
'Chargement du ComboBox
With ComboBox1
.AddItem "611"
.AddItem "614"
.AddItem "618"
.AddItem "634"
.AddItem "1022"
.AddItem "1034"
.AddItem "1061"
.AddItem "1064"
.AddItem "1068"
.AddItem "2020"
ComboBox1.ListIndex = 0
End With
With ComboBox2
.AddItem "Ajout de message"
.AddItem "Modification de message"
.AddItem "Supression de message"
.AddItem "Evolution de message"
ComboBox2.ListIndex = 0
End With
If Modification Then
'Déterminer la première ligne libre du tableau
Ligne = ActiveCell.Row
'Créer la nouvelle ligne d'enregistrement
If Cells(Ligne, 2) <> "" Then
With ThisWorkbook.Sheets(1)
Label1.TextAlign = .Cells(Ligne, 3)
ComboBox1.Text = .Cells(Ligne, 5)
ComboBox2.Text = .Cells(Ligne, 7)
TextBox2.TextAlign = .Cells(Ligne, 9)
End With
End If
End If
Me.Caption = IIf(Modification, "Modification...", "Nouvelle ligne...")
End Sub
La macro MacroNewModif est liée au CommandButton1_Click
Code du module "Nouvelle modification"contenant la macro MacroNewModif:
Option Explicit
Public NewModif As Long
Sub MacroNewModif()
NewModif = NewModif + 1
Unload UserForm1
UserForm1.Show
End Sub
Je voudrais que la macro MacroNewModif me relance le formulaire pour une nouvelle saisie tout en stockant les données entrées précedement par l'utilisateur. (stock > relance du formulaire)
les données sont stockées dans un tableau excel contenant les colonnes :
- date
- modificateur
- application modifiée
- type de modification
- description de la modification
C'était très bête, j'ai trouvé une solution completement différente
j'ai tout simplement utilisé le code du bouton "Valider" et adapté celui ci à ce que je voulais et ça marche !
Private Sub CommandButton1_Click()
Dim Ligne As Long
'Ajout ou modification d'une ligne d'enregistrement
With ThisWorkbook.Sheets(1)
If Modification Then
Ligne = ActiveCell.Row
Else
'Déterminer la première ligne libre du tableau
Ligne = .Range("B65536").End(xlUp).Row + 1
End If
'MAJ de la ligne d'enregistrement
'date
.Cells(Ligne, 2) = Now
'nom utilisateur
.Cells(Ligne, 3) = Application.UserName
'application modifiée
.Cells(Ligne, 5) = ComboBox1
'type modification
.Cells(Ligne, 7) = ComboBox2
'description
.Cells(Ligne, 9) = TextBox2
'Bordure de cellules
.Range(.Cells(Ligne, 2), .Cells(Ligne, 9)).Borders.LineStyle = xlContinuous
End With
End Sub
J'ai trouvé ce qu'il m'interessai, je ne vous dérange plus.