Bonjour,

Ci-joint, un exemple qui m'a permis de réaliser le modèle présenté ci-dessous :

[B]Début EXEMPLE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
Private Sub FIN_Click()
SaisieInfos.Hide
End Sub
 
Private Sub OK_Click()
Dim Décalage As Integer
'Vérification de la saisie des différentes informations'
If NomPrenom = "" Or DateEmbauche = "" Or Salaire = "" Then
MsgBox "VEUILLEZ SAISIR TOUTES LES INFORMATIONS"
Else
If TypeContrat <> "CDI" And DateFin = "" Then
MsgBox "VEUILLEZ SAISIR LA DATE DE FIN DE CONTRAT"
Else
'Sélection de la feuille Données'
Sheets("Salariés").Select
'si la la base de données est vide, placer les informations à partir de A2'
If Range("a2").Value = "" Then
Décalage = 0
Range("a2").Select
Else
'Positionnement sur curseur sur la première cellule vide
Décalage = 1
Position = Range("A1").End(xlDown).Address
Range(Position).Select
Range("A1").End(xlDown).Select
End If
'Mise à jour de la base de données
ActiveCell.Offset(Décalage, 0).Range("a1").Select
ActiveCell.Value = Usine
ActiveCell.Offset(0, 1).Range("A1").Select
ActiveCell.Value = Service
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = NomPrenom
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = TypeContrat
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = CDate(DateEmbauche.Value)
ActiveCell.Offset(0, 1).Range("a1").Select
If TypeContrat <> "CDI" Then ActiveCell.Value = CDate(DateFin.Value)
ActiveCell.Offset(0, 1).Range("a1").Select
ActiveCell.Value = CCur(Salaire)
'retour à la feuille Listes'
Sheets("Listes").Select
'Me.DateFin.Visible = False
Me.EtiqDateFin.Visible = False
NomPrenom = ""
DateEmbauche = ""
Salaire = ""
DateFin = ""
End If
End If
End Sub
 
Private Sub TypeContrat_Change()
If TypeContrat <> "CDI" Then
    'Me.DateFin.Visible = True
    Me.EtiqDateFin.Visible = True
End If
End Sub
 
Private Sub UserForm_Activate()
'alimenter la liste Usine'
Dim DerUsine As String
DerUsine = Range("G2").End(xlDown).Address
Usine.RowSource = ("G2:") & DerUsine
Usine.ListIndex = 0
'alimenter la liste Service'
Dim DerService As String
DerService = Range("H2").End(xlDown).Address
Service.RowSource = ("H2:") & DerService
Service.ListIndex = 0
'alimenter la liste TypeContrat'
Dim DerTypeContrat As String
DerTypeContrat = Range("I2").End(xlDown).Address
TypeContrat.RowSource = ("I2:") & DerTypeContrat
TypeContrat.ListIndex = 0
'masquer le textBox DateFin et son étiquette'
'Me.DateFin.Visible = False
Me.EtiqDateFin.Visible = False
End Sub
Fin EXEMPLE



Je me suis aidé de ce modèle pour réaliser ma macro, mais je n'arrive pas à résoudre ce problème :
L'entête du tableau commence dans la cellule A2. La cellule A3 se remplie, mais seulement la cellule A3 (pas les suivantes).
Je souhaiterais que si la cellule A3 est remplie, sélectionne A4 et remplie A4, si la cellule A4 et remplie, sélectionne A5 et remplie, etc...
Qu'est-ce qui cloche par rapport à l'exemple ci-dessous, qui fonctionne comme je le souhaiterais.
Je n'arrive pas à voir le problème.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
 
Private Sub ANNULER_Click()
'bouton ANNULER
SaisieInfos.Hide 'cache le formulaire'
End Sub
 
Private Sub FERMER_Click()
'Ferme le formulaire après demande de confirmation'
If MsgBox("Confirmez-vous la fin de la saisie ?", vbQuestion + vbYesNo) = vbYes Then
Unload Me 'supprime le formulaire de la mémoire'
End If
End Sub
 
Private Sub OK_Click()
'bouton OK
Dim Décalage As Integer
'Sélection de la feuille de données'
Sheets("Données").Select
'si la base de données est vide, placer les informations à partir de A2'
If Range("A2").Value = "" Then
Décalage = 0
Range("A2").Select
Else
'positionnement sur curseur de la première cellule vide'
Décalage = 1
Position = Range("A1").End(xlDown).Address
Range(Position).Select
Range("A1").End(xlDown).Select
End If
'Mise à jour de la base de données'
ActiveCell.Offset(Décalage, 0).Range("A1").Select
ActiveCell.Value = Distributeur
ActiveCell.Offset(0, 1).Range("A1").Select
End Sub
 
Private Sub Userform_Activate()
'alimenter la liste Distributeur
Dim DerDistributeur As String
DerDistributeur = Range("B2").End(xlDown).Address 'définition de l'adresse du dernier Distributeur de la liste'
Distributeur.RowSource = ("B2:") & DerDistributeur 'attribution des données source à la ComboBox Distributeur'
Distributeur.ListIndex = 0 'sélection par défaut du premier élément de la liste'
End Sub

Quelqu'un peut-il corriger cette macro, dans le même type que l'exemple source ?
Vous en remerciant par avance.

Cordialement.