Calcul Somme suivant différentes conditions

baptbapt

XLDnaute Occasionnel
Bonjour a tous

Voila mon nouveau problème
Et oui, j'ai encore des petits défaut pour mes VBA, après tout je n'en fait que depuis 2 semaines, contre 3 pour excel.(On ne rigole pas, merci)

http://cjoint.com/?hnmPKMiq2T

Je joint mon fichier de départ.
en couleur les différents avion, j'ai simplifier les variables d'entrée pour l'exemple, je n'ai mis uniquement que les avions du meme secteur et n'ai pris en compte que les avions sur 2 minutes

Voila le problème que l'on me pose

Calculer le nombre d'avion ayant eu un changement de + de 15° durant un interval de 2 minutes.

Voila mon problème, mettre les intervalles pour les heures, pas de problèmes, j'ai réussi.

Mais la macro pour la question, je suis dans le flou.

Je pense que pour y arriver je devrais faire différents comparaison, mais voila, je sais pas comment toute les écrire en VBA

Dim i As Variant
Dim z As Range,x%

For p=2 To Range("B65536").End(xlUp).Row
For Each z In Range("E2:E"&i+1)
If Cells(p,3).Value>=Range("E"&z.Row).Value Then
If Cells(p,3).Value<Range("F"&z.Row).Value Then

_pour l'instant je compare les valeurs suiant mes plages pour savoir si je les prend en compte
mais maintenant je sais plus

Il faut que je prenne uniquement les avions du meme secteur
donc en VBA

If Cells(p,2).Value="FS" Then

Sa doit etre sa
ET maintenant, comment prendre en compte et déterminer si mon avion a eu une variation de -15° ou +15° par rapport au headding colonne D
il faudrait donc que sur cette boucle je prenne le premier avion de la liste est je regarde jusqu'a la fin de l'interval si j'ai cette variation,
si oui, alors l'avion a eu une variation et je passe a l'avion suivant
si non, je passe a l'avion suivant

premier avion, je regarde le headding donc valeur de D1 et je la compare avec les autre valeurs de headding qu'a eu cette avion, lors des 2 minutes
donc savoir si Di est supérieur a D1-15 et D1+15

et enfin, je fait la somme de tout les avions ayant eu une variation

Ici en calcul réel,5 avions ont eu une variation

Merci
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

Sub Heading Change()

Do
i = InputBox("Combien de valeurs de 1 à 256", "Nombres de minutes", 30)
Loop Until (Val(i) > 0) And (Val(i) < 257)

Dim z As Range, x%
Dim s As Range, x%

Range("G2:G" & Range("G65536").End(xlUp).Row).Select
Selection.clearcontests

For p = 2 To Range("B65536").End(xlUp).Row
For Each z In Range("E2:E" & i + 1)
If Cells(p, 3).Value >= Range("E" & z.Row).Value Then
If Cells(p, 3).Value < Range("F" & z.Row).Value Then
If Cells(p, 2).Value = "FS" Then
For q = 2 To Range("A65536").End(xlUp).Row
For Each s In Range("A2:A" & i + 1)
If Cells(q, 1).Value = 'valeur de q+1 à dernière valeur de q de l'interval' Then
si oui, next q
si non, faire If Cells(q, 1).Value = 'valeur des q précédente' Then
si oui, next q
si non, on recherhce si la valeur a subit une variation
...

End Sub

Voila le début de mon code VBA

Je bloque sur certaine condition
comment savoir si ma valeur en A n'a pas déja été utilisé
donc la comparer avec les valeurs en amont et en aval
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

Je reprend mon code, il y a avait une erreur qui aurait tout bloqué, donc voila

a partir de

For q = 2 To Range("A65536").End(xlUp).Row
For Each s In Range("A2:A" & i + 1)
If Cells(q, 1).Value = Cells(q - i, 1).Value Then
Next q 'car valeur déja calculé, avion déja vu
Else
'regarde si variation de +15°/-15°
'compare la valeur en D, avec les otre valeurs en D
'uniquement pour les valeurs ayant le meme nom en A

et oui c'est totalement dingue comme VBA, du moins pour moi
par contre, je ne sais pas si cette ligne est bonne

If Cells(q, 1).Value = Cells(q - i, 1).Value Then
"je regarde si ma valeur a déja été vu avant"

et aussi comment terminer mon prog

merci
 

porcinet82

XLDnaute Barbatruc
Re : Calcul Somme suivant différentes conditions

Salut,

Comment ca tu veux comparer avec les valeurs que tu avais avant? Tu veux dire que tu veux comparer la cellule de la ligne en cours avec toutes les lignes précédentes?

Si c'est le cas, il faut que tu fasses un truc du genre :
PHP:
Dim cel As Range
For Each cel In Range("A1:" & Cells(q, 1).Address(0, 0))
    'la tu fais ton test
