XL pour MAC Formule : trouver du texte

  • Initiateur de la discussion Initiateur de la discussion dionys0s
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

dionys0s

XLDnaute Impliqué
Bonjour le forum,

J'aurais souhaiter savoir s'il existe une formule permettant de faire la chose suivante :
En A1 se trouve une chaîne de caractères uniques, de longueur indéterminée.
En B1, une autre chaîne de caractères uniques, de longueur indéterminée.
J'aurais aimé savoir s'il était possible d'écrire en C1 une formule qui renverrait :
VRAI si tous les caractères de B1 sont présents en A1, FAUX sinon.

Cf. fichier joint

D'avance, merci !!

dionys0s
 

Pièces jointes

Bonjour,

Il y a peut-être une solution élégante avec les expressions régulières (cherche RegEx sur le Web),
sinon en mode "je suis une brute" :
Code:
Option Explicit

Function TestSousChaine(souschaine As Range, chaine As Range) As Boolean
  Dim indexChaine As Integer
  Dim indexTexteCherché As Integer

  Dim match As Boolean

  TestSousChaine = True
  indexTexteCherché = 1

  Do While indexTexteCherché <= Len(souschaine.Value) And TestSousChaine
  indexChaine = 1
  match = False
  Do While indexChaine <= Len(chaine.Value) And Not match
  If Mid(souschaine.Value, indexTexteCherché, 1) = Mid(chaine.Value, indexChaine, 1) Then match = True
  indexChaine = indexChaine + 1
  Loop
  TestSousChaine = TestSousChaine And match
  indexTexteCherché = indexTexteCherché + 1
  Loop

End Function

et en colonne 3 :
=TestSousChaine(LC(-2);LC(-1))
 
Re,

La matrice LIGNE(xxx) contient les numéros d'ordre des éléments du texte en A1.

Et la matrice STXT(A1;LIGNE(xxx);1) contient tous les éléments du texte en A1.

Repérer les doublons par formule doit être possible mais c'est compliqué, il vaut mieux du VBA.

A+
 
Re,

Mi-temps.

Pour une fois la recherche de doublon n'utilise pas l'objet Dictionary :
Code:
Function Doublon(t1$, t2$) As Boolean
Dim Lt2%, i%, x$, n As Byte, j%
Lt2 = Len(t2)
For i = 1 To Len(t1)
  x = Mid(t1, i, 1): n = 0
  For j = 1 To Lt2
  If Mid(t2, j, 1) = x Then n = n + 1
  If n = 2 Then Doublon = True: Exit Function
Next j, i
End Function
Fichier (2).

Bon foot.
 

Pièces jointes

Dernière édition:
Re,

Mais on peut bien sûr utiliser l'objet Dictionary.

C'est plus rapide à condition de créer l'objet à l'ouverture du fichier :
Code:
Private Sub Workbook_Open()
Set d = CreateObject("Scripting.Dictionary")
'd.CompareMode = vbTextCompare 'pour que la casse soit ignorée
End Sub
Le code pour les fonctions :
Code:
'Option Compare Text 'pour que la casse soit ignorée
Public d As Object 'mémorisation

Function Existe(t1$, t2$) As Boolean
Dim i%
Existe = True
For i = 1 To Len(t1)
  If InStr(t2, Mid(t1, i, 1)) = 0 Then Existe = False: Exit Function
Next
End Function

Function Doublon(t1$, t2$) As Boolean
Dim i%, x$
d.RemoveAll 'RAZ
For i = 1 To Len(t1)
  d(Mid(t1, i, 1)) = 0
Next
For i = 1 To Len(t2)
  x = Mid(t2, i, 1)
  If d.exists(x) Then
  d(x) = d(x) + 1
  If d(x) = 2 Then Doublon = True: Exit Function
  End If
Next
End Function
Fichier (3).

A+
 

Pièces jointes

Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 Catégorisation
Réponses
5
Affichages
594
Réponses
4
Affichages
863
Réponses
1
Affichages
663
Retour