XL pour MAC Formule : trouver du texte

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

  • Formule.xlsx
    32.5 KB · Affichages: 94

Iznogood1

XLDnaute Impliqué
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))
 

job75

XLDnaute Barbatruc
Bonjour dionys0s, mdo100, Iznogood1,

Casse-pieds votre notation L1C1 :rolleyes:

Voyez les 2 fichiers joints, solutions par formule Excel (matricielle) et par fonction VBA.

A+
 

Pièces jointes

  • Formule par formule Excel(1).xlsx
    9.9 KB · Affichages: 104
  • Formule par VBA(1).xlsm
    15.1 KB · Affichages: 87

job75

XLDnaute Barbatruc
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+
 

job75

XLDnaute Barbatruc
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

  • Formule par VBA(2).xlsm
    17.4 KB · Affichages: 91
Dernière édition:

job75

XLDnaute Barbatruc
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

  • Formule par VBA(3).xlsm
    18.1 KB · Affichages: 92
Dernière édition:

Discussions similaires

Réponses
5
Affichages
342