Donc, fondamentalement, je veux écrire une formule qui vérifie une condition, et si cette condition est remplie, je veux coller une ligne de texte spécifique dans une cellule différente. Je dois noter que je ne veux pas que la formule existe dans la cellule dans laquelle je veux coller une valeur. Ainsi, par exemple, si je veux coller une valeur dans B5, je ne veux pas que la formule soit dans la cellule B5 ...
L’approche suivante utilise une solution de contournement décrite ici et ici pour activer une fonction de feuille de calcul définie dans VBA pour définir la valeur d'une autre cellule.
La fonction personnalisée stocke dans des variables globales l'adresse de la cellule cible et la valeur sur laquelle cette cellule doit être définie. Ensuite, une macro qui est déclenchée lorsque la feuille de calcul recalcule lit les variables globales et définit la cellule cible sur la valeur spécifiée.
L'utilisation de la fonction personnalisée est simple:
=SetCellValue(target_cell, value)
où target_cell
est une référence de chaîne à une cellule de la feuille de calcul (par exemple, "A1") ou une expression qui correspond à une telle référence. Cela inclut une expression telle que =B14
où la valeur de B14 est "A1". La fonction peut être utilisée dans n'importe quelle expression valide.
SetCellValue
renvoie 1 si la valeur est correctement écrite dans la cellule cible et 0 sinon. Tout contenu précédent de la cellule cible est écrasé.
Trois morceaux de code sont nécessaires:
SetCellValue
lui-mêmeIsCellAddress
pour vérifier que target_cell
est une adresse de cellule valide.Ce code doit être collé dans un module standard inséré dans le classeur. Le module peut être inséré via le menu de l'éditeur Visual Basic, accessible en sélectionnant Visual Basic
dans l'onglet Developer
du ruban.
Option Explicit
Public triggerIt As Boolean
Public theTarget As String
Public theValue As Variant
Function SetCellValue(aCellAddress As String, aValue As Variant) As Long
If (IsCellAddress(aCellAddress)) And _
(Replace(Application.Caller.Address, "$", "") <> _
Replace(UCase(aCellAddress), "$", "")) Then
triggerIt = True
theTarget = aCellAddress
theValue = aValue
SetCellValue = 1
Else
triggerIt = False
SetCellValue = 0
End If
End Function
Ce code doit être inclus dans le code spécifique à la feuille de calcul dans laquelle vous utiliserez SetCellValue
. La méthode la plus simple consiste à cliquer avec le bouton droit de la souris sur l'onglet de la feuille de calcul dans la vue Home
, de sélectionner View Code
, puis de coller le code dans le volet de l'éditeur qui apparaît.
Private Sub Worksheet_Calculate()
If Not triggerIt Then
Exit Sub
End If
triggerIt = False
On Error GoTo CleanUp
Application.EnableEvents = False
Range(theTarget).Value = theValue
CleanUp:
Application.EnableEvents = True
Application.Calculate
End Sub
Ce code peut être collé dans le même module que le code SetCellValue
.
Function IsCellAddress(aValue As Variant) As Boolean
IsCellAddress = False
Dim rng As Range ' Input is valid cell reference if it can be
On Error GoTo GetOut ' assigned to range variable
Set rng = Range(aValue)
On Error GoTo 0
Dim colonPos As Long 'convert single cell "range" address to
colonPos = InStr(aValue, ":") 'single cell reference ("A1:A1" -> "A1")
If (colonPos <> 0) Then
If (Left(aValue, colonPos - 1) = _
Right(aValue, Len(aValue) - colonPos)) Then
aValue = Left(aValue, colonPos - 1)
End If
End If
If (rng.Rows.Count = 1) And _
(rng.Columns.Count = 1) And _
(InStr(aValue, "!") = 0) And _
(InStr(aValue, ":") = 0) Then
IsCellAddress = True
End If 'must be single cell address in this worksheet
Exit Function
GetOut:
End Function
Supposons que vous souhaitiez que le texte "Texte A" apparaisse dans la cellule C5 si la cellule B5 contient la valeur "verte".
Vous pouvez utiliser une approche de formule, mais comme les formules ne peuvent pas modifier les valeurs des autres cellules, elles devront être entrées dans la cellule C5.
=IF(ISNUMBER(FIND("green",B5)),"Text A","")
La cellule C5 n’affiche plus que "Texte A" si B5 contient le mot "vert".
Une formule comme celle-ci peut être construite pour fonctionner avec de nombreuses conditions. Vous devez définir vos besoins afin d'obtenir de l'aide sur votre situation spécifique.
Si vous ne voulez pas que C5 ait une formule, vous pouvez également utiliser une approche VBA. Vous pouvez exécuter un événement de changement de feuille de calcul à exécuter chaque fois que la cellule B5 est modifiée, soit en modifiant manuellement la valeur, soit en y collant quelque chose.
Un exemple pour une telle macro pourrait être
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B5")) Is Nothing Then
If InStr(1, Target, "green", vbTextCompare) Then
Target.Offset(0, 1) = "Text A"
End If
End If
End Sub
Les conditions et l'emplacement de la sortie ne sont que des exemples, bien sûr, et doivent être adaptés à vos besoins.
La différence entre la formule et l'approche macro est
Remarque: ce qui précède n’est qu’un exemple. Vous devez définir vos besoins, qu'il s'agisse d'évaluer des chiffres ou du texte, de déterminer si l'évaluation est sensible à la casse, quelles sont les règles d'évaluation, où placer le résultat, etc.