Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2011, 10h57   #1
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Par défaut Extraction de données concaténées

Bonjour

Dans la macro sur laquelle je travaille, je récupère des données concaténné en une seule chaine (strtmp) genre "PT100 -20-+80 C" ou "type L 0-200 C" et je dois extraire dans une variable le seuil min et le max (-20 / 80 pour le premier exemple, et 0/ 200 pour l'autre).
Je code ainsi :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    'suppr des 1er caractère  "type L" ou "PT100"
    If Left(strtmp, 6) = "PT100 " Then
        strtmp = Right(strtmp, Len(strtmp) - 6)
    ElseIf Left(strtmp, 7) = "type L " Then
        strtmp = Right(strtmp, Len(strtmp) - 7)
    Else
        SMin = "Err"
        SMax = "Err"
        Exit Sub
    End If
 
    Do 'récupération de Smin caractère par caractère
        If Len(SMin) >= 1 And Left(strtmp, 1) = "-" Then Exit Do
        SMin = SMin & Left(strtmp, 1)
        strtmp = Right(strtmp, Len(strtmp) - 1)
    Loop
 
    strtmp = Right(strtmp, Len(strtmp) - 1) 'suppression du caractère de eéparement des seuil
 
    Do 'recuperation de smax
        SMax = SMax & Left(strtmp, 1)
        strtmp = Right(strtmp, Len(strtmp) - 1)
    Loop While IsNumeric(Left(strtmp, 1))
La plus part du temps ca se passe bien, sauf que de temps en temps, le seuil haut (pour -20 / 80) sort avec la valeur 8020 ou de temps en temps, (lorsque le seuil haut est 450, mais ca n'a peut-être aucun raport) il sort 450450, ou 450450450 ou 450450450450 (ca monte à 4,5045045045045E+30 )
Je n'ai pas l'impression que le seuil bas ai de problème.
En faisant du pas à pas pour le problème du 8020, les données sortent normalement, mais en mettant des tempos (à la sortie de chaque do-loop) ca ne passe plus. De toute façon il serai bien vu que je ne mette pas de tempos, ca double le temps d'execution, et la quantité de données à traité est telle que le programme tourne déja pendant plusieurs heures sans !
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2011, 14h58   #2
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Je pensais que c'était un problème purement VBA mais apparemment c'est un problème Excel (faut-il déplacer le post ? comment fait-on ?)
Je m'explique :
J'ai 2 classeurs.
Un premier classeur avec une série matériels dont les seuil sont déjà séparé (colonne E et F contient les seuil bas et haut tel que renseigné à un endroit).
Un deuxième classeur avec les "même" seuils telles que renseigné à un autre endroit, et sous une autre forme. Pour certains type de matériels (ceux qui me posent problèmes) les seuils du 2ème classeurs sont concaténés tels que montré dans mon précédents messages.
Je dois vérifier la concordances entre ces classeurs
Le programme part du 2ème classeur et pour chaque ligne de ce classeur parcourt le premier classeur à la recherche des seuils à comparer (en fonction d'un code matériel et tout un tas d'autre truc.)
Pour test, j'ai réduit le premier classeur avec juste les lignes problématiques, (300 / 6700) et le problème disparait en partie (entièrement sur une toute petite portion genre 5 lignes)

Je ne sais pas si j'ai été assez clair sur les conditions dans lesquelles ces problèmes se produisent.

Merci d'avance
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 13h43   #3
Membre habitué
 
Avatar de Ju1.0
 
Homme Julien
Automaticien / Technicien d'étude nucléaire
Inscription : novembre 2010
Messages : 115
Détails du profil
Informations personnelles :
Nom : Homme Julien
Âge : 27
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Automaticien / Technicien d'étude nucléaire
Secteur : Industrie

Informations forums :
Inscription : novembre 2010
Messages : 115
Points : 146
Points : 146
Pas taper
En fait, mes variables de seuil (SMin et SMax) était mal réinitialisé avant d'être réaffecté.
Ou plutôt : Les données à concaténées étaient déconcaténées lorsque des données à comparer étaient trouvées dans l'autre classeur. Sauf que De temps en temps (lorsque ca posait problèmes) les données à comparer était présente plusieurs foi dans le documents, et provoquaient une redéconcaténation des données sans que les variables accueuillant ces déconcaténation (SMin et SMax) aient été réinitialisées.
tout ca pour dire que c'est une erreur à la c¤%, que j'avais mal géré mes variables.
Ju1.0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h53.


 
 
 
 
Partenaires

Hébergement Web