Application de prospection VBA - Sélection d'une ligne en cours de modification avec RANGE
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 :
Code:
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 |
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.
D'avance, grand merci de vos réponses