Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Centième de seconde VBA

Pineurne

XLDnaute Junior
Bonjour,

J'ai bien cherché partout dans le forum et sur Internet, mais je ne trouve pas de réponse adapté à ma question.
En fait j'ai des cellules dont le format est [h]:mm:ss,00. Je cherche sous VBA à comparer ces cellules au centième près, je pensais donc faire quelque chose comme
Code:
If Workbooks(nomdufichier).Worksheets(nomonglet.Name).Range("H" & k) > TimeValue("00:00:00,00") And Workbooks(nomdufichier).Worksheets(nomonglet.Name).Range("H" & k) < TimeValue("00:00:00,10") Then
Bien sur ça ne marche pas car TimeValue se limite au seconde je crois.
Je pensais alors récupérer la valeur qu'il y a dans la cellule au format texte, et extraire les 2 derniers chiffres pour les comparer. J'ai tenté
Code:
Workbooks(nomdufichier).Worksheets(nomonglet.Name).Range("D" & k).NumberFormat
mais ça ne me revoit que [h]:mm:ss.00 et pas la valeur.
Je ne sais pas comment faire. Quelqu'un a-t-il une idée?

Merci d'avance
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Centième de seconde VBA

Bonjour à tous
Rien trouvé de mieux que :
Code:
[COLOR="DarkSlateGray"][B]Sub toto()
Dim t!
   t = Timer
   MsgBox Format(t / 86400, "hh:mm:ss") & Format(t - Int(t), ".00")
End Sub[/B][/COLOR]
ROGER2327
#3217
 

Pineurne

XLDnaute Junior
Re : Centième de seconde VBA

Merci de votre aide !

Depuis j'ai bidouillé mon truc. La comparaison d'heure marche bien avec le format [h]:mm:ss,00.
Donc en fait, je souhaite comparer des heures qui sont dans des cellules avec le format [h]:mm:ss,00. Cette comparaison se fait à l'aide d'une macro. Quand j'écris manuellement, pas de problème. Mais en fait, je ne souhaite pas le faire manuellement mais copier coller des heures qui sont dans un autre fichier. Dans ce fichier, les heures ont été en VBA avec une macro de la façon suivante:
Code:
format_heure = heure & ":" & minute2 & ":" & selectseconde & ",0" & selectcentieme
J'ai comme l'impression qu'Excel me les prend en texte alors que quand je clique droit sur mes cellules et fait "format de cellule", tout est bien en [h]:mm:ss,00. Je remarque que quand j'écris manuellement, par défaut c'est aligné à droite. En revanche, en faisant mon copier coller, c'est aligné à gauche, comme pour du texte.

J'espère être compréhensible
 

ROGER2327

XLDnaute Barbatruc
Re : Centième de seconde VBA

Bonjour Pineurne
La ligne de code que vous citez renvoie effectivement du texte. Pour comprendre votre problème, le plus simple serait de déposer un classeur comportant des exemples de données qui posent un problème.​
ROGER2327
#3564


Mardi 10 Merdre 137 (Saint Barbapoux, amant, SQ)
8 Prairial An CCXVIII
2010-W21-4T09:02:09Z
 

pierrejean

XLDnaute Barbatruc
Re : Centième de seconde VBA

Bonjour Pineurne , Bonjour ROGER

Pour m'amuser j'ai ecrit une fonction personnalisée pour calculer la difference entre 2 heures ecrites telles que Pineurne nous le precise
Le resultat est ecrit sous la même forme
Mais comme toujours avec moi : Tester et re tester !!
 

Pièces jointes

  • diff_cent_sec.zip
    9.6 KB · Affichages: 178

Pineurne

XLDnaute Junior
Re : Centième de seconde VBA

Voici un fichier exemple test.

J'ai manuellement placé des heures dans les colonnes qui traitent mes heures. Si vous cliquez sur le bouton pour lancer la macro, tout se passe comme il faut. En revanche, si je copie colle les heures qui sont en bas au même endroit que les heures initiales, ça plante !

