Récupérer une chaine de caractère variable sur excel

[Résolu/Fermé]
Signaler
-
 Losiu -
Bonjour le forum,

J'ai un souci sur VBA.

J'ai ceci dans mes cellules Excel :

<Type>CRB</Type>
<Statut>Série</Statut>
...

--------------------------------------------------------------------------------------------------
Je voudrais avec un code VBA récupérer uniquement les données "CRB" et "Série".

Pour l'instant j'ai ceci qui élimine la première partie en amont de la donnée :

Chaine1 = Sheets("Feuil1").Cells(a, j).Value
Cells(a, j).Value = Right(Chaine1, Len(Chaine1) - InStr(Chaine1, ">"))

Ca me permet de conserver tout les caractères à droite de ">"
  • NB : Cells(a, j) me permet de faire la manipulation automatiquement sur tout mon tableau.

--------------------------------------------------------------------------------------------------
En vous remerciant du temps que vous allez passer dessus!

Cordialement

1 réponse

Messages postés
1412
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
9 mars 2021
153
Bonjour Losiu, bonjour le forum,

Essaie comme ça :

Sub Macro1()
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim DL As Integer 'déclare la variable DL (Dernière Ligne)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)

Set O = Worksheets("Feuil1") 'définit l'onglet O (à adapter à ton cas)
DL = O.Cells(Application.Rows.Count, "A").End(xlUp).Row 'définit la dernière ligne éditée DL de la colonne A (colonne à adapter) de l'onglet O
TV = O.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
ReDim TL(1 To UBound(TV, 1), 1 To UBound(TV, 2)) 'redimensionne le tableau des lignes TL (autant de ligne que TV)
For I = 1 To UBound(TV, 1) 'boucle 1 : sur toutes les lignes I du tableau des valeurs TV
    For J = 1 To UBound(TV, 2) 'boucle 2 : sur toutes les colonne J du tableau des valeurs TV
    On Error Resume Next 'gestion des erreurs (ec cas d'erreur pass à la ligne suivante)
    TL(I, J) = Split(Split(TV(I, J), ">")(1), "<")(0) 'récupere dans TL(I, J) le texte après le premier ">", puis de cette partie récupérée, le texte avant le premier "<"
    If Err <> 0 Then 'condition : si une erreur a été générée (si le texte ne contient pas "<" ou ">" par exemple
        Err.Clear 'efface l'erreur
        TL(I, J) = TV(I, J) 'récupere dans TL(I, J) la donnée de TV(I, J)
    End If 'fin de la condition
    'On Error GoTo 0 'annule la gestion des erreurs
    Next J 'prochaine colonne de la boucle 2
Next I 'prochaine ligne de la boucle 1
'renvoie dans la cellule A1 redimensionnée de l'onglet O, le tableau TL transposé
O.Range("A1").Resize(UBound(TL, 1), UBound(TL, 2)).Value = TL
End Sub

Merci beaucoup ThauTheme !!!

Je ne peux pas essayer desuite mais je comprends ce que tu veux faire !!

Super les explications pour un novice comme moi ;)
Encore merci et super réactivité :)
A plus :)