Passer sous VBA une Formule combinée : SI + ET + RECHERCHEV + CONCATENER

Cedric_C

XLDnaute Nouveau
Bonjour à tous,

Dans un onglet nommé "11", de F12 à F3852, j'ai la formule suivante (et elle fonctionne très bien) :

=SI(ET(B367="";C367="";D367="");"";SI(C367="1_Chantier_à_créer";"!! A CRÉER !!";SI(D367="Néant";RECHERCHEV(CONCATENER(B367;C367);BD!$F:$G;2;FAUX);RECHERCHEV(CONCATENER(B367;C367;D367);BD!$F:$G;2;FAUX))))

Pour la petite histoire... :
La rechercheV va reprendre des données dans une autre feuille nommée "BD" (= base de données), dans laquelle ma colonne F est un CONCATENER des colonnes A, B, et C et ma colonne G est un concatener des colonnes D et E. Cette colonne G représente la valeur finale que je veux voir apparaître dans l'onglet 11 où j'ai ma formule.

Cependant, je cherche à alléger le fichier excel dont elle fait partie. Serait-ce plus léger si je la passais en VBA? Si oui, comment puis-je procéder?

Un grand merci d'avance à tous,

Bon aprem'

CC
 

Cedric_C

XLDnaute Nouveau
Re : Passer sous VBA une Formule combinée : SI + ET + RECHERCHEV + CONCATENER

Bonjour Paritec et à tous,


Vraiment navré du retard de ma réponse.
Il s'agit d'un document professionnel.
Je n'y travaille pas tout le temps et nous venons d'avoir une période assez chargée.

Je viens seulement de m'y replonger.
Et j'ai trouvé un code qui fonctionne bien :

Code:
Private Sub Worksheet_Change(ByVal target As Range)
    If target.Column = 6 Then 
    Application.EnableEvents = False
        If target.Offset(0, -2) = "" Or target.Offset(0, -2) = "Néant" Then
            target = Application.WorksheetFunction.VLookup(ComboBox1.Value & ComboBox2.Value, Sheets("BD").Range("F:G"), 2, False)
        Else 
            target = Application.WorksheetFunction.VLookup(ComboBox1.Value & ComboBox2.Value & ComboBox3.Value, Sheets("BD").Range("F:G"), 2, False)
        End If
    Application.EnableEvents = True
    End If
End Sub

Seulement, pour que le résultat s'affiche dans la cellule voulue, il faut que je clique 2x dessus puis ENTER ou bien faire F2 puis ENTER... en gros, je dois l'activer manuellement.

Y a-t-il une solution pour que le résultat s'affiche tout seul?

S'agissant d'un fichier pour le boulot et qu'il contient déjà énormément de codes VBA, j'aimerais trouvé une solution sans devoir en recommencer un fichier exemple...
mais bon s'il le faut vraiment je le ferai !

Un tout grand merci d'avance,

CC
 

Paritec

XLDnaute Barbatruc
Re : Passer sous VBA une Formule combinée : SI + ET + RECHERCHEV + CONCATENER

Bonjour Cedric c le forum
tu peux déjà essayer en changeant la première ligne par
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
fais le test et redis moi
a+
Papou:)
 

Cedric_C

XLDnaute Nouveau
Re : Passer sous VBA une Formule combinée : SI + ET + RECHERCHEV + CONCATENER

Salut Papou

merci pour ta réponse.

Je ne sais pas vérifier avant lundi au boulot.

Je te tiens au courant.

Mais je pense qu'entre temps mon collègue a trouvé une autre solution.

Au pire j'afficherai les deux.

Bon weekend.

CC
 

Cedric_C

XLDnaute Nouveau
Re : Passer sous VBA une Formule combinée : SI + ET + RECHERCHEV + CONCATENER

Salut,

Voilà nous avons testé avec

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Cela ne fonctionnait pas.

Voici la solution que nous avons trouvée, sachant qu'elle est adaptée au reste de notre fichier. Elle risque donc de ne pas aider d'autres personnes tel qu'elle est...

Code:
Private Sub Worksheet_Change(ByVal target As Range)
If target.Column = 4 Then
    If ComboBox3.Value = "" Then
        target.Offset(0, 2) = ""
    End If
End If
If target.Column = 4 Then
    If Cells(target.Row, 4) = "Néant" Then
        target.Offset(0, 2) = Application.VLookup(ComboBox1.Value & ComboBox2.Value, Sheets("BD").Range("F:G"), 2, False)
    Else
        target.Offset(0, 2) = Application.VLookup(ComboBox1.Value & ComboBox2.Value & ComboBox3.Value, Sheets("BD").Range("F:G"), 2, False)
    End If
End If
End Sub

Un grand merci pour le temps passé pour nous aider.

A bientôt

CC
 

Discussions similaires