web-dev-qa-db-fra.com

Comment écrivez-vous une formule Excel qui collera une valeur spécifique dans une cellule différente?

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 ...

7
Robert Jefferies

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)

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:

  • le code définissant SetCellValue lui-même
  • la macro déclenchée par l'événement de calcul de la feuille de calcul; et
  • une fonction utilitaire IsCellAddress pour vérifier que target_cell est une adresse de cellule valide.

Code pour la fonction SetCellValue

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


Worksheet_Calculate Macro Code

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


Code pour la fonction IsCellAddress

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
6
chuff

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

  • avec l'approche de la formule, la cellule C5 contiendra une formule. Si l'utilisateur supprime accidentellement la formule, la fonctionnalité fournie sera également supprimée. (Il existe des moyens de gérer cela, cependant)
  • avec la macro VBA, la cellule C5 n’affichera aucune formule et aura le texte textuel comme valeur, mais la modification de la configuration nécessite la connaissance de Excel VBA. En outre, avec une approche VBA, le classeur doit être enregistré en tant que classeur prenant en charge les macros et l'utilisateur doit autoriser les macros ou transformer le fichier en fichier de confiance.

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.

1
teylyn