Extraction et traitement de données

  • Initiateur de la discussion Stéphanie
  • Date de début
S

Stéphanie

Guest
Bonjour à tous !

Je ne suis pas bien douée sur VBA, voire même nulle. Et j'ai un pb récurrent qui m'empêche de travailler correctement. Je dois réaliser des extractions de données afin de les traiter et de les analyser.
Par exemple, j'ai dans une colonne (A) des dates (une par ligne) du 01/01/1977 au 31/12/2003. Dans la colonne à côté , j'ai des valeurs de températures journalières.
Je souhaiterais réaliser des moyennes de ces températures selon les cas : moyennes mensuelles en sélectionnant les mois (évidemment), des moyennes annuelles en faisant le tri sur les années etc ...
Mais je ne sais pas écrire la boucle qui me permettrait de sélectionner les bonnes dates (format)puis faire écrire les résultats sur des colonnes à côté à des emplacements ligne par ligne de manière itérative.

Bon j'espère avoir été assez claire. Si vous pouviez me donner un exemple sur une petite boucle ou autre je vous serai très très reconnaissant !!
Merci,
Steph. :sick: :sick: :sick: :whistle:
 

soft

XLDnaute Occasionnel
Bonjour Stéhanie, Gérard, le forum,

J'ai d'abord aussi pensé aux TCD, mais c'est vrai qu'en VBA l'exercice est intérréssant et que les tableaux croisés sont lourds (taille et manipulation).

Voilà un essai en VBA (les dates doivent être en ordre croissant).

Edition :
J'avais un accent dans le nom du fichier [file name=Temperatures.zip size=8792]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Temperatures.zip[/file]

Message édité par: soft, à: 30/05/2006 11:08
 

Pièces jointes

  • Temperatures.zip
    8.6 KB · Affichages: 39
S

Stéphanie

Guest
rebonjour,

oui. Effectivement l'utilisation des tableaux croisés dynamiques est une solution. Je vais regarder.
Par ailleurs, je n'ai pas réussi à extraire ton fichier joint . mon serveur m'a indiqué qu'il contenait un virus... Donc tant pis !!!
Merci bcp quand même !
@+
 

soft

XLDnaute Occasionnel
Re-bonjour,
mon fichier vérolé ????

Enfin, voici le code :

Avant, quelques précisions :
Dates dans la colonne A (depuis A2)
Températures dans la colonne B (depuis B2)

Cellules nommées pour les résulats :
MaxDate
MinDate
Max
Min
Moyenne


Code:
Sub Traitement()
    Dim Début As Date, Fin As Date, I As Long
    Dim LigneDébut As Integer, LigneFin As Integer
    Dim Total As Double, Min As Double, Max As Double
    Dim MaxDate As Date, MinDate As Date
    Range('Max') = ''
    Range('Min') = ''
    Range('Moyenne') = ''
    If IsDate(Range('Début').Value) Then
        Début = Range('Début').Value
    Else
        MsgBox 'Date de début non valide', vbCritical
        Exit Sub
    End If
    If IsDate(Range('Fin').Value) Then
        Fin = Range('Fin').Value
    Else
        MsgBox 'Date de fin non valide', vbCritical
        Exit Sub
    End If
    For I = 2 To Range('A2').End(xlDown).Row
        If CDate(Range('A' & I)) = Début Then LigneDébut = I
        
        If CDate(Range('A' & I)) = Fin Then
            LigneFin = I
            Exit For
        End If
    Next I
    If LigneDébut = 0 Then
        MsgBox 'Date de début non trouvée', vbInformation
        Exit Sub
    End If
    If LigneFin = 0 Then
        MsgBox 'Date de fin non trouvée', vbInformation
        Exit Sub
    End If
    Min = 100
    Max = -100
    For I = LigneDébut To LigneFin
        Total = Total + Range('B' & I).Value
        If Range('B' & I).Value > Max Then
            Max = Range('B' & I).Value
            MaxDate = CDate(Range('A' & I).Value)
        End If
        If Range('B' & I).Value < Min Then
            Min = Range('B' & I).Value
            MinDate = CDate(Range('A' & I).Value)
        End If
    Next I
    Range('MaxDate') = MaxDate
    Range('MinDate') = MinDate
    
    Range('Max') = Max
    Range('Min') = Min
    Range('Moyenne') = Total / (LigneFin - LigneDébut + 1)
End Sub

Edition :
J'ai épuré le code des commentaires, ils ne passent pas bien...

Message édité par: soft, à: 31/05/2006 12:26
 

Discussions similaires

Réponses
45
Affichages
1 K

Statistiques des forums

Discussions
312 345
Messages
2 087 464
Membres
103 548
dernier inscrit
civpol