valeur max d'une selection aléatoire

valeur max d'une selection aléatoire - VB/VBA/VBS - Programmation

Marsh Posté le 04-04-2013 à 08:55:12    

Bonjour,  
 
j'ai un petit problème... j'aimerais connaître la formule qui me permet d'avoir la valeur max d'une colonne. un exemple sera plus claire  
 
27 23 5
27 23 5
27 23 9
27 23 12
27 23 5
28 00 8  
28 00 12
28 00 11  
28 00 8
 
dans ma première colonne j'ai le jour dans la deuxième l'heure et la troisième la mesure.  
et j'aimerais connaître la valeur max de la troisième colonne pour chaque heure.
 
j'ai fais ce code la mais ça ne marche pas ...
 
x = [Max(Range("C" & i & ":C" & i + NbRevision))]
 
avec i ma variable heure
NbRevision le nombre de mesure par heure
 
en espérant avoir une réponse  
 
cordialement  

Reply

Marsh Posté le 04-04-2013 à 08:55:12   

Reply

Marsh Posté le 04-04-2013 à 11:09:37    

 
            Bonjour.

mloic a écrit :

j'ai fais ce code la mais ça ne marche pas ...

            Imprécis ‼   Qu'est-ce qui ne marche pas ?   Message d'erreur ?
 
            Ensuite ce serait judicieux de préciser le logiciel et la version ainsi que de poster le code de la procédure dans son intégralité
            encadré par les balises de code prévues à cet effet comme indiqué dans les règles de ce forum !
 
            Aide primaire :  curseur sur une instruction puis touche F1 …
 
            Edit : y a pas besoin de VBA pour le faire ...  Donc faisable directement dans la feuille de calcul (s'il est question d'Excel).
 
            Astuce :  si vraiment besoin de VBA, une fois que la formule est bonne dans une cellule, cette dernière doit être sélectionnée
                          puis dans la fenêtre  Exécution  de l'environnement VBA :  ? activecell.formula  puis valider.
                          Là cela donne la formule dans le langage natif.
                          Ensuite consulter l'aide de VBA concernant la propriété  WorksheetFunction
                          et la  Liste des fonctions de feuille de calcul disponibles dans Visual Basic  …


Message édité par Marc L le 04-04-2013 à 11:28:15
Reply

Marsh Posté le 04-04-2013 à 12:07:54    

dsl je suis tout nouveau sur ce forum ...
 
voilà mon code :
 

Code :
  1. For c = 0 To 23
  2. Moyenne = 0
  3. somme = 0
  4. NbRevision = 0
  5. For a = 2 To j
  6.     If Mid(Cells(a, 3), 1, 2) = 18 And Cells(a, 2) = c Then
  7.     NbRevision = NbRevision + 1
  8.     somme = Cells(a, 7).Value + somme
  9.     Sheets("synthese" ).Cells((c + 2), 4).Value = NbRevision
  10.     Sheets("synthese" ).Cells((c + 2), 5).Value = somme
  11.     Sheets("synthese" ).Cells((c + 2), 4).Interior.Color = vbYellow
  12.     Sheets("synthese" ).Cells((c + 2), 4).Borders.Value = 1
  13.     Sheets("synthese" ).Cells((c + 2), 5).Interior.Color = vbYellow
  14.     Sheets("synthese" ).Cells((c + 2), 5).Borders.Value = 1
  15. End If
  16. Next a
  17.     If NbRevision > 0 Then
  18.     Moyenne = somme / NbRevision
  19.     Sheets("synthese" ).Cells((c + 2), 6).Value = Moyenne
  20.     Sheets("synthese" ).Cells((c + 2), 6).Interior.Color = vbYellow
  21.     Sheets("synthese" ).Cells((c + 2), 6).Borders.Value = 1
  22. End If
  23. Next c


 
Avec somme = somme des mesures (pour ensuite calculer la moyenne)  
       NbRevision = nombre de mesure  
       Moyenne= moyenne des mesures par heure
       18 = le jour 18
       c = l'heure  
       a = les 65 000 ligne de la feuille
donc se que j'aimerai c'est d'avoir la valeur max des mesure faites sur l'heure selectionnée
 
Je sais que c'est faisable directement sur excel mais j'ai environ 600 000 mesure sur 3 semaines. De créer un programme VB me ferait gagner beaucoup de temps. Je vous ai fourni mon bout de code sur un jour.
 
J'ai Excel 2003. je n'ai pas besoin d'utiliser "WorksheetFunction" car mon programme est directement attribué à une feuille
 
En espérant que c'est plus clair  
 
Cordialement  
 

Reply

Marsh Posté le 04-04-2013 à 14:51:27    

mloic a écrit :

je n'ai pas besoin d'utiliser "WorksheetFunction" car mon programme est directement attribué à une feuille

            Moi pas comprendre !
 
            Il est bien sûr possible de ne pas utiliser les fonctions internes d'Excel et de réinventer la roue - au risque qu'elle soit carrée ! -
            mais à quoi bon sachant plus le nombre de lignes à traiter est important plus l'exécution d'une solution pure VBA est lente
            comparée à l'utilisation d'une fonction interne !
 
            Ne voyant pas trop le rapport entre la problématique et le code exposé,
            en reprenant l'exemple des colonnes du premier message copié à partir de la cellule A2 :

Code :
  1. Sub MaxEnColonne4()
  2.     Set Rg = [A2]
  3.  
  4.     For R = 2 To Cells(Rows.Count, 1).End(xlUp).Row
  5.         If Cells(R + 1, 1) <> Rg Then
  6.             Cells(R, 4) = Application.WorksheetFunction.Max(Range(Rg.Offset(, 2), Cells(R, 3)))
  7.                  Set Rg = Cells(R + 1, 1)
  8.         End If
  9.     Next
  10. End Sub


            Edit :  c'est en fait le max par jour mais bon le principe reste correct pour les heures …


Message édité par Marc L le 04-04-2013 à 15:10:26
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed