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 :

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 n’est faite, on quitte 
Else
Exit Sub
End If
 
End Sub
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
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 à l’endroit 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.