VBA Excel : base de donnée courrier

Résolu/Fermé
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 - 2 août 2012 à 19:53
Pit3ull Messages postés 18 Date d'inscription jeudi 8 novembre 2012 Statut Membre Dernière intervention 21 novembre 2012 - 9 nov. 2012 à 15:45
Bonjour,

Je voudrais créer une base de donnée de courriers recommandés pour le boulot.

J'ai fait un tableau excel qui ressemble à ça
http://img11.hostingpics.net/pics/937530Capturedcran20120802194617.png


En bas, une partie fixe où l'on rempli les données qui iront s'insérer dans le tableau du dessus en cliquant sur le bouton.

Je voudrait que les cellules de la partie du haut ne soient rentrées que par le formulaires du bas.
J'ai mis le formulaire à partir de la ligne 3000 et j'ai fractionné les fenêtres. Je suis en train de pécher sur le gestionnaire d'erreur. En cliquant sur le bouton, les données saisie vont se rajouter sous la dernière ligne du tableau écrite. Sauf que, je voudrais bloquer le processus si les cellules B30001, B3003 et B3004 sont vides et obliger l'utilisateur à les compléter pour valider la saisie.

Il y a peur être mieux comme méthode pour enregistrer ces données. Je suis preneur de tout conseils.

Pour info, voici la macro que j'ai affectée au bouton (et que je n'ai pas fini du coup vu que je pèche lol)

Sub Macro2()

On Error GoTo ErreurNum
On Error GoTo ErreurDateEnvoi
On Error GoTo ErreurObjet

Dim numero As Long
Dim objet As String
Dim dateEnvoi As Date
Dim dateNotif As Date

    'Copie des données du formulaire situé en bas
    Range("B3001:B3006").Select
    Application.CutCopyMode = False
    Selection.Copy
    
    'gestionnaire d'erreur
    numero = Range("B3001")
    objet = Range("B3003")
    dateEnvoi = Range("B3004")
    dateNotif = Range("B3005")
    
    If numero = "" Then
    GoTo ErreurNum
    
    End If
    
ErreurNum = MsgBox("Saisir un numéro pour continuer")
ErreurDateEnvoi = MsgBox("Saisir une date d'envoi pour continuer")
ErreurObjet = MsgBox("Saisir un objet pour continuer")

Exit Sub
    
    
    'Test pour determiner la ligne où coller les infos dans le Tableau'
Sheets("Base de données").Select
valeurA2 = Range("A2")
If valeurA2 = "" Then
Range("A2").Select
Else
Range("B2999").Select
Selection.End(xlUp).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If

'Memorise le N° de la ligne où coller les données'
ligne_de_base = ActiveCell.Row
    

'Collage avec transposition
Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _
        , Transpose:=True
        
        
'Rendre vierge le formulaire'
Range("B3001:B3006").Select
Selection.ClearContents
Range("B3002").Select
ActiveCell.FormulaR1C1 = "BLABLA"
'Range("B3001").Select
End Sub


En vous remerciant grandement pour l'aide que vous pourrez m'apporter.
A voir également:

9 réponses

bonjour,

une proposition juste pour répondre au besoin

'gestionnaire d'erreur
If Range("B3001").Value = "" Then
    MonMessage = MonMessage & "un numéro" & Chr(13)
End If
If Range("B3003").Value = "" Then
    MonMessage = MonMessage & "un objet" & Chr(13)
End If
If Range("B3004").Value = "" Then
    MonMessage = MonMessage & "une date d'envoi" & Chr(13)
End If
If Range("B3005").Value = "" Then
    MonMessage = MonMessage & "une date de notification" & Chr(13)
End If
    
    
If MonMessage <> "" Then
    MsgBox "Vous devez saisir" & Chr(13) & MonMessage & "pour continuer"
    Exit Sub
End If
à insérer entre la déclaration des variable et 'Copie des données du formulaire situé en bas . Toute la partie gestion d'erreur peut être supprimée.
Si vous tenez à utiliser On Error, l'aide VBA est bien documentée.

