objet: format des donnees d'un tableau récupéré sur un document

Le
B_M
Bonjour

Afin de recuperer les donnees d'un fichier d'acquisition de manieere
automatique dans une macro, j'ai utilisé cette fonction:

Function F_extrait(F_EX_fich As String, F_EX_feui As String)
With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
F_extrait = .Worksheets(F_EX_feui).Range("a1:bh1000")
.Close False
End With
End Function

Si cela recupere convenablement les donnees au format texte, les donnees
numeriques ont un probleme de format. En effet, si le chiffre est composé de
plus de 4 nombre (que ce soit avant ou apres la virgule), la fonction le met
en integer et la virgule disparait:
276,10 devient 27610

C'est tres ennuyant car je veux faire une moyenne de temperature et
j'aimerai que les nombres soit en double. Comme j'ai du texte dans le
tableau, j'ai donc voulu utiliser le type variant.
Pour cela, j'ai essayé cette ecriture:

Function F_extrait(F_EX_fich As String, F_EX_feui As String)
dim F_EX() as variant
With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
F_EX = .Worksheets(F_EX_feui).Range("a1:bh1000")
.Close False
F_extrait=F_EX
End With
End Function

Mais il semble que le type de F_EX soit incompatible avec les données
recupere par "= .Worksheets(F_EX_feui).Range("a1:bh1000")"

