Bonjour,
J’ai deux tableaux dans deux feuilles différentes mais qui ont en rapport un numéro de facture identique.
J’essaie de mettre en place une macro en VBA, qui récupère une valeur saisie dans une cellule, si cette dernière est modifiée et recopier cette valeur dans une autre feuille en fonction du numéro de facture lié à la ligne modifié dans la 1ère feuille.
Dans la feuille « Balance clients » j’écris le code suivant :
Dans un module, je saisie le code ci-dessous :
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 Public valeurCelluleModifiee As String Public cleRecherche As String Public Sub Worksheet_Change(ByVal Target As Range) Dim plageFacture As Range valeurCelluleModifiee = "" cleRecherche = "" Définition de la plage qui est susceptible dêtre modifiée Set plageFacture = Range("W6:W5000") Si plusieurs cellules sont modifiées, ne rien faire If Target.Cells.Count > 1 Then Exit Sub End If Si une cellule de la plage est modifiée If Not Application.Intersect(plageFacture, Range(Target.Address)) Is Nothing Then valeurCelluleModifiee = Target.Value Récuperer la valeur saisie après modification cleRecherche = ActiveCell.Offset(0, -13).Value Récupérer le numéro de facture Cette MsgBox est là juste pour vérifier si les données sont correctes durant la construction de la macro MsgBox "La cellule " & cleRecherche & " a été modifiée et la valeur modifiée est : " & valeurCelluleModifiee Appel de la fonction de recherche et retranscription de la valeur Call rechercheValeur(cleRecherche, 8, valeurCelluleModifiee) Si aucune modification nest faite, on quitte Else Exit Sub 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 Function rechercheValeur(cleATrouver As String, deplacementCellule As Integer, valeurAModifier As String) Dim plage As Range Je sélectionne la feuille ou la valeur sera saisie ainsi que la plage de recherche du numéro de facture Application.Goto ActiveWorkbook.Sheets("Transco Factures").Range("A1:A5000") For Each Cell In Selection If Cell.Value = cleATrouver Then Je me positionne à lendroit où la valeur sera recopiée et je copie la valeur ActiveCell.Offset(0, deplacementCellule).Value = valeurAModifier End If Next Cell End Function
Anomalies constatées :
• Si je saisi une valeur dans une cellule de la plage « plageFacture » et que je tape « entrée » c’est le numéro de facture de la ligne en dessous qui est récupérer
• Il ne trouve pas la facture dans la deuxième feuille « Transco Factures » et ne saisit pas la valeur saisie dans la première feuille « Balance clients »
Pourriez vous m’aider, SVP, car je « bug » ?
Vous en remerciant par avance.
Partager