Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

5 réponses
Avatar
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.

5 réponses

Avatar
Patrice Henrio
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" a écrit dans le message de news:

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.



Avatar
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" a écrit dans le message de news:

> 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.
>





Avatar
Patrice Henrio
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" a écrit dans le message de news:

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" a écrit dans le message de news:

> 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.
>







Avatar
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" a écrit dans le message de news:

> 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" a écrit dans le message de news:
>>
>> > 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.
>> >
>>
>>
>>





Avatar
Patrice Henrio
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" a écrit dans le message de news:

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" a écrit dans le message de news:

> 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" a écrit dans le message de news:
>>
>> > 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.
>> >
>>
>>
>>