Concatenation texte si

Bonjour,

Pour résumer, j'ai une liste de mot dans ma colonne B (à partir de la ligne 8).

Dans ma colonne J, je souhaite "cocher" ou non le mot en inscrivant un "x" ou un "X" (par exemple si je veux cocher le mot B47, j’inscris un "x" ou un "X" dans J47). Je souhaite ensuite récupérer l'ensemble des mots cochés en J5.

Dans VBA j'utilise donc le code suivant que je colle dans "Module1" :

Function CONCAT_SI_2_CONDITIONS(R1 As Range, Rech1 As String, Rech2 As String, R2 As Range)
    Application.Volatile
    Dim CL As Range
    Dim CHN As String
    For Each CL In R1
    If CL.Value = Rech1 Or CL.Value = Rech2 Then
    CHN = CHN & Chr(10) & Cells(CL.Row, R2.Column).Value
    End If
    Next
    CONCAT_SI_2_CONDITIONS = Trim(CHN)
End Function

Puis dans ma cellule J5 je met :

=CONCAT_SI_2_CONDITIONS(J8:J9999; "x"; "X"; $B$8:$B$9999)

La fonction marche correctement, mais j'ai parfois l'impression qu'il y a un problème de mise à jour : j'ai l'ensemble de mes mots inscrits dans ma cellule J5 puis à un moment la case redevient vierge (mais la fonction CONCAT_SI_2_CONDITIONS.... reste inscrite dans la partie "formule"). Je suis obligé de faire "F2" puis "Entrée" pour que ça prenne en compte ma formule.

Comment cela se fait-il ? Et surtout qu'est-il possible de faire SVP pour que l'actualisation soit automatique ?

Merci

Bonjour,

dans le ruban, choisir "Formules", puis sur la droite le menu "Options de calcul", cliquez dessus, un choix de trois options s'ouvre alors, vérifiez que l'option du haut "Automatique" soit sélectionné.

C'est la première vérification...

Sinon pour remplacer le [F2] + [entré] il y a la touche [F9] qui force Excel à refaire les calculs, en général si avec [F9] les calculs se font alors c'est que l'option de calcul est sur "Manuel".

Si ce n'est pas cela, merci de nous tenir au courant, si c'est cela alors merci de nous tenir au courant

@ bientôt

LouReeD

Merci pour votre réponse.

Je suis bien en automatique et F9 ne change rien...

Bonsoir,

je viens de faire un test sur un fichier Excel chez moi, cela marche très bien...

Vous avez peut-être un "interférence" avec un autre code, je ne vois pas...

@ bientôt

LouReeD

Petite précision (veuillez m'excuser) : j'utilise cette formule sur plusieurs cellules, c'est-à-dire :

En J5 :

=CONCAT_SI_2_CONDITIONS(J8:J9999; "x"; "X"; $B$8:$B$9999)

En K5 :

=CONCAT_SI_2_CONDITIONS(K8:K9999; "x"; "X"; $B$8:$B$9999)

En L5 :

=CONCAT_SI_2_CONDITIONS(L8:L9999; "x"; "X"; $B$8:$B$9999)

En M5 :

=CONCAT_SI_2_CONDITIONS(M8:M9999; "x"; "X"; $B$8:$B$9999)

etc...

Est-ce que cela peut avoir une influence ?

Merci.

J'AI TROUVE L'ORIGINE DU PROBLEME !!! MAIS JE NE SAIS PAS COMMENT LE RESOUDRE...

Mon module/fonction fait appel à l'onglet en cours.

Par exemple si dans la cellule J5 de l'onglet "toto" j'entre ma formule :

=CONCAT_SI_2_CONDITIONS(J8:J9999; "x"; "X"; $B$8:$B$9999)
  • Si je reste dans l'onglet "toto" alors il fera sa recherche dans la colonne B de l’onglet "toto".
  • Par contre si je clique juste sur un autre onglet, que l’on appellera "donald" par exemple, alors il me fera une recherche dans la colonne B de l’onglet "donald", alors qu’il devrait continuer de la faire dans l’onglet "toto".

Donc ce que je souhaiterais c’est que si j’entre ma formule dans l’onglet "toto", il cherche uniquement dans l’onglet "toto" et pas dans l’onglet en cours (je veux qu’il fasse sa recherche dans l’onglet où l’on entre la formule, et pas dans l’onglet actuellement sélectionné).

Je ne sais pas si je suis clair ?

Merci pour votre aide.

Bonsoir,

essayez avec :

Function CONCAT_SI_2_CONDITIONS(R1 As Range, Rech1 As String, Rech2 As String, R2 As Range)
    Application.Volatile
    Dim CL As Range
    Dim CHN As String
With sheets("toto")
    For Each .CL In .R1
    If .CL.Value = Rech1 Or .CL.Value = Rech2 Then
    CHN = CHN & Chr(10) & .Cells(.CL.Row, .R2.Column).Value
    End If
    Next
end with
    CONCAT_SI_2_CONDITIONS = Trim(CHN)
End Function

ou un truc comme ça...

@ bientôt

LouReeD

Merci pour votre réponse.

J'ai testé mais il me met :

Erreur de compilation.

Variable requise. Impossible de l'affecter à cette expression

En me surlignant le premier ".CL"...

Bonsoir,

Oups CL est une variable locale qui n'a rien avoir avec la feuille... essayez en enlevant le point devant chaque CL...

Function CONCAT_SI_2_CONDITIONS(R1 As Range, Rech1 As String, Rech2 As String, R2 As Range)
    Application.Volatile
    Dim CL As Range
    Dim CHN As String
With sheets("toto")
    For Each CL In .R1
    If CL.Value = Rech1 Or CL.Value = Rech2 Then
    CHN = CHN & Chr(10) & .Cells(CL.Row, .R2.Column).Value
    End If
    Next
end with
    CONCAT_SI_2_CONDITIONS = Trim(CHN)
End Function

@ bientôt

LouReeD

Merci. J'ai testé (en remplaçant bien sûr "toto" par le nom de mon onglet), et ça ne fonctionne pas : j'ai le fameux ## noté dans ma cellule (= #VALEUR! ).

Auriez-vous une idée de l'origine de cette erreur SVP ?

Merci encore

Bonjour,

l'erreur #Valeurs est souvent due à une incompatibilité de type dans les variables, par exemple vous essayer d'additionner du texte avec des chiffres....

N'ayant pas le fichier pour voir comment est construit votre feuille...

Peut-être pourriez vous créer une feuille avec des données factices mais de même type, en reproduisant la structure pour partie, avec le code de la fonction, bref votre fichier, mais en plus petit au niveau quantité de données, anonymisé bien évidemment, comme cela il sera plus simple de comprendre les disfonctionnement !

@ bientôt

LouReed

Rechercher des sujets similaires à "concatenation texte"