Calcul de somme sous condition en VBA

Fermé
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006 - 17 juil. 2006 à 12:11
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006 - 20 juil. 2006 à 16:13
Bonjour a tous

Je suis tout nouvo alors bonjour tous le monde.
Je travail actuellement sur un simulateur de controle aérien, et j'ai quelque problème avec mon VBA, énormément. J'ai débuter le VBA, il y a 2 semaines.

Bon voila mon problème

Je doit déterminer le nombre d'avion ayant un changement par période de 2 minutes.

https://www.cjoint.com/?hrkqNxXF6V

voila pour l'instant le début de mon programme VBA

Pour cela je doit déterminer quelque condition
regarder si mon avion est bien compris dans l'interval de temps, regarder si c'est un avion du secteur aérien pris en compte, la sa va pour le moment, sa j'ai réussi.

Maintenant la partie qui bloque le plus pour moi.
Je doit déterminer combien d'avion ont eu un changement de +ou- 15°
sur la colonne D
et en faire la somme, des avions bien sur(le prog que j'ai fai, j'ai pluto l'impression qu'il somme les dégré lui)

je doit donc determiner si mon avion a eu cette modification, et vérifier que cette modification est bien celle de cette avion

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 1 avion ici

Le problème que je rencontre c'est comment faire pour mettre en place ces conditions, et avec l'itération, quand on passe a la deuxième ligne, vérifier que l'avion sur lequel les calculs sont fait, n'a pas déja été pris en compte.

donc quand on ai en ligne 2, on verifie que le nom de l'avion n'est pas le meme que les lignes précédentes, et ainsi de suite

ligne 4, on regarde ligne3,ligne2, ligne1
...

Merci
A voir également:

32 réponses

Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
17 juil. 2006 à 13:14
Hello superbaptbapt,

