Problème avec une formule insérée via VBA (#NOM? jusqu'à double-cliquer dan
I
Bonjour à tous,
Je rencontre un problème en insérant une formule dans une cellule Excel via VBA. Voici les détails de mon cas :
- Je souhaite insérer une formule de recherche dans une colonne D, basée sur les données de la colonne C qui se calcule automatiquement dés que la cellule C est renseignée.
Exemple de formule :=RECHERCHEV(C2,'F2-Ligne budgétaire'!C:D;2;0). - J'ai écrit un script VBA qui insère cette formule automatiquement lorsque la cellule de la colonne C est modifiée. Voici mon code VBA actuel : Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("C3:C1000")) Is Nothing Then
If Target.Count = 1 Then
If Not IsEmpty(Target.Value) Then
Target.Offset(0, 1).FormulaLocal = "=RECHERCHEV(C" & Target.Row & ",'F2 Ligne budgétaire'!C:D;2;0)"
Else
Target.Offset(0, 1).ClearContents
End If
End If
End If - End Sub
- Le problème :
- Lorsque le VBA insère la formule, le résultat dans la cellule est
#NOM?. - Si je double-clique dans la cellule (comme pour modifier manuellement) et que je valide, le résultat devient correct.
- Même en forçant un recalcul avec
Application.Calculate, cela ne corrige pas immédiatement le problème
Questions :
- Comment éviter le problème de recalcul ou de double-clique ?
- Comment remplir la cellule automatiquement sans insérer la formule visible ?
A
Bonjour,
Votre code modifié:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Sortie
Application.EnableEvents = False
If Not Intersect(Target, Me.Range("C3:C1000")) Is Nothing Then
If Target.Count = 1 Then
If Not IsEmpty(Target.Value) Then
Dim ws As Worksheet
Dim result As Variant
' Référence à la feuille cible
Set ws = ThisWorkbook.Worksheets("F2 Ligne budgétaire")
' Effectuer la recherche
result = Application.VLookup(Target.Value, ws.Range("C:D"), 2, False)
' Insérer le résultat directement
If Not IsError(result) Then
Target.Offset(0, 1).Value = result
Else
Target.Offset(0, 1).Value = "Non trouvé"
End If
Else
Target.Offset(0, 1).ClearContents
End If
End If
End If
Sortie:
Application.EnableEvents = True
End SubCdlt
bonjour,
tu as une erreur de syntaxe dans ta formule :
si ton séparateur de paramètres dans la formule est ; mets ceci
Target.Offset(0, 1).FormulaLocal = "=RECHERCHEV("& target.address & ";'F2 Ligne budgétaire'!C:D;2;0)"si ton séparateur de paramètres dans la formule est , mets ceci
Target.Offset(0, 1).FormulaLocal = "=RECHERCHEV("& target.address & ",'F2 Ligne budgétaire'!C:D,2,0)"mais pas un mélange des deux comme dans ta formule
Target.Offset(0, 1).FormulaLocal = "=RECHERCHEV(C" & Target.Row & ",'F2 Ligne budgétaire'!C:D;2;0)"