Extraire la chaine entre les crochés

Bonjour,

Je souhaite savoir comment fait-on pour copier les chaine de caractères qui sont entre « [ ] ».

J’ai une colonne A par exemple dans laquelle j’ai des donnés aléatoires. En générale une longue chaine de caractère.

Dans chaque ligne j’ai des caractères entre deux crochés.

Je souhaite pouvoir sélectionner uniquement les caractères qui sont dans les crochés avec les crochés inclus.

Ex :

J’ai : aaazazaeazeaze aeazeaze [ppppppppp] izhriz zlirhzi

Je souhaite à la fin avoir uniquement dans la ligne [ppppppppp], et ça pour toutes les lignes de ma colonne.

J’ai essayé de faire un mélange de MID et FIND mais je n’arrive pas.

Quel qu’un peut-il m’aider su ça ?

Merci beaucoup.

Bonjour

Si cela peut t'aiguiller..

Sub extraire()
For Each Cellule In Range("A1:A10")
Dim Debut, Fin As String
Debut = InStr(Cellule, "[")
Fin = InStr(Cellule, "]")
If Cellule.Value Like "*]*" Then
Cellule.Offset(, 1) = Mid(Cellule, Debut, Fin - Debut + 1)
End If
Next
End Sub

Cordialement

165extraire.zip (6.72 Ko)

Merci pour ta réponse,

cela fonctionne mais si je veux traiter toute la colonne A , par exemple :

For Each Cellule In Range("A1:A2000")

il m'indique que j'ai une erreur à ce niveau :

Cellule.Offset(, 2) = Mid(Cellule, Debut, Fin - Debut + 1)

Erreur d'exécution '5':

Argument ou appel de procédure incorrect

Il accept jusqu'a A700 et pas plus !!

Merci de ton aide.

Bonjour

Avec mon Excel 2003, je viens de tester jusqu'à la ligne 5000 sans problème.

Comme dit par un Pro de VBA, pour ta version d'Excel, essaie en remplaçant la ligne

Dim Debut, Fin As String

par

Dim Debut, Fin As Integer

Cordialement

Bonjour

Bonjour Amadéus

Une idée du pourquoi

Vérifies ta chaîne : il doit manquer le crochet ouvrant

Bonjour

En effet, je n'ai pas prévu le risque d'erreur.

A cet effet, rajoute dans le Code en ligne2

On Error Resume Next

Tes 3 premières lignes seront donc:

Sub extraire()
On Error Resume Next
For Each Cellule In Range("A1:A2000")

Cordialement

Bonjour,

Bonjour Banzai64,

tu as absolument raison, si ] existe alors que [ n'existe pas j'ai cette erreur merci pour tt .

Merci à vous deux.

Grace à vous j’ai pu avancer beaucoup sur ce que je voulais, pour finir cette partie j’ai une dernière question. Je vous serai très reconnaissent de bien vouloir me guider.

Avec vos aides j’ai maintenant un fichier avec trois colonnes.

Dans A j’ai l’objet des mails, dans B j’ai la date et l’heure et dans C j’ai ce code qui se trouve entre crochets que j’extrais de A.

J’ai besoin de trouver le temps de traitement pour chaque demande. Cela signifie que pour chaque demande je peux éventuellement avoir plusieurs échanges de mails. Je souhaite connaitre le temps entre le premier mail et le dernier.

Pour cela je pense que je dois me basé sur les codifications que je dispose, en effet chaque objet des mails dispose une codification ( pour le moment il reste des mails sans code), qui se trouve entre les deux crochets donc dans la colonne C j’ai les codes des mails.

Ce code est de la forme suivante :

[date(6 caractères)-code(4caractères)-personne en charge(2 caractères)-type demande(3caractères)]

Ex : [010112-0550-OD-ANO]

La clé est le code sur 4 caractères (ici 0550), grâce à ça je dois trouver le premier et dernier mail et obtenir leur date pour calculer le temps entre les deux et de mettre le résultat dans la colonne D par exemple sous forme : code : temps. ex : (0550 : 2j 3H)

Merci infiniment pour vos conseils.

70classeur1.xlsx (14.72 Ko)

Bonjour

1) Dommage que tu n'ais pas utilisé la macro corrigée, cela aurait évité les lignes à erreur.

2) Ligne 141

[25062012-0562-AN-INF] la date ne fait pas 6 caractères

3) Faut il pour calculer le temps prendre les dates en colonne B ou celles en colonne C?

Cordialement

Bonjour,

Pour la ligne 141 il reste des erreurs à corrigées dans Outlook dans l’objet du mail donc pour la version final les erreurs vont être corrigés.

Faut prendre la date en colonne B, la date et l’heure. Par exemple si pour le code x, le premier mail arrive le 260612 à 8h et le dernier le 260612 à 17h, le résultat attendu doit être : x :9H

Merci beaucoup.

Bonjour

L'extraction du Code n'amène rien de plus et les résultats sont identiques en utilisant les 4 chiffres du Code ou toute l'extraction entre crochets.

Sur ce fichier, j'ai nommé Objet la formule

=DECALER(Feuil1!$A$1;;;NBVAL(Feuil1!$A:$A)-1)

puis, Date la formule

=DECALER(Feuil1!$B$2;;;NBVAL(Objet))

puis Extract la formule

=DECALER(Feuil1!$C$2;;;NBVAL(Objet))

Ces 3 formules représentent chaque champ des colonne A, B et C

En D2, incrémentée vers le bas.

Formule Matricielle à valider avec les 3 touches Ctrl+Maj+Entrée.

=SI($C2="";"";MAX(SI(Extract=$C2;Date))-MIN(SI(Extract=$C2;Date)))

Cordialement

20drbobo-v2.zip (19.14 Ko)

Bonjour,

Merci pour ta réponse.

J'ai du mal à reproduire ca sur ma feuille. Quand tu dis j’ai nommé Objet, Extract et Date, cela ne me parle pas trop.

Le nouveau fichier est mon fichier final avec deux colonnes E et F si d’après ton raisonnement je veux avoir l’écart dans la colonne G.

Peux-tu m’aider à faire cela.

Avec un grand merci.

Cordialement.


Pour donner plus de détail je souhaite créer un bouton pour faire cela et quand je clique sur le bouton la colonne G se replisse avec les écarts.

Merci.

17classeur1.xlsx (20.66 Ko)

Bonjour

Pour donner plus de détail je souhaite créer un bouton pour faire cela et quand je clique sur le bouton la colonne G se replisse avec les écarts.

Je t'ai donné la solution par formules. pour le faire en VBA, je n'ai pas le Niveau. Place donc aux experts....

Cordialement

ok merci

Peux-tu appliquer les formules à ce nouveau fichier je vais mieux comprendre.

Merci infiniment.

Bonjour

petite explication pour les formules nommées

J'ai nommé (Voir Nom défini dans l'Aide)

Extract la formule

=DECALER(Feuil1!$E$2;;;NBVAL(Feuil1!$E:$E)-1)

qui représente le Champ dynamique de la colonne E

ici E2:E460

"Champ dynamique" car ce champ s"adapte au nombre de données de la colonne.

Si tu ajoutes une valeur en E461, Extract représentera le champ E2:E461

Pour que les formules "calculent" sur des champs d'égales longueur (en cas de cellules vides au milieu) la seconde formule nommée Date ne tient pas compte des du nombre de valeurs de la colonne Date, mais de celles de la colonne Extract.

=DECALER(Feuil1!$F$2;;;NBVAL(Extract))

Cordialement

41classeur1.xlsx (49.46 Ko)
Rechercher des sujets similaires à "extraire chaine entre croches"