Arrondi intempestif

hervé_débutant

XLDnaute Nouveau
Bonjour le forum,

j'ai un petit problème avec une macro VBA que j'ai récupéré
Elle à pour but de me classer mes cellules mais elle arrondit leur valeur. En fait elle arrondit les valeur dans les cellules qui ont été déplacées.
Comment puis je éviter cela et garder 2 chiffre après la virgule ? j'ai besoin de votre aide

Merci beaucoup pour votre aide!

Hervé_débutant

PS: je ne peux pas trop vous renseigner sur la macro je n'en suis pas l'auteur, l'auteur qui se reconnaitra dans ce forum !!!


Voici la macro :


Option Explicit

Option Base 1

Const NbTriplets = 8
Const NbEnsembles = 10

Const strFSource = "Données Brutes"
Const strFDest_H = "Multip"

Const strFDest_V = "He"

Const Source_LDeb = 10
Const Source_ColDeb = 6
Const Dest_LDeb_H = 10
Const Dest_ColDeb_H = 6
Const Dest_LDeb_V = 10
Const Dest_ColDeb_V = 6

Sub ClasserDonnees()

Dim Tablo_H As Variant
Dim Tablo_V() As Variant

Dim Hauteur&
Dim LIGNE_H&, LIGNE_V
Dim i%, i_Ensembles%, i_NbTriplets%
Dim j%, k%
Dim Temp&

Sheets(strFSource).Select
LIGNE_H = Dest_LDeb_H
LIGNE_V = Dest_LDeb_V
Hauteur = Cells(65536, Source_ColDeb).End(xlUp).Row - Source_LDeb + 1

For i = Source_LDeb To Cells(65536, Source_ColDeb).End(xlUp).Row

Tablo_H = Range(Cells(i, Source_ColDeb), Cells(i, Source_ColDeb + 3 * NbTriplets * NbEnsembles - 1))

For i_Ensembles = 1 To NbEnsembles


For i_NbTriplets = 3 To (3 * (NbTriplets - 1)) Step 3
For j = (i_NbTriplets + 3) To (3 * NbTriplets) Step 3
If Tablo_H(1, (i_Ensembles - 1) * 3 * NbTriplets + i_NbTriplets) < Tablo_H(1, (i_Ensembles - 1) * 3 * NbTriplets + j) Then
For k = 2 To 0 Step -1
Temp = Tablo_H(1, (i_Ensembles - 1) * 3 * NbTriplets + j - k)
Tablo_H(1, (i_Ensembles - 1) * 3 * NbTriplets + j - k) = Tablo_H(1, (i_Ensembles - 1) * 3 * NbTriplets + i_NbTriplets - k)
Tablo_H(1, (i_Ensembles - 1) * 3 * NbTriplets + i_NbTriplets - k) = Temp
Next k
End If
Next j
Next i_NbTriplets
Next i_Ensembles

ReDim Tablo_V(1 To NbTriplets, 1 To (3 * NbEnsembles))
For j = 0 To (UBound(Tablo_H, 2) - 1)
Tablo_V((j \ 3) Mod 8 + 1, (j \ 24) * 3 + (j Mod 3 + 1)) = Tablo_H(1, j + 1)
Next j


With Sheets(strFDest_H)
.Cells(LIGNE_H, Dest_ColDeb_H).Resize(1, UBound(Tablo_H, 2)) = Tablo_H
LIGNE_H = LIGNE_H + 1
End With


With Sheets(strFDest_V)
.Cells(LIGNE_V, Dest_ColDeb_V).Resize(NbTriplets, (3 * NbEnsembles)) = Tablo_V
LIGNE_V = LIGNE_V + NbTriplets
End With

Erase Tablo_H
Erase Tablo_V
Next i

End Sub
 

dixit

XLDnaute Impliqué
Re : Arrondi intempestif

bonjour,
je n'ai pas examiné la macro en détail, mais s'il est question de chaîne, il faut peut-être utiliser cdbl
cells(1,1)=cdbl(tablo(....))
ou revoir la déclaration du type de variable Dim ... as long
ou bien tout simplement revoir le format des cellules de destination
ps : j'oubliais, bonne fête à tous les Jacques ...
 
