Non pas là je trouve, boucler sur la longueur de la chaîne de caractères c'est mieux quand même.
Chez moi le code du #29 : 1.51 s, celui du #30 : 1.44 s.
A+
Re : Extraire un groupe de caractères vers une seule cellule, selon condition
Bonjour le fil, le forum,
Si l'on accepte que dans le tableau des résultats les cellules non renseignées contiennent #N/A cette macro est plus rapide :
Code:
Function Crochets(t$)
Dim s$, i%, x$, j%, y$
s = Chr(1) 'séparateur
For i = 1 To Len(t)
x = Mid(t, i, 1)
If x = "[" Then
j = InStr(i, t, "]")
x = Mid(t, i + 1, j - i - 1)
i = j
End If
y = y & s & x
Next
Crochets = Split(Mid(y, 2), s)
End Function
Durée d'exécution 1,84 seconde (Win XP - Excel 2003).
Fichier (6) avec les #N/A visibles, fichier (6 bis) avec les #N/A masqués par MFC.
A+
Pièces jointes
Extraire un groupe de caractères vers une seule cellule, selon condition(6).xls
58 KB · Affichages: 52
Extraire un groupe de caractères vers une seule cellule, selon condition(6).xls
58 KB · Affichages: 50
Extraire un groupe de caractères vers une seule cellule, selon condition(6).xls
Re : Extraire un groupe de caractères vers une seule cellule, selon condition
Bonsoir, Le Forum, Le Fil,
job75, david84, mapomme, Staple1600, R@chid,
Je vous remercie tou(te)s pour vos interventions.
Un très grand choix de propositions, toutes aussi satisfaisantes les unes que les autres.
Je vous envie pour vos connaissances intarissables en VBA.
Je travaille sur ce sujet en solo, pour n'atteindre actuellement qu'un vraiment tout petit niveau.
Re : Extraire un groupe de caractères vers une seule cellule, selon condition
Bonjour Le Forum, Le Fil,
Je revois chacune de vos propositions, pour tests et retests, depuis 2 jours sauf que...
mon excel bug!
Lorsque je mets en route ma turbine excel, cela tourne en boucle, etc, excel se ferme pour certains fichiers!
Revenons vers le sujet:
Au maximum 500 lignes et 200 colonnes, maxi 5 feuilles.
Mes préférences vont vers:
- le code de job75 (#2)
Code :
REPT(STXT($A21;N;1);N<X)&REPT(Mot;N=X)&REPT(STXT($A21;N+NBCAR(Mot)+1;1);N>X)
A tirer à droite et vers le bas.
qui ne s'adapte plus lorsque les chaînes sont du style:
APPRTYDGH[UHT]RP[AZ][RTT]NA
parce que je n'avais pas précisé que plusieurs []...
- le code de job75 (#10)
soit une macro sans formule matricielle associée
qui ne renvoie pas:
MRS[SOUR]MGPMT[PRO]A[OHE][HH]JL M R S SOUR M G P M T PRO A OHE HH J L
mais:
MRS[SOUR]MGPMT[PRO]A[OHE][HH]JL M R S SOUR M G P M T PRO A OHE E[HH J L
Cordialement.
Pièces jointes
Extraire un groupe de caractères vers une seule cellule, selon condition#10.xls
50 KB · Affichages: 43
Extraire un groupe de caractères vers une seule cellule, selon condition#10.xls
50 KB · Affichages: 39
Extraire un groupe de caractères vers une seule cellule, selon condition#10.xls
Re : Extraire un groupe de caractères vers une seule cellule, selon condition
Re,
Maintenant si vous tenez absolument à utiliser la macro du post #10 il faut en effet la modifier en utilisant la variable y :
Code:
Function Crochets(t$, ordre%)
Dim i%, x$, grp As Boolean, n%, y$
For i = 1 To Len(t)
x = Mid(t, i, 1)
If Not grp And x <> "[" Then
Crochets = x
n = n + 1
ElseIf x <> "]" Then
grp = True
y = y & x
Else
grp = False
n = n + 1
Crochets = Mid(y, 2)
y = ""
End If
If n = ordre Then Exit Function
Next
Crochets = ""
End Function
Re : Extraire un groupe de caractères vers une seule cellule, selon condition
Re,
Et si vous avez bien suivi le fil, vous avez dû remarquer que David84 a introduit la fonction InStr, plus performante.
Donc la macro du post #10 modifiée dans ce fichier (2) :
Code:
Function Crochets$(t$, ordre%)
Dim i%, x$, j%, n%
For i = 1 To Len(t)
x = Mid(t, i, 1)
If x <> "[" Then
Crochets = x
Else
j = InStr(i, t, "]")
Crochets = Mid(t, i + 1, j - i - 1)
i = j
End If
n = n + 1
If n = ordre Then Exit Function
Next
Crochets = ""
End Function
Pas de forme matricielle, parce que je ne serai pas seule à utiliser ce fichier, des lignes, des pages ajoutées, etc,
c'est moins évident à gérer, même si + rapide pour post #30.
Toutefois j'y réfléchis et soumettrai.
J'ai pu ouvrir ce dernier fichier joint (ouf), c'est excellent pour résultat attendu.
Re : Extraire un groupe de caractères vers une seule cellule, selon condition
A la réflexion je pense que le plantage provient du 2ème argument de la fonction avec COLONNES
.................................
Avec la fonction COLONNE() il ne devrait plus y avoir de problème :
Code :
=Crochets($A11;COLONNE()-1)
Le -1 parce que l'on commence en colonne B, -2 si l'on commence en colonne C...