Next cel

@+
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

Oui, quand je fais mon calcul, je regarde le nom de mon avion, et je le compare avec les autre donnée du meme avion, mais a un autre moment T.

Quand je fais ma boucle, je passe donc a la valeur suivante du tableau, si c'est le meme avion, alors je vai refaire le calcul, donc ma somme sera fausse.

C'est donc pour sa, que je veu vérifier la condition
regardé valeur précédente, toute les valeurs précédente

exemple quand je suis en A4
je regarde les valeurs A3/A2/A1
si la valeur et la meme, alors je passe en A5

ainsi de suite
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

Ok je remplace par ton code, mais maintenant, je ne sait pas comment écrire le reste de la macro

For Each cel In Range("A2:" & Cells(q, 1).Address(0, 0))
...

Il faut que je regarde si ma valeur a été modifié de +15° ou -15°
pour l'avion du meme nom

TBS_EW FS 16:44:15 _ 85
TBS_EW FS 16:44:20 _ 75
TBS_EW FS 16:44:25 _ 73
TBS_EWC FS 16:44:25 _ 85
TBS_EW FS 16:44:30 _ 61
TBS_EWC FS 16:44:30 _ 75
TBS_EW FS 16:44:35 _ 49
TBS_EWC FS 16:44:35 _ 73

La sur cet exemple l'avion TBS_EW a eu une varion supérieur a 15°
TBS_EWC a eu aussi une variation, mais pas de 15°

donc j'ai 1 avion en résultat de calcul
Donc je doit établir la macro capable, de faire
regarder colonne D est regarder si modification de +15/-15
pour meme avion
et bien sur, quand je passe a l'avion 2,donc a ma deuxieme ligne, si avion précédent est le meme, alors on passe au suivant

Merci
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

Je vien de réaliser une macro, mais elle ne me donne que des erreurs
elle ma remplacer ma colonne A par des 0
et me donne des résultats totalement faux

Dim z As Range, y%
Dim cel As Range, c%
Dim avion As Byte

Range("G2:G" & Range("G65536").End(xlUp).Row).Select
Selection.ClearContents

For p = 2 To Range("B65536").End(xlUp).Row
For Each z In Range("E2:E" & i + 1)
If Cells(p, 3).Value >= Range("E" & z.Row).Value Then
If Cells(p, 3).Value < Range("F" & z.Row).Value Then
If Cells(p, 2).Value = "FS" Then
For q = 2 To Range("A65536").End(xlUp).Row
For Each cel In Range("A2:" & Cells(q, 1).Address(0, 0))
' regarde si variation de +15°/-15°
Cells(q, 1) = avion
If Cells(q, 4).Value >= Range("D" & cel.Row).Value - 15 Then
If Cells(q + cel, 1).Value = avion Then
Cells(cel.Row, 7).Value = Cells(cel.Row, 7).Value + 1
Exit For
End If
End If
Next cel
Next q
' If Cells(q, 4).Value <= Range("D" & cel.Row).Value + 15 Then
' If Cells(q + cel, 1).Value = avion Then 'faux
End If
End If
End If
Next z
Next p
 

porcinet82

XLDnaute Barbatruc
Re : Calcul Somme suivant différentes conditions

Salut baptbapt,

Je n'ai pas regardé en détails le code mais j'ai vu quelque chose qui permet d'expliquer tes 0 partout.
Tu utilises la ligne suivante Cells(q, 1) = avion

Et tu n'utilises pas la variable avion avant, tu ne la déclare pas, tu ne lui affecte aucune valeur, c'est donc normal que tu n'es que des 0

@+
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

'Heading Change
Dim z As Range, y%
Dim cel As Range, c%

Range("G2:G" & Range("G65536").End(xlUp).Row).Select
Selection.ClearContents

For p = 2 To Range("B65536").End(xlUp).Row
For Each z In Range("E2:E" & i + 1)
If Cells(p, 3).Value >= Range("E" & z.Row).Value Then
If Cells(p, 3).Value < Range("F" & z.Row).Value Then
If Cells(p, 2).Value = "FS" Then
For q = 2 To Range("A65536").End(xlUp).Row
For Each cel In Range("A2:" & Cells(q, 1).Address(0, 0))
' regarde si variation de +15°/-15°
' Cells(q, 1) = avion
If Cells(q, 4).Value <= Range("D" & cel.Row).Value - 15 Or Cells(q, 4).Value >= Range("D" & cel.Row).Value + 15 Then
If Cells(p, 1).Value = Cells(q, 1).Value Then
Cells(cel.Row, 7).Value = Cells(cel.Row, 7).Value + 1
Exit For
End If
End If
Next cel
Next q
End If
End If
End If
Next z
Next p

