XL 2010 Scinder Array "Libellé (numérique - chaîne)"[RESOLU]

cathodique

XLDnaute Barbatruc
Bonjour,

Je voudrais transférer 2 plages de données vers une autre feuille.

Pour la 1ère plage pas de difficulté.

Pour la seconde, je l’ai mise dans un tableau T_data que je transfère d’abord dans un tableau T_report.
Mon problème est le suivant, T_Data(i, 2) contient un code de 4 chiffre suivi d’un libellé
(exemple : 6010 Nourriture animale).
Je voudrais scinder le code du libellé dans T_Report(i, 3) et T_Report(i, 4);
6010 sera mis dans T_Report(i, 3) et Nourriture animale dans T_Report(i, 4)

En vous remerciant par avance.
EDIT:
VB:
T_Report(i, 3) = Val(T_Data(i, 2))  'resultat: 6010
T_Report(i, 4) = Right(T_Data(i, 2), (Len(T_Data(i, 2)) - Len(T_Report(i, 3)) - 1))  'resultat: Nourriture animale
En mettant Len(Val(T_Data(i, 2))-1) à la place de Len(T_Report(i, 3)) - 1), le code plante sur Val avec message : erreur de compilation Variable requise: Impossible de l'affecter à cette expression.
 
Dernière édition:

cathodique

XLDnaute Barbatruc
Merci Thebenoit59,

En fait, ma bête noire est la manipulation des chaînes de caractères. J e suis pas sûr à 100% que le résultat sera fiable. Effectivement, avec ce que j'ai comme données, pour le moment les résultats sont bons.

J'ai obtenu ce résultat à tâtons, un peu "beaucoup" tiré par les cheveux. Il me semble que mon code n'est pas très "orthodoxe".

J'ai mis la plage de données dans un tableau (pour aller plus vite) et dans T_data(i,2) il y a une chaîne constituée d'un code numérique au début suivi d'un libellé.

Alors le but était de séparer le numérique de l'alphabétique. Ton avis?
 
Dernière édition:

cathodique

XLDnaute Barbatruc
VB:
Option Explicit
Sub sep()
Dim i As Byte, txt$, code!, libel$
txt = [a1].Value
For i = 1 To Len(txt)
    If IsNumeric(Mid(txt, i, 1)) Then
        code = Val(Mid(txt, i, Len(txt) - i + 1))
        libel = Trim(Right(txt, Len(txt) - (Len(code) + i)))
        Exit For
    End If
Next i
End Sub
Ton code ne prend en considération que la cellule A1, de plus il sort de la boucle juste après code, libel n'est pas traité.

Autre chose cette notation "code!" dans la déclaration des variables veut dire quoi? Integer, long, ...

Merci quand même. Bonne soirée.
 

thebenoit59

XLDnaute Accro
Oui c'est normal pour [A1] et la sortie de boucle.
Je n'ai pas réalisé de boucles ne connaissant pas ton code de base, et je sors de la boucle quand j'ai trouvé le code, car il n'y a plus d'intérêt de continuer.
libel est bien traité, ajoute :

Code:
 debug.print code & " " & libel

à la fin du code et tu verras les résultats.

Le "!" correspondant à un single.

La boucle s'effectue sur les différents caractères du texte et pas sur une liste de texte.
 

cathodique

XLDnaute Barbatruc
VB:
For i = 1 To UBound(T_Data, 1) '
        T_Report(i, 1) = CDate(T_EnTete(2, 5))           'dateEcrit
        T_Report(i, 2) = T_EnTete(2, 6)    'N° Ecrit
        '''''scinde code du libellé'''''''''''''''''''''''
        T_Report(i, 3) = Val(T_Data(i, 1))  'N°Compte  '*****
        T_Report(i, 4) = Right(T_Data(i, 1), (Len(T_Data(i, 1)) - Len(T_Report(i, 3)) - 1))   'Libellé ****
Next i
Mon code est dans une boucle for i.... next i (je n'ai laissé que quelques lignes pour ne pas trop encombrer).
En fait, je travaille sur des tableaux. Merci, de m'avoir mis sur la bonne voie.

J'avais écrit T_Report(i, 4) = Right(T_Data(i, 1), (Len(T_Data(i, 1)) - Len(Val(T_Data(i, 1)) ) - 1))
Mais ça planté sur Val mais en remplaçant par T_Report(i, 3) alors que T_Report(i, 3) = Val(T_Data(i, 1)) mais ça passé.
C'est pour cette raison que j'ai eu des doutes.

Je vais essayer d'adapter ton code.

Encore merci et bonne soirée
 

Discussions similaires

Réponses
4
Affichages
213

Statistiques des forums

Discussions
312 248
Messages
2 086 593
Membres
103 248
dernier inscrit
Happycat