Dernière édition:

hervé_débutant

XLDnaute Nouveau
Re : Arrondi intempestif

Merci pour tes précision Dixit , mais je dois avouer que je ne suis pas capable de faire les modifications tout seul sans plus de détail.

Quand tu parles de "dim ...as long où faut il que je le change "?
est ce que les caractéristiques d'une varible "as variant" ne permettent pas les virgules?

Ou alors pour l'autre hypothèse comment faut-il l'insérer dans mon code ?

Enfin je suis un peu perdu, merci d'avance pour votre aide.

à bientôt

hervé_débutant
 

dixit

XLDnaute Impliqué
Re : Arrondi intempestif

re
je n'ai pas le temps d'étudier en détail mais j'ai remarqué ceci :
Dim Tablo_H As Variant
il me semble qu'il s'agit d'un tableau donc il manque les () après H
suggestion : modifier ces lignes de déclaration
Dim Tablo_H As Variant
Dim Tablo_V() As Variant
Dim Hauteur&
Dim LIGNE_H&, LIGNE_V
Dim i%, i_Ensembles%, i_NbTriplets%
Dim j%, k%
Dim Temp&

mettre à la place :
Dim Tablo_H() As long
Dim Tablo_V() As long
Dim Hauteur as long
etc ... la place mémoire occupée sera plus important mais on verra le résultat
& équivaut à long et % à integer
 

hervé_débutant

XLDnaute Nouveau
Re : Arrondi intempestif

Bonjour le forum bonjour Dixit,

J'ai bien essayer de suivre tes conseils pour éviter un arrondit intempestif au cours de ma macro mais sans succès.

Si je change le format des cellules, les valeurs apparaissent effectivement avec 2 chiffres après la virgule mais après avoir été arrondies j'ai donc 132,00
par exemple au lieu de 132,24
J'ai rajouté une parenthèse après Dim Tablo_H mais cela ne change rien

j'ai remplacé tout les % par & mais les valeurs sont toujours arrondies

et si je change as Variant par As long la macro bug avec une erreur de type 13

en résumé je suis perdu,

la macro (cf premier message) arrondit la valeur des cellules qui ont été classées et étrangement certaines cellules qui n'ont pas changé de place au cours du classement gardent leur valeur exacte avec 2 chiffre après la virgule ???

merci d'avance pour votre aide,

à bientôt
hervé_débutant
 

hervé_débutant

XLDnaute Nouveau
Re : Arrondi intempestif

Bonsoir le forum,

j'ai vraiment du mal à trouver une solution, est ce que cela vient du type du variable ? de leur traitement ?

j'ai pas d'idée et mon niveau en VBA ne me permet pas grand chose...

Si vous avez des idées ? merci d'avance....

Dixit si tu m'entends ? je n'y arrive pas...sniff

Merci pour votre aide

PS: Pierre Jean ? Jean Marie ? êtes vous dans les environs ? Vous m'aviez trouvez des solutions très efficaces dans le passé.... est ce que vous auriez une idée pour ce nouveau problème
 

hervé_débutant

XLDnaute Nouveau
Re : Arrondi intempestif

Bonjour le Forum,

je vous envoie un fichier exemple qui illustre mon problème d'arrondi, en passant d'une feuille à l'autre certaine cellule sont arrondi et d'autres pas ?!

savez vous si on peut éviter cela en gardant la valeur exacte dans toutes les feuille ?

Merci d'avance pour votre aide...

hervé_débutant.
 

Pièces jointes

  • Problem Arrondi.zip
    23.1 KB · Affichages: 26

jeanpierre

Nous a quitté
Repose en paix
Re : Arrondi intempestif

Bonsoir hervé_débutant, re le forum,

Sauf à selectionner tes cellules, et ce sur chaque feuille, et Format/Cellules et Nombre par exemple.... ici, dire avec 1, 2 ou pas de décimales.

Je ne vois rien d'autre.... sauf plus informé....

A te lire, plus peut-être.

Jean-Pierre