Je l'avais retiré après
Avec cette modification, les valeurs sont toujours fausses, il me donne la somme des changement, et non pas le nombre d'avion qui ont subit un changement
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

Je vai essayer de faire les explications les plus complète possible

alors
on prend la ligne2
on regarde si C2 compris entre E2 et F2 (plage de valeur)
si oui on regarde si B2 est égale a "FS" secteur aérien
après, on regarde si D2 change dans le temps, variation +15/-15
avec la condition si changement en Di, alors Ai=A2, meme avion
on regarder si A1=A2
si oui, alors l'avion a déja été pris en compte pour les calcul
si non, on a un changement

on passe a la ligne3
on regarde si C3 compris entre E2 et F2 (plage de valeur)
si oui on regarde si B3 est égale a "FS" secteur aérien
après, on regarde si D3 change dans le temps, variation +15/-15
avec la condition si changement en Di, alors Ai=A3, meme avion
on regarder si A2=A3 et A1=A3
si oui, alors l'avion a déja été pris en compte pour les calcul
si non, on a un changement

...

et enfin on fait la somme du nombre total de changement


merci
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

On m'a dit qu'il serait possible de faire un tri pour mes calculs, mais je reste toujours dans le vague, décidemment c'est fréquent chez moi.

Comment faire un tri de mes données,uniquement par nom, alors que les noms d'avions ne sont pas connues a l'avance.

Il sera ensuite possiblede déterminer si il y a eu changement

EW 80 valeur de départ
EW 75 valeur min
..

Ew 100 valeur max

après on fait la différence de valeur de départ avec min et max
et on détermine s'il y a eu changement.
Sur période de temps et secteur

Merci
 

baptbapt

XLDnaute Occasionnel
Re : Calcul Somme suivant différentes conditions

Tout compte fait ya de gros problème, du moins pas enorme, mais le système ne s'arrete pas des que j'ai la variation de 15°
mais va jusqu'a la valeur final

donc si en initial j'ai 85, et en final 29, sa marche
mais si j'ai 85 et 85, sa marche plus, alors qu'il est possible qu'entre les 2, j'ai eu 29

Si quequ'un trouve mon problème, et peut me le solutionner

Je l'en remercie d'avance

Merci
 

porcinet82

XLDnaute Barbatruc
Re : Calcul Somme suivant différentes conditions

re,

Pas sur d'avoir tout compris dans ce que tu veux faire et doncsur ton code, mais je l'ai modifié de la manière suivante, dis moi si ca te convien :
PHP:
Sub Avions()
  Dim NbAvions  As Integer
  Dim AngleIni  As Integer
  Dim Déviation As Integer
  Dim I         As Long
  Dim J         As Long
  Dim Derlig    As Long
  Dim Avion     As String
  Dim Plage     As Range
  
  'Application.ScreenUpdating = False
  Sheets("Feuil2").Activate
  
  ' dernière ligne utile de la feuille
  Derlig = Cells(65536, 1).End(xlUp).Row
  
  ' numérotation des lignes en colonne 10 (colonne J)
  Set Plage = Range(Cells(1, 10), Cells(Derlig, 10))
  With Plage
    .Formula = "=ROW()"
    .Copy
    .PasteSpecial Paste:=xlPasteValues
  End With
  Application.CutCopyMode = False
  
  ' tri des lignes sur AVION / ANGLE (colonnes A et D)
  Cells.Select
  Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, _
                 Key2:=Range("C2"), Order2:=xlAscending, _
                 Header:=xlYes
  
  ' balayage des lignes et comptage des avions concernés
  J = 0
  I = 3
  Sheets("Feuil3").Cells.ClearContents
  For I = 3 To Derlig
      If Cells(I - 1, 1).Value = Cells(I, 1).Value Then
        Déviation = Cells(I - 1, 4).Value - Cells(I, 4).Value
        If Déviation >= 15 Or Déviation <= -15 Then
          J = J + 1
          Sheets("Feuil3").Cells(J, 1).Value = Cells(I, 1).Value
          Sheets("Feuil3").Cells(J, 2).Value = Déviation
        End If
    End If
  Next I
  If Déviation >= 15 Or Déviation <= -15 Then
    J = J + 1
    Sheets("Feuil3").Cells(J, 1).Value = Avion
    Sheets("Feuil3").Cells(J, 2).Value = Déviation
  End If
  
  ' résultats dans "Feuil3"
  Sheets("Feuil3").Cells(J + 2, 1).Value = "Nombre d'avions : " & J
  Sheets("Feuil3").Activate
  Cells(1, 1).Select
  
  Application.ScreenUpdating = True
End Sub

@+
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 501
dernier inscrit
talebafia