Bonjour,
Je crée actuellement une application pour mon travail qui consiste à enregistrer toutes les informations que je vais glaner lors de mes séances de prospection.
J'ai crée deux Userforms se référant à deux onglets différents de ma feuille : un pour la saisie de nouvelles fiches client (Creation_FC), et l'autre pour la saisie de mes fiches prospection (Creation_FP). Mes deux feuilles (nommées 'Clients' et 'Prospection') sont communes par leurs champs 'Code client' et 'Nom société', en colonnes A et B
Concernant mon Userform clients (Creation_FC) qui permet de créer, modifier mes informations prospects/clients, aucun souci d'incrémentation quand je crée de nouvelle fiches, je parviens bien à utiliser la commande ".Range("a65536").End(xlUp).Row + 1"
J'ai tenté d'utiliser le même procédé pour l'autre Userform (Creation_FP) mais je rencontre un souci de controle dont je ne me dépètre pas.
Dans la feuille correspondante, j'ai, par exemple, des colonnes 'Mode de contact 1', 'Type 1', 'Fonction 1', 'Mode de contact 2', 'Type 2', 'Fonction 2'
Mes manipulations sont les suivantes (à chaque nouvel enregistrement, je souhaite ne pas écraser les données précédemment écrites) :
- je sélectionne mon client via une ComboBox, puis je saisis mes infos de 'Mode de contact', 'Type', 'Fonction', puis j'enregistre (jusque là, tout va bien), puis je vide mes champs (mes données sont bien enregistrées, aucun souci)
- je re-sélectionne le même client, puis, pour une nouvelle saisie dans les MEMES champs, j'indique dans mon code -- "If IsEmpty(Range("D2 : D1000")) Then .. -- ne pas réécrire dans les champs 'Mode de contact 1', 'Type 1', 'Fonction 1' mais plutôt dans les champs 'Mode de contact 2' 'Type 2', 'Fonction 2'.
-> Le code que j'ai écris fonctionne très bien lorsqu'il y a 1 seul enregistrement dans ma feuille, mais pas quand j'agis sur une autre ligne.
Je pense que le souci provient surement de mon Range, puisqu'il est défini sur la colonne D entière, donc la condition est toujours TRUE pour les autres enregistrements, mais je ne vois pas comment faire un 'Select' de la ligne en cours de modification, puis modifier le pointeur en conséquence.
Bien entendu, je suis débutant en programmation car mon cœur de métier est plutôt son pendant, çàd l'administration systèmes et réseaux, donc veuillez pardonner mon manque de concision dans mes explications.
D'avance, merci de vos suggestions. La solution doit être surement à votre portée d'experts, mais là, je sèche depuis 2 jours de recherches et de tests dans tout les sens :/
Ci-après, un petit bout de code qui pourra peut-être vous éclairer :
Si besoin de poster le projet (330Ko), dites le moi car j'espère ne pas avoir oublié d'informations importantes qui pourraient vous aider à y voir plus clair.
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 Private Sub CommandButton1_Click() 'Affiche les informations de la ComboBox de recherche Dim L As Integer Set Ws1 = Sheets("Prospection") L = ComboBox100.ListIndex + 2 TextBox1.Value = Ws1.Cells(L, 1) 'Code client TextBox2.Value = Ws1.Cells(L, 2) 'Société End sub Private Sub Save_Button_Click() Dim Ctrl As Control Dim Data1FieldEmpty As Boolean Dim R As Integer Dim L1 As Integer Set Ws1 = Sheets("Prospection") If MsgBox("Confirmez vous l'ajout de ces nouvelles données de prospection ?", vbYesNo, "Enregistrement de la saisie") = vbYes Then With Me L1 = Ws1.Range("a65536").End(xlUp).Row For Each Ctrl In Creation_FP.Controls R = Val(Ctrl.Tag) If R > 0 Then Ws1.Cells(L1, R) = Ctrl Next End With ' ---- Verification si Data1 est vide ---- If IsEmpty(Range("D2 : D1000")) Then 'La colonne D représente "Date 1", date fixée dans par défaut dans une TextBox Data1FieldEmpty = False 'Sauvegarde du 1er enregistrement Ws1.Range("E" & L1).Value = ComboBox1 'Rempli la colonne E, nommée Mode de contact 1 Ws1.Range("F" & L1).Value = ComboBox2 'Rempli la colonne F, nommée Type 1 Ws1.Range("J" & L1).Value = ComboBox3 'Rempli la colonne J, nommée Fonction 1 Else Data1FieldEmpty = True MsgBox "Les champs Mode de contact 2, Type 2, Fonction 2" seront remplis", vbInformation 'Sauvegarde du 2ème enregistrement (dans le but de ne pas écraser les premières données saisies) Ws1.Range("R" & L1).Value = ComboBox1 'Rempli la colonne R, nommée Mode de contact 2 Ws1.Range("S" & L1).Value = ComboBox2 'Rempli la colonne S, nommée Type 2 Ws1.Range("W" & L1).Value = ComboBox3 'Rempli la colonne W, nommée Fonction 2 MsgBox "La fiche de prospection a été mise à jour pour ce client", vbExclamation, "Enregistrement effectué" For Each Ctrl In Me.Controls If TypeName(Ctrl) = "TextBox" Then Ctrl.Text = "" If TypeName(Ctrl) = "ComboBox" Then Ctrl.Text = "" Next Ctrl End If End If End If End If End Sub
D'avance, grand merci de vos réponses
Partager