Ah, oui, qu'appelles-tu, ici, valeure exacte.... tout semble saisi....
 

hervé_débutant

XLDnaute Nouveau
Re : Arrondi intempestif

Bonsoir le forum, Bonsoir Jean-Pierre,

Merci pour ta réponse Jean-Pierre mais en fait si je change le format comme tu me l'a conseillé il y a des cellules (comme la cellule colorée en bleu) qui auront deux chiffres après la virgule sans arrondi 192.07 reste 192.07 dans les deux autres feuilles de destination (donc pas de problème pour celles là), mais d'autres cellules comme la cellule colorée en rouge seront arrondies 179.77 devient 180.00 dans les deux autres feuilles.

Effectivement il y a deux chiffres après la virgule mais la valeur est arrondie à l'entier le plus proche et ce n'est donc plus la "valeur exacte" j'entends par là 179.77

Comment faire pour avoir 179.77 dans les deux feuilles de destination ?

Merci pour ton aide parce que moi je n'y comprends rien, j'espère que mes explications t'auront précisé mon problème.
 

jeanpierre

Nous a quitté
Repose en paix
Re : Arrondi intempestif

Bonsoir hervé_débutant en ce dimanche, re tous,

Je viens de réouvrir ton fichier, je n'y vois aucun 179.77...

Les deux seules cellules, bleue sur Multip, et rouge sur He sont des valeurs saisies...

Comprendrait rien le Papé?????

A te lire pour plus, parce que, là, je déripe grave....(çà ce dit pas.... trop tard)

Jean-Pierre
 

hervé_débutant

XLDnaute Nouveau
Re : Arrondi intempestif

Re Bonjour le forum, re Bonjour Jean-Pierre,

je ne comprends pas pourquoi tu ne vois pas les cellules colorées ?

je te renvoie le fichier j'ai peut-être fais un erreur et j'essaye d'être plus clair

Avant de lancer la macro regarde les deux feuilles multip et He elle devraient être vides au niveau des cellules du tableau

Ensuite feuille feuille "données brutes" il ya une cellule bleue en G12 (=192.07) et une cellule rouge J14 (= 179.77)

si tu lances la macro
la cellule données brutes!G12 arrive en G12 sur la feuille multip et en G27 sur la feuille He. Pour cette exemple pas de problème la valeur reportée est la valeur exacte 192.07

Par contre !!
la celulle Données brutes!J14 reportée en G14 sur la feuille multip et G42 sur la feuille He devient 180 (ou 180.00 avec deux chiffres après la virgule?!)
au lieu de 179.77 ?

le problème est de taille la macro arrondi certaines valeurs

Si tu as des idées ? merci d'avance

à bientôt tout le monde
 

Pièces jointes

  • Problem Arrondi2.zip
    22.2 KB · Affichages: 27

marco57

XLDnaute Occasionnel
Re : Arrondi intempestif

Bonsoir à tous,
Pour moi, il semble qu'une erreur de déclaration de variable soit à l'origine du petit problème,
Après analyse, je pense que la variable Temp est mal déclarée.

Fais donc un essai en remplaçant :

Dim Temp&
équivalent à : Dim Temp as Long (Nombre entier)

par :

Dim Temp#
équivalent à : Dim Temp as Double (Nombre à virgule flottante)

Bonne chance

A+

Marco
 

jeanpierre

Nous a quitté
Repose en paix
Re : Arrondi intempestif

Re,

Les cellules colorées, je les vois...???? (depuis hier d'ailleurs)

Pour paraphraser notre ami Robert, j'ai la volonté de causer la france et des fois, aussi un peu l'étranger....

J'ai lancé la macro....

Et tu sais quoi....???

Rien, les cellules saisies restent des cellules saisies, le formatage reste ce qu'il est.....

Je pense que tu es dans ton truc, et que t'oublies que , nous, nous en sommes loin.... très loin...

Tes cellules couleurs, rouges, bleues, sont dans ton dernier fichier des valeurs saisies.....

A te lire, pour ne pas finir trop idiot.....

Jean-Pierre
 

Discussions similaires

Réponses
11
Affichages
347
Réponses
23
Affichages
1 K