Pour obliger l'utilisateur à rentrer les données en B3001,... , protégez la feuille (sans oublier de définir la plage (B3001 à B3005) comme restant modifiable)

la macro commencera alors par:
ActiveSheet.Unprotect "MonMotdePasse"
et se terminera par
ActiveSheet.Protect "MonMotdePasse"


Bonne suite
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
3 août 2012 à 08:19
Merci beaucoup, je vais essayer ça.

C'est super sympa. Merci beaucoup
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
6 août 2012 à 17:30
La réponse pour le gestionnaire d'erreur fonctionne. Merci beaucoup !

Mais je suis confronté à un autre problème... je le poste ici au lieu de créer un nouveau sujet, puisque ça concerne le même fichier.

Le fractionnement de fenêtre avec le formulaire situé très bas dans la feuille est ce que voulait le demandeur, mais, les utilisateurs préférèrent remplir via userform. J'ai donc créé un userform avec des zones de texte pour remplir tout les champs et un ComboBox pour sélectionner le destinataire. Mon souci c'est que je n'arrive pas à alimenter ma ComboBox. J'ai cherché sur le net et essayé les différentes méthodes proposées mais ma liste reste vide. J'ai une feuille "Adresses" que je veux me servir comme source pour cette liste.

Voici mon code :
Private Sub UserForm1_Activate()
Sheets("Adresses").Select
Me.ListeDestinataire.RowSource = "a3:" & Range("a3").End(xlDown).Range
End Sub


ListeDestinataire étant le nom que j'ai donné au ComboBox

(la première adresse commence en A3 car les deux première ligne sont utilisées par des titres)

En vous remerciant par avance.
0
bonjour,

Me.ListeDestinataire.RowSource = "a3:" & Range("a3").End(xlDown).Address

S'il y a autre chose, ouvrez un nouveau posr .

Bonne suite
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
7 août 2012 à 08:24
J'ai déjà essayé. J'ai même essayé de créer une variable

Dim SourceDestinataire as Range

Me.ListeDestinataire.RowSource = SourceDestinataire


Mais rien à faire, dès que je fais dérouler ce ComboBox, il reste vide

Merci beaucoup, je vais créer une nouveau sujet.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 214
7 août 2012 à 09:24
Bonjour,

essaie avec .list qui pose moins souvent de problème :
Sheets("Adresses").Select
ListeDestinataire.List = Range("A3:A" & Cells(Application.Rows.Count, 1).End(xlUp).Row).Value

eric
0
sifusalade Messages postés 135 Date d'inscription samedi 21 janvier 2012 Statut Membre Dernière intervention 16 juillet 2021 7
7 août 2012 à 09:29
Cela ne marche pas. Merci

PS : Je ne sais pas comment clôturer le sujet, j'ai créer une autre sujet ici

https://forums.commentcamarche.net/forum/affich-25777033-vba-excel-alimenter-combobox#p25777280
0
VB.net Raiii
9 nov. 2012 à 15:33
Salut clique sur ta combobox et dans le menu des propriete a droite y'a un truc du genre Items...
Tu as juste a les rajouter !
0
Pit3ull Messages postés 18 Date d'inscription jeudi 8 novembre 2012 Statut Membre Dernière intervention 21 novembre 2012 1
Modifié par Pit3ull le 9/11/2012 à 15:47
Bonjour,
Je ne sais pas si j'ai bien compris ton problème, mais si c'est le cas, je pense que ce tuto va le résoudre : http://www.polykromy.com/blog/excel-base-de-donnees.htm (regarde la vidéo en bas) si tu es intéressé voici le tuto pour le faire : http://www.polykromy.com/blog/d1.html

Il y plusieurs vidéos, à la fin de la lecture, il suffit de cliquer sur suivant en haut de la page, pour passer à l'étape suivante :)
0