En VBA, tu peux faire un truc de ce genre :
- trier tes lignes sur n° avion (colonne A) / angle (colonne D) (et l'heure en second peut-être ? à toi de voir)
- balayer tes lignes : pour un avion donné, noter la valeur d'angle de début et fin
- voir si la différence est >= 15 ou <= -15
- remettre tes lignes dans le bon ordre.

Pour éviter les mouvements d'écran, tu mets un
Application.ScreenUpdating = False
devant ton premier tri , et tu remets à True après le 2ème.

Avant de trier tes lignes, numérote-les dans une colonne inutilisée, de façon à les retrier sur ce critère pour les remettre dans l'ordre initial.

Y'a sûrement d'autres façons de faire... Celle-là est facile à décrire.
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 13:21
Facile en théorie oui

J'ai commencé le VBA, il y a 2 semaines, pour moi c'est un peu flou la.

'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°
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

Voila ma macro, mais elle ne me donne pas du tout les bonnes valeurs. Je pense,qu'elle me calcul la somme des angles ou il y a eu un changement
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 14:03
Ok le tri me parait bien comme solution, mais je ne sais pas faire.
Comment faire un tri par nom d'avion, alors que l'on ne les connait pas a l'avance.

Si quelqu'un peut me montrer comment trier mes données.
Et me dire comment mettrele trie de mes données sur la feuille 2, et non pas sur la feuille 1, c'est simplement pour faciliter la lecture.

La vrai feuille de simulation, fait du 5000 lignes sur 30 colonnes, et la encore c'est aussi du simplifier

Merci
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
17 juil. 2006 à 14:43
Re,

Regarde si ça te convient :
https://www.cjoint.com/?hroRJ7MkuO

C'est la macro Avions. Résultats dans Feuil2.

P.S. J'ai oublié un Plage.Cells.Clear pour virer la numérotation des lignes pour le tri...
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 14:55
Merci, tu me sauve la vie

Part contre c'était le tri que je voulais en feuille 2, mais sa je devrais pouvoir le changer de place tous seul.

Je comprend pas comment le système fait pour trouver quel est la valeur de départ.
Et ne serait t'il pas plus simple de laisser les valeurs dans le sens de départ, mais uniquement trié par nom
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528 > superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 15:04
En fait, tout se fait dans Feuil1. En résultat dans Feuil2, je mets les avions dont la déviation (en colonne B) est supérieure ou égale à 15°.

Je comprends que tu voudrais dans Feuil2 la liste de Feuil1, mais triée, c'est ça ? Le plus simple, c'est de copier Feuil1 dans Feuil2, et de trier ensuite Feuil2.
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006 > Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024
17 juil. 2006 à 15:11
Y a t'il une fonction qui peut copier de la colonne A à i
sur une page x, en VBA?

Et comment modifier ton progamme afin d'avoir les données dans leur ordre d'arrivée et non plus dans l'ordre croissant des angles, il faut que je modifie la ligne
key2:=range("C2"),order:=xlAscending
que je remplace l'angle par le temps
et la je devrai obtenir par valeur de temps.

Car les calculs d'angle donnent la valeur entre le max et le min

alors que cela doit etre fait a partir de la valeur de départ.

c'est pour cela, que je veu le mettre par ordre de temps
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
17 juil. 2006 à 15:22
C'est tout à fait ça : en mettant C2 au lieu de D2 tu auras le critère Temps dans ton tri.

Pour la copie de colonnes, voici un petit code simple :
Sub CopieCols()

  ' copie des colonnes C à F de Feuil1
  ' dans Feuil3 à partir de la colonne G
  Sheets("Feuil1").Activate
  Columns("C:F").Copy
  Sheets("Feuil3").Select
  Columns("G:G").Select
  ActiveSheet.Paste
  Range("A1").Select
  
End Sub
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 15:27
J'ai essayer de modifier, je ne comprend pas, le tri ne se fait pas.
du moins pas dans le bon sens

AIRONLY FS 16:45:25 316
AIRONLY FS 16:45:30 316
AIRONLY FS 16:45:35 316
AIRONLY FS 16:45:40 316
AIRONLY FS 16:45:45 316
AIRONLY FS 16:45:50 316
AIRONLY FS 16:45:55 316
AIRONLY FS 16:45:20 319
AIRONLY FS 16:45:15 322
AIRONLY FS 16:45:10 325
AIRONLY FS 16:45:05 332
AIRONLY FS 16:45:00 339
AIRONLY FS 16:44:55 343

y a une petite erreur dans les temps, il prend toujours en compte la colonne D
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528 > superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 15:33
Normalement, si tu as :
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, _
                 Key2:=Range("C2"), Order2:=xlAscending, _
                 Header:=xlYes
ça doit trier par heures.
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006 > superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 15:44
C'est bon, je vien de le lancer sur une nouvelle page, et les résultats sont bon.

Par contre, il me recopie un peu trop de ligne, exemple; la mise en place des heures, mais je vai modifier ma macro de départ, car je n'ai pas spécifier ou copier cette comparaison, donc a mon avis, c'est pour cela qui me recopie tout mes données a chaque fois.


Merci de ton aide.

Je reviendrais de toute façon.

La se n'était que les données métriques les plus simple, que l'on m'a demandés de calculer, maintenant sa va etre les calculs en coordonnées spériques.

Un régal

Merci a toi
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
17 juil. 2006 à 15:55
Dernier renseignement

Je vien de revoir les calculs

comment modifier les formules, pour qu'il prenne en compte la valeur min ou max, et non la dernière valeur

Car qaund on prend
TBS_EW initial 85
TBS_EW final 29

on obtient -59, c'est juste

mais la valeur min que l'on a
c'est
TBS_EW min 26
et on obtient alors -56

Le sytème va donc tomber sur un os, si la valeur initial est égale à la valeur final.
Il va donc dire, qu'il n'y a pas eu de changement

A moins que se soit juste pour connaitre le nombre final après toute les modifications, alors dans se cas, c'est moi qui me trompe
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
17 juil. 2006 à 18:52
Me rev'là... j'avais à vaquer un peu...

Donc je gère le Min et le Max, et calcule la déviation avec (Max-Min).
Regarde si ça fait ce que tu veux.
https://www.cjoint.com/?hrs0oRogoC
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
18 juil. 2006 à 08:34
Bonjour Armojax

C'est quasiment sa,j'avais fait une erreur d'explication, c'est entre 2 valeurs, que je doit déterminer si il y a eu un changement.

Ce que je veu savoir c'est s'il y a eu une variation de plus de 15 degre a un moment?

valeur initial 85
valeur2 75
valeur3 60

entre valeur inital et valeur2, on a 10, donc pas de changement conséquent.
par contre entre valeur2 et valeur3, on a 15, d'ou changement.
le programme doit alors arreter, compter un changement, et passer a l'avion suivant.

Sa doit déja etre mieu expliqué la.

Sinon, j'ai remarqué queque chose, quand je modifie la valeur de TBS_EW, l'avion TBS_EWC change aussi, il prenne toujours les meme valeurs alors que ce n'est pas le meme avions?

bizard


merci
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
18 juil. 2006 à 10:06
Bonjour superbaptbapt,

Une nouvelle mouture, que j'espère plus conforme...
https://www.cjoint.com/?hskcSMTB7Q

Donc là, on constate l'écart de 15° entre deux valeurs successives, et non pas entre un Min et un Max.

Je suis surpris pour ce que tu dis de TBS_EW et TBS_EWC...

Tiens-moi au courant... Mais je dois m'absenter un peu dans la matinée.
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
18 juil. 2006 à 10:48
Tout compte fait, la macro avec la difference entre max et min, convient a mes supérieurs.

Par contre j'aimerai rajouter quelque ligne de code, mon système se fesant entre interval de temps et secteur donnée.

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

qui me permet de savoir si mon avion est dans tel interval ou un autre et dans le secteur FS

est'il possible de les rajouter
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
18 juil. 2006 à 11:04
https://www.cjoint.com/?hsk7dzhSCz

je vien de modifier la macro, pour quel le tri se fasse en feuil2 et les résultats en 3

mais comment ajouter le temps et le secteur

et retirer que lorsque je lance ma macro prog, le temps se mette sur la feuille 2

faut'il que je lui disse, copie le prog temps sur la feuille x
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
18 juil. 2006 à 14:33
J'ai modifié :
- Feuil1 ne bouge pas
- la liste triée se trouve dans Feuil2
- les résultats sont dans Feuil3

J'ai adapté les 2 macros :
- EcartMinMax : écarts entre Mini et Maxi
- EcartsConsec : écart entre deux mesures consécutives
Comme ça tu as le choix.

Dans ta macro prog, j'ai rajouté Application.ScreenUpdating en début et fin, pour éviter la mise à jour écran.

J'espère qu'on progresse... Je ne maîtrise pas vraiment ton sujet, évidemment...

https://www.cjoint.com/?hsoB2m0NC6
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 08:31
Bonjour Armojax

Désolé de ne pas avoir pu répondre plus tot, le réseau de toute l'entreprise a des ratés.

Ne tend fait on progresse très vite, pour cet algorithme.
Je t'explique, plus en détail, tu est en train de m'aider a développer un algorithme fourni par la NASA (pour de vrai), et oui c'est possible.

Je te donne leur algorithme
_Heading Change.The number of aircraft that made a heading change of greater than 15 degrees during a 2-minute interval.

Et voila comment on devient la plus grande puissance mondial, pas d'explication. Il faut donc analyser, et faire les bons choix.

Par contre, je rencontre déja des problèmes avec cjoint, est oui page excel de 2.80 MO, un peu trop gros

Maintenant, se qu'il faut rajouter, c'est l'élément 2 minutes, sur l'ensemble des valeurs, la première page que j'ai fourni ne contenant que les valeurs du premier interval.

https://www.cjoint.com/?htiytqPUL3

la j'ai mis ma nouvelle macro, j'ai tou mis sur une meme page VBA, sa évite d'éffacer les anciennes valeurs, et les opérations se font maintenant dans l'ordre que je veux.

https://www.cjoint.com/?htiFENcEkk

et la, la page complete de donnée

Par contre je n'est pas mis encore les résultats.
J'ai essayer de mettre en place les modifications sur le balayage sur une période et sur un secteur.
Mais étant données que je n'est pas encore, fait les résultats.
Pour les résultats, je ne les veu plus en page 3, mais en 2, a la suite, en colonne H.

Tu vera en lancant la macro, sa devrais se mettre en place.


Merci de ton aide
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 08:52
Ne serait'il pas possible de mettre l'affichage des résultats dans la boucle de balayage

Entre next b et next c

mettre
Sheet("Feuil2").Cells(c,8).Value=J-2

le sytème ne devrais t'il pas alors calculer la bonne valeur.
Enfin, j'ai essayer, mais sa na pas fonctionné, j'ai des -2 partout
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 09:53
https://www.cjoint.com/?htj0xPu5UT

Avec cette page, c'est un peu plus facile, j'ai retirer énormément de valeur.

Et je n'est pris que 2 interval de temps.

J'ai mis les valeurs théoriques que l'on doit obtenir
en couleur
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 10:25
Il y a une modification a faire dans le code, mais meme avec sa je n'arrive pas a avoir les résultats

For c=2 To Range("C65536")....

C au lieu de B
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
19 juil. 2006 à 11:20
Hello,

Gros orage juste au-dessus, alors j'ai laissé ma bécane un moment...

Maintenant que je pige mieux le PB, j'ai tout cassé et je reprends à zéro.
En fait, ce qu'il me manque maintenant, c'est exactement les restitutions que tu veux.

J'ai noté :
- le nombre d'avions présents dans un secteur, par tranches de 2 minutes : en faut-il la liste, ou seulement le nombre ?
- les avions pour lesquels on a décelé une déviation de 15° au moins (mesurée entre le Mini et le Maxi), et ce indépendamment des tranches de 2 minutes.

C'est bien ça ?
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 11:26
-le nombre d'avions présents dans un secteur, par tranches de 2 minutes : en faut-il la liste, ou seulement le nombre ?

juste le nombre, la liste est inutile

- les avions pour lesquels on a décelé une déviation de 15° au moins (mesurée entre le Mini et le Maxi), et ce indépendamment des tranches de 2 minutes.

en ce qui concerne les déviations, il faut le faire par tranche de 2 minutes

comme indiqué sur le dernier exemple que j'ai joint

les valeurs en G, c'est le nombre de fois ou il y a eu un changement des paramètres avions, sur un secteur voulu
0
Armojax Messages postés 1860 Date d'inscription mercredi 19 janvier 2005 Statut Membre Dernière intervention 2 octobre 2024 1 528
19 juil. 2006 à 14:00
Bon, j'ai une nouvelle propale avec un fichier complet.
Jette un oeil et dis-moi si on touche au but.
https://www.cjoint.com/?htoaSNsrrS
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 14:08
Quasiment, par contre la debut des heures, doit etre un nombre en 00 a la fin, et non pas la première valeur que j'orai

la colonne A et B sont inutile, je pense
il y est affiché la valeur max-min?
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 14:21
Je vien d'essayer sur mon classeur1

https://www.cjoint.com/?htosTxCx30

le système ne prend qu'un interval de
16:44:15 4:46:14 PM

alors que je devrais avoir de 16:44:00 à 16:46:00
ou 16:44:00 à 16:45:59, afin de ne pas avoir aprendre ne compte 2 fois les avions qui serait sur une valeur juste

de plus, le nombre d'avion calculer en H, correpond au nombre d'avion dans le secteur qui est différent du nombre d'avion ayant eu un déviation

Nombre

4

et

Nombre d'avions : 3
Avion Angle
EFL41 41
TBS_EW 45
TBS_EWC 59

il faudrait mettre le "Nombre d'avions" a la place de l'autre en H
0
superbaptbapt Messages postés 32 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 20 juillet 2006
19 juil. 2006 à 14:42
J'ai vérifier les valeurs sur celui que tu m'as envoyer

de
Tranche Début Fin Nombre

1 4:44:15 4:46:14 8

le nombre réel est 7

et sur celui de toute a l'heure, la calcul donne 4, alors qu'on devrait avoir 3

Il y a peut etre besoin de retirer 1.

Je vai voir en comptant la période 2
0