Y a t'il une solution, ou bien peut t'on/doit t'on assigner le type de
données sur F_extrait? Ou bien dois-je définir le type de données de chaque
cellule du tableau (si c'est possible).

Je vous remercie d'avance de vos eclaircissement.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice Henrio
Le #15349661
la virgule au format américain sert à séparer les milliers. Dons il faut
remplacer les virgules par des points avec la fonction replace.


"B_M"
Bonjour

Afin de recuperer les donnees d'un fichier d'acquisition de manieere
automatique dans une macro, j'ai utilisé cette fonction:

Function F_extrait(F_EX_fich As String, F_EX_feui As String)
With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
F_extrait = .Worksheets(F_EX_feui).Range("a1:bh1000")
.Close False
End With
End Function

Si cela recupere convenablement les donnees au format texte, les donnees
numeriques ont un probleme de format. En effet, si le chiffre est composé
de
plus de 4 nombre (que ce soit avant ou apres la virgule), la fonction le
met
en integer et la virgule disparait:
276,10 devient 27610

C'est tres ennuyant car je veux faire une moyenne de temperature et
j'aimerai que les nombres soit en double. Comme j'ai du texte dans le
tableau, j'ai donc voulu utiliser le type variant.
Pour cela, j'ai essayé cette ecriture:

Function F_extrait(F_EX_fich As String, F_EX_feui As String)
dim F_EX() as variant
With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
F_EX = .Worksheets(F_EX_feui).Range("a1:bh1000")
.Close False
F_extrait=F_EX
End With
End Function

Mais il semble que le type de F_EX soit incompatible avec les données
recupere par "= .Worksheets(F_EX_feui).Range("a1:bh1000")"

Y a t'il une solution, ou bien peut t'on/doit t'on assigner le type de
données sur F_extrait? Ou bien dois-je définir le type de données de
chaque
cellule du tableau (si c'est possible).

Je vous remercie d'avance de vos eclaircissement.



B_M
Le #15349621
Ca semble etre la solution, j'ai remplace les virgule par des points dans le
fichier lu... et ca marche! mais je ne connais pas la syntaxe à utiliser
pour replace dans VBA. j'ai testé dans le "with":

.Worksheets(F_EX_feui).Range("a1:bh1000").replace(....)
mais VBA n'en veut pas.
Merci d'avance de vos eclaircissement.


"Patrice Henrio" a écrit :

la virgule au format américain sert à séparer les milliers. Dons il faut
remplacer les virgules par des points avec la fonction replace.


"B_M"
> Bonjour
>
> Afin de recuperer les donnees d'un fichier d'acquisition de manieere
> automatique dans une macro, j'ai utilisé cette fonction:
>
> Function F_extrait(F_EX_fich As String, F_EX_feui As String)
> With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
> F_extrait = .Worksheets(F_EX_feui).Range("a1:bh1000")
> .Close False
> End With
> End Function
>
> Si cela recupere convenablement les donnees au format texte, les donnees
> numeriques ont un probleme de format. En effet, si le chiffre est composé
> de
> plus de 4 nombre (que ce soit avant ou apres la virgule), la fonction le
> met
> en integer et la virgule disparait:
> 276,10 devient 27610
>
> C'est tres ennuyant car je veux faire une moyenne de temperature et
> j'aimerai que les nombres soit en double. Comme j'ai du texte dans le
> tableau, j'ai donc voulu utiliser le type variant.
> Pour cela, j'ai essayé cette ecriture:
>
> Function F_extrait(F_EX_fich As String, F_EX_feui As String)
> dim F_EX() as variant
> With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
> F_EX = .Worksheets(F_EX_feui).Range("a1:bh1000")
> .Close False
> F_extrait=F_EX
> End With
> End Function
>
> Mais il semble que le type de F_EX soit incompatible avec les données
> recupere par "= .Worksheets(F_EX_feui).Range("a1:bh1000")"
>
> Y a t'il une solution, ou bien peut t'on/doit t'on assigner le type de
> données sur F_extrait? Ou bien dois-je définir le type de données de
> chaque
> cellule du tableau (si c'est possible).
>
> Je vous remercie d'avance de vos eclaircissement.
>





Patrice Henrio
Le #15349591
replace s'applique à un texte et non à un objet range
donc il faut parcourir chaque cellule et faire la modif (avec CTxt par
exemple si les valeurs de départ sont des nombres ou replace si c'est du
texte)

for each C in .Worksheets(F_EX_feui).Range("a1:bh1000")
C=Ctxt(C.value,2,".")
next

ou encore

for each C in .Worksheets(F_EX_feui).Range("a1:bh1000")
if isNumeric(C.value) then C=Ctxt(C.value,2,".") else
C=replace(C.Value,",",".")
next

"B_M"
Ca semble etre la solution, j'ai remplace les virgule par des points dans
le
fichier lu... et ca marche! mais je ne connais pas la syntaxe à utiliser
pour replace dans VBA. j'ai testé dans le "with":

.Worksheets(F_EX_feui).Range("a1:bh1000").replace(....)
mais VBA n'en veut pas.
Merci d'avance de vos eclaircissement.


"Patrice Henrio" a écrit :

la virgule au format américain sert à séparer les milliers. Dons il faut
remplacer les virgules par des points avec la fonction replace.


"B_M"
> Bonjour
>
> Afin de recuperer les donnees d'un fichier d'acquisition de manieere
> automatique dans une macro, j'ai utilisé cette fonction:
>
> Function F_extrait(F_EX_fich As String, F_EX_feui As String)
> With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
> F_extrait = .Worksheets(F_EX_feui).Range("a1:bh1000")
> .Close False
> End With
> End Function
>
> Si cela recupere convenablement les donnees au format texte, les
> donnees
> numeriques ont un probleme de format. En effet, si le chiffre est
> composé
> de
> plus de 4 nombre (que ce soit avant ou apres la virgule), la fonction
> le
> met
> en integer et la virgule disparait:
> 276,10 devient 27610
>
> C'est tres ennuyant car je veux faire une moyenne de temperature et
> j'aimerai que les nombres soit en double. Comme j'ai du texte dans le
> tableau, j'ai donc voulu utiliser le type variant.
> Pour cela, j'ai essayé cette ecriture:
>
> Function F_extrait(F_EX_fich As String, F_EX_feui As String)
> dim F_EX() as variant
> With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
> F_EX = .Worksheets(F_EX_feui).Range("a1:bh1000")
> .Close False
> F_extrait=F_EX
> End With
> End Function
>
> Mais il semble que le type de F_EX soit incompatible avec les données
> recupere par "= .Worksheets(F_EX_feui).Range("a1:bh1000")"
>
> Y a t'il une solution, ou bien peut t'on/doit t'on assigner le type de
> données sur F_extrait? Ou bien dois-je définir le type de données de
> chaque
> cellule du tableau (si c'est possible).
>
> Je vous remercie d'avance de vos eclaircissement.
>







B_M
Le #15349541
Je n'ai pas la fonction Ctxt, elle n'est pas reconnue par mon système VBA 6.3
ou puis je la trouver?
Merci beaucoup

"Patrice Henrio" a écrit :

replace s'applique à un texte et non à un objet range
donc il faut parcourir chaque cellule et faire la modif (avec CTxt par
exemple si les valeurs de départ sont des nombres ou replace si c'est du
texte)

for each C in .Worksheets(F_EX_feui).Range("a1:bh1000")
C=Ctxt(C.value,2,".")
next

ou encore

for each C in .Worksheets(F_EX_feui).Range("a1:bh1000")
if isNumeric(C.value) then C=Ctxt(C.value,2,".") else
C=replace(C.Value,",",".")
next

"B_M"
> Ca semble etre la solution, j'ai remplace les virgule par des points dans
> le
> fichier lu... et ca marche! mais je ne connais pas la syntaxe à utiliser
> pour replace dans VBA. j'ai testé dans le "with":
>
> .Worksheets(F_EX_feui).Range("a1:bh1000").replace(....)
> mais VBA n'en veut pas.
> Merci d'avance de vos eclaircissement.
>
>
> "Patrice Henrio" a écrit :
>
>> la virgule au format américain sert à séparer les milliers. Dons il faut
>> remplacer les virgules par des points avec la fonction replace.
>>
>>
>> "B_M" >>
>> > Bonjour
>> >
>> > Afin de recuperer les donnees d'un fichier d'acquisition de manieere
>> > automatique dans une macro, j'ai utilisé cette fonction:
>> >
>> > Function F_extrait(F_EX_fich As String, F_EX_feui As String)
>> > With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
>> > F_extrait = .Worksheets(F_EX_feui).Range("a1:bh1000")
>> > .Close False
>> > End With
>> > End Function
>> >
>> > Si cela recupere convenablement les donnees au format texte, les
>> > donnees
>> > numeriques ont un probleme de format. En effet, si le chiffre est
>> > composé
>> > de
>> > plus de 4 nombre (que ce soit avant ou apres la virgule), la fonction
>> > le
>> > met
>> > en integer et la virgule disparait:
>> > 276,10 devient 27610
>> >
>> > C'est tres ennuyant car je veux faire une moyenne de temperature et
>> > j'aimerai que les nombres soit en double. Comme j'ai du texte dans le
>> > tableau, j'ai donc voulu utiliser le type variant.
>> > Pour cela, j'ai essayé cette ecriture:
>> >
>> > Function F_extrait(F_EX_fich As String, F_EX_feui As String)
>> > dim F_EX() as variant
>> > With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
>> > F_EX = .Worksheets(F_EX_feui).Range("a1:bh1000")
>> > .Close False
>> > F_extrait=F_EX
>> > End With
>> > End Function
>> >
>> > Mais il semble que le type de F_EX soit incompatible avec les données
>> > recupere par "= .Worksheets(F_EX_feui).Range("a1:bh1000")"
>> >
>> > Y a t'il une solution, ou bien peut t'on/doit t'on assigner le type de
>> > données sur F_extrait? Ou bien dois-je définir le type de données de
>> > chaque
>> > cellule du tableau (si c'est possible).
>> >
>> > Je vous remercie d'avance de vos eclaircissement.
>> >
>>
>>
>>





Patrice Henrio
Le #15349521
Elle est dans les fonctions excel donc au pire on peut utiliser
C.Formula='Ctxt(C.value ...)

mais l'équivalent VBA est format qui transforme une valeur numérique en
texte.

Donc C.value=format(C.value), par contre on ne peut pas utiliser directement
format pour remplacer les virgules par des points car format utilise les
paramètres régionaux (soit en français la virgule décimale).

donc
for each C in .Worksheets(F_EX_feui).Range("a1:bh1000")
C=replace(Format(C.Value),",",".")
next



"B_M"
Je n'ai pas la fonction Ctxt, elle n'est pas reconnue par mon système VBA
6.3
ou puis je la trouver?
Merci beaucoup

"Patrice Henrio" a écrit :

replace s'applique à un texte et non à un objet range
donc il faut parcourir chaque cellule et faire la modif (avec CTxt par
exemple si les valeurs de départ sont des nombres ou replace si c'est du
texte)

for each C in .Worksheets(F_EX_feui).Range("a1:bh1000")
C=Ctxt(C.value,2,".")
next

ou encore

for each C in .Worksheets(F_EX_feui).Range("a1:bh1000")
if isNumeric(C.value) then C=Ctxt(C.value,2,".") else
C=replace(C.Value,",",".")
next

"B_M"
> Ca semble etre la solution, j'ai remplace les virgule par des points
> dans
> le
> fichier lu... et ca marche! mais je ne connais pas la syntaxe à
> utiliser
> pour replace dans VBA. j'ai testé dans le "with":
>
> .Worksheets(F_EX_feui).Range("a1:bh1000").replace(....)
> mais VBA n'en veut pas.
> Merci d'avance de vos eclaircissement.
>
>
> "Patrice Henrio" a écrit :
>
>> la virgule au format américain sert à séparer les milliers. Dons il
>> faut
>> remplacer les virgules par des points avec la fonction replace.
>>
>>
>> "B_M" >>
>> > Bonjour
>> >
>> > Afin de recuperer les donnees d'un fichier d'acquisition de manieere
>> > automatique dans une macro, j'ai utilisé cette fonction:
>> >
>> > Function F_extrait(F_EX_fich As String, F_EX_feui As String)
>> > With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
>> > F_extrait = .Worksheets(F_EX_feui).Range("a1:bh1000")
>> > .Close False
>> > End With
>> > End Function
>> >
>> > Si cela recupere convenablement les donnees au format texte, les
>> > donnees
>> > numeriques ont un probleme de format. En effet, si le chiffre est
>> > composé
>> > de
>> > plus de 4 nombre (que ce soit avant ou apres la virgule), la
>> > fonction
>> > le
>> > met
>> > en integer et la virgule disparait:
>> > 276,10 devient 27610
>> >
>> > C'est tres ennuyant car je veux faire une moyenne de temperature et
>> > j'aimerai que les nombres soit en double. Comme j'ai du texte dans
>> > le
>> > tableau, j'ai donc voulu utiliser le type variant.
>> > Pour cela, j'ai essayé cette ecriture:
>> >
>> > Function F_extrait(F_EX_fich As String, F_EX_feui As String)
>> > dim F_EX() as variant
>> > With CreateObject("Excel.Application").Workbooks.Open(F_EX_fich)
>> > F_EX = .Worksheets(F_EX_feui).Range("a1:bh1000")
>> > .Close False
>> > F_extrait=F_EX
>> > End With
>> > End Function
>> >
>> > Mais il semble que le type de F_EX soit incompatible avec les
>> > données
>> > recupere par "= .Worksheets(F_EX_feui).Range("a1:bh1000")"
>> >
>> > Y a t'il une solution, ou bien peut t'on/doit t'on assigner le type
>> > de
>> > données sur F_extrait? Ou bien dois-je définir le type de données de
>> > chaque
>> > cellule du tableau (si c'est possible).
>> >
>> > Je vous remercie d'avance de vos eclaircissement.
>> >
>>
>>
>>







Publicité
Poster une réponse
Anonyme