Excel 2007 / VBA - UserForm et ses boutons

Murmillius - 15 févr. 2013 à 09:03
 Murmillius - 15 févr. 2013 à 15:04
Bonjour à tous !

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.

Je vous joint mon fichier excel : http://cjoint.com/?CBpjdwCT2QZ

Merci de votre aide !

Cordialement

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
15 févr. 2013 à 13:33
PS : Perso, je ne prends pas le risque de télécharger un classeur Excel avec macro.
0
Salut Jack

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
0
Je viens aux nouvelles !

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.


Bon courage,

Cdt
0
Rejoignez-nous