Extraire un groupe de caractères vers une seule cellule, selon condition

Nougatine95

XLDnaute Occasionnel
Bonsoir Le Forum,

Après avoir ouvert des dizaines de posts afin d'y trouver une équivalence à ma recherche, je capitule.

Ma requête:
Extraire un groupe de caractères (caractères issus d'une chaîne de texte), vers une seule cellule, selon condition.

Petit fichier joint.
Il n'y a pas d'urgence!

En vous remerciant.
 

Pièces jointes

  • Extraire un groupe de caractères vers une seule cellule, selon condition.xlsx
    12.2 KB · Affichages: 68
  • Extraire un groupe de caractères vers une seule cellule, selon condition.xlsx
    12.2 KB · Affichages: 71
  • Extraire un groupe de caractères vers une seule cellule, selon condition.xlsx
    12.2 KB · Affichages: 70

job75

XLDnaute Barbatruc
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Re,

Oui c'est mieux mais chez toi comme chez moi ça ne fait qu'une différence de 4%.

Mais c'est vrai qu'à force de pinailler on est passé de 2,38 s à 2,16 s soit quand même un delta de 9%.

A+
 
Dernière édition:

Nougatine95

XLDnaute Occasionnel
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Bonjour, Le Forum, Le Fil,

Eh bien! j'ai du travail et tester tout cela dans la journée.

Un grand merci pour votre aide toujours si précieuse.

Bonne journée,
@ bientôt,
Noug
 

job75

XLDnaute Barbatruc
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
    58 KB · Affichages: 50

Nougatine95

XLDnaute Occasionnel
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.

Bonne soirée.

Nougatine95.
 

Nougatine95

XLDnaute Occasionnel
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
    50 KB · Affichages: 39

job75

XLDnaute Barbatruc
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Bonjour Nougatine95,

Mais pourquoi la macro du post #10 :confused: utilisez la forme matricielle du post #30.

Elle est beaucoup plus rapide.

Fichier joint.

A+
 

Pièces jointes

  • Macro #30(1).xls
    48.5 KB · Affichages: 46

job75

XLDnaute Barbatruc
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
Fichier joint.

A+
 

Pièces jointes

  • Macro #10(1).xls
    49.5 KB · Affichages: 42

job75

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

Pièces jointes

  • Macro #10(2).xls
    49.5 KB · Affichages: 34

Nougatine95

XLDnaute Occasionnel
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Bonjour job75

Bonjour Nougatine95,

Mais pourquoi la macro du post #10 :confused: utilisez la forme matricielle du post #30.

Elle est beaucoup plus rapide.

Fichier joint.

A+

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.

Merci beaucoup job75.
 

job75

XLDnaute Barbatruc
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Re,

Quant aux problèmes de plantage que vous signalez, ils doivent provenir du recalcul des feuilles.

N'auriez-vous pas des fonctions volatiles comme MAINTENANT DECALER ou INDIRECT ?

Il faudrait nous montrer votre fichier allégé (2 ou 3 lignes pour chaque tableau suffisent).

A+
 

job75

XLDnaute Barbatruc
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Bonjour Nougatine95, le forum,

A la réflexion je pense que le plantage provient du 2ème argument de la fonction avec COLONNES.

En colonne S par exemple, chaque fois qu'une cellule se recalcule COLONNES($B:S) entraîne le recalcul de tout le tableau B:S.

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...

Fichier (3).

Edit : pour déterminer la durée du recalcul de votre fichier exécutez la macro :

Code:
Sub Durée()
Dim t
t = Timer
[A:A].Copy [A1]
MsgBox "Durée " & Format(Timer - t, "0.00 \s")
End Sub
A+
 

Pièces jointes

  • Macro #10(3).xls
    53 KB · Affichages: 35
Dernière édition:

david84

XLDnaute Barbatruc
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...
Si c'est le cas on peut également utiliser COLONNE(A:A) plutôt que COLONNE()-1 pour éviter au besoin de rectifier le -1 ou le -2.
A+
 

job75

XLDnaute Barbatruc
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Bonjour David,

Si c'est le cas on peut également utiliser COLONNE(A:A) plutôt que COLONNE()-1 pour éviter au besoin de rectifier le -1 ou le -2.

Oui, mais alors toute modification du tableau (par exemple colonne B) entraine le recalcul d'une colonne entière (C).

Edit : avec =Crochets($A11;COLONNE(A11)) en B11 cela devrait aller.

A+
 
Dernière édition:

Nougatine95

XLDnaute Occasionnel
Re : Extraire un groupe de caractères vers une seule cellule, selon condition

Bonsoir

Le Forum, Le Fil, job75, david84

Edit : avec =Crochets($A11;COLONNE(A11)) en B11 cela devrait aller.

Je viens de tester avec ce code, très bien!
Pas de plantage.

Quant aux problèmes de plantage que vous signalez, ils doivent provenir du recalcul des feuilles.

N'auriez-vous pas des fonctions volatiles comme MAINTENANT DECALER ou INDIRECT ?

Je n'ai aucune formule supplémentaire.

Test avec 450 lignes et 250 colonnes, en exécutant la durée: 3,91 s

Bravo!

Je testerai en semaine sur fichier lieu de travail.

Merci pour votre disponibilité, pour tout.
 

Discussions similaires

Statistiques des forums

Discussions
312 338
Messages
2 087 398
Membres
103 537
dernier inscrit
alisafred974