Bonjour,
Je me suis aidé d'un modèle pour réaliser ma macro, mais seule la cellule A3 est sélectionnée et se remplie.
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, c'est-à dire que le tableau se remplisse tant que le formulaire n'est pas fermé.
Je n'arrive pas à voir la différence avec mon exemple.
Ci-joint, ma réalisation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Private Sub ANNULER_Click() 'bouton ANNULER SaisieInfos.Hide 'cache le formulaire' End Sub
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 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
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 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##################################################################################################################################################################################################
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 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
Ci-joint, l'exemple qui m'a permis de réaliser le modèle présenté ci-dessous :
Début EXEMPLE :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Private Sub FIN_Click() SaisieInfos.Hide End Sub
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 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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Private Sub TypeContrat_Change() If TypeContrat <> "CDI" Then 'Me.DateFin.Visible = True Me.EtiqDateFin.Visible = True End If End SubFin 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 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
Quelqu'un peut-il corriger cette macro, dans le même type que l'exemple modèle ?
Vous en remerciant par avance, pour la contribution apportée.
Cordialement
Partager