Pour info, ma macro va comparer les heures et placé les heures suivant un ordre chronologique en dessous du bouton.

Si je ne suis pas clair, dites le moi
 

Pièces jointes

  • ExempleHeureCentieme.xls
    39 KB · Affichages: 187

pierrejean

XLDnaute Barbatruc
Re : Centième de seconde VBA

Re

En constatant que le classement des horaires redigés avec une forme Texte (puisque centiemes de seconde) correspond au classement classique
j'ai procédé a la recolte des horaires ,les ai classés en ordre croissant et restitués ensuite ou il l'est demandé
Si cela fonctionne avec tes données et si cette vue des choses te convient tu pourras aisement integrer le test4 que j'ai volontairement omis (vive le copier/coller)
 

Pièces jointes

  • ExempleHeureCentieme.zip
    23 KB · Affichages: 158

Pineurne

XLDnaute Junior
Re : Centième de seconde VBA

Wow, ça a l'air de bien marcher ! Mais alors tu m'as carrément maché le travail !

J'ai une question. Pourquoi mon code ne marche pas ? Quand je fais des opérations sur les heures "copiées collées" dans les cellules, ça marche, mais pas en VBA.

(pierrejean : trouves tu que mon code est mal écrit ou trop lourd ?)

EDIT : en fait je comprends ton code. J'y suis allé étape par étape. En gros, tu mets les données dans un tableau à 2 colonnes : à gauche les horaires et à droite tu retiens si ça vient de test1, test2 ou test3. Après tu les retries par ordre croissant tout en retenant à quelle "test" l'horaire correspond. Il y a par contre une partie du code que je ne comprends pas c'est ça :
Code:
Set c = ActiveSheet.Columns(1).Find("test1", LookIn:=xlValues, lookat:=xlWhole)
ligtest1 = c.Row
Set c = ActiveSheet.Columns(1).Find("test2", LookIn:=xlValues, lookat:=xlWhole)
ligtest2 = c.Row
Set c = ActiveSheet.Columns(1).Find("test3", LookIn:=xlValues, lookat:=xlWhole)
ligtest3 = c.Row
col = 3

ainsi que la façon dont tu créés ton tableau:
Code:
tableau = Range("B5:C" & Range("B4").End(xlDown).Row)

Tu peux m'expliquer ces 2 parties si ça ne te dérange pas ?


Encore une chose. En fait ma logique moi était de trier directement les heures. Une fois la plus petite heure trouvée, je la transformais en une heure nulle car je mettais dans mes conditions de ne pas prendre en compte les heures. Et mon erreur est celle la, car en changeant l'heure Excel ne comprend plus car il n'y a pas les centièmes. C'est ça ?
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Centième de seconde VBA

Re

Set c = ActiveSheet.Columns(1).Find("test1", LookIn:=xlValues, lookat:=xlWhole)
ligtest1 = c.Row

c=Recherche(Find) dans la feuille active (activesheet) en colonne A (columns(1)) ,de "test1" ,par valeur (LookIn:=xlValues) exacte ( lookat:=xlWhole)

Quant a la definition du tableau c'est classique du type
tableau=Range("B5:C20") avec en l'occuence
20 remplacé par Range("B4").End(xlDown).Row
c'est a dire derniere cellule non vide en dessous de la cellule B4

Ton code n'est pas particulierement lourd ni mal ecrit , simplement il ne correspond pas a ma logique personnelle et j'ai eu de la difficulté a le saisir c'est pourquoi je suis parti de zero

Effectivement le non fonctionnement pouvait provenir de ce remplacement

Et enfin : ce qu'il y a de formidable avec Excel c'est qu'il peut exister sensiblement autant de solutions que de programmeur
 

Pineurne

XLDnaute Junior
Re : Centième de seconde VBA

A d'accord ce "Find" c'est la version VBA de la fonctione "=RECHERCHE" qu'on peut mettre dans les cellules. Je ne l'avais jamais utilisé.

Merci pour ces explications et encore une fois merci pour m'avoir débloquer !
 

Discussions similaires

Réponses
7
Affichages
486
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…