2 votes

Fonction Excel VBA pour la recherche de valeur et de format

J'ai besoin d'une fonction personnalisée pour consulter la valeur d'une cellule et copier le format source. J'ai une liste de valeurs dans deux colonnes. La première est constituée d'entiers et la deuxième colonne contient les valeurs textuelles correspondantes. Par exemple :

A B
--- ----------
1 Ma première valeur
2 Ma deuxième valeur
3 Ma troisième valeur

Je veux rechercher la valeur que je fournis car elle correspond à celles de la colonne A. Sur la base du numéro de ligne de la cellule trouvée avec la valeur correspondante dans la colonne A, il sélectionnera la valeur correspondante dans la colonne B. Cela est assez facile avec la fonction LOOKUP() dans Excel. Cependant, je souhaite également copier le formatage du texte de la cellule de la colonne B.

Au départ, j'ai abordé cette question en utilisant une fonction VBA, mais malheureusement, une fonction ne peut pas modifier le formatage d'une cellule. J'aimerais avoir des idées sur la façon de procéder.

1voto

Raystafarian Points 21292
Sub test()
    On Error GoTo Suberror
    'turn off screen updating
    Application.ScreenUpdating = False
    'ask for input
    strName = InputBox(Prompt:="Lookup Value", _
              Title:="Lookup Value", Default:="0")
        'if no input - exit
        If strName = "0" Or _
               strName = vbNullString Then

               Exit Sub
        'otherwise Find
        Else

            Columns("A:A").Select
            Selection.Find(What:=strName, After:=ActiveCell, _
            LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, MatchCase:=False, _
            SearchFormat:=False).Activate

            'Copy
            ActiveCell.Offset(0, 1).Copy

        End If

        'Paste to the range that you define
            Range("J1").Select
            Selection.PasteSpecial Paste:=xlPasteValues, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
            Selection.PasteSpecial Paste:=xlPasteFormats, Operation:= _
                xlNone, SkipBlanks:=False, Transpose:=False
Suberror:
    Range("A1").Select
    Application.CutCopyMode = False
    Application.ScreenUpdating = True

    End Sub

0voto

mischab1 Points 1232

En général, les fonctions saisies dans une cellule ne peuvent pas modifier le formatage de la cellule dans laquelle elles se trouvent, car la fonction ne sait pas dans quelle cellule elle se trouve. La seule façon de contourner ce problème est de transmettre l'adresse de la cellule actuelle à la fonction.

Function LookupWithFormatting(rValue As Range, rLookup As Range, rResult As Range, rFormatThisCell As Range) As String

La fonction serait entrée dans la cellule B1 comme suit =LookupWithFormatting(A1, IDSource, TextSource, B1) .

Si vous n'avez pas beaucoup de formats, vous pouvez envisager d'utiliser la mise en forme conditionnelle au lieu d'écrire une fonction VBA. (Vous auriez besoin d'un format conditionnel distinct pour chaque valeur de votre table de consultation).

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X