IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Calcul de la déviation


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut Calcul de la déviation
    Bonjour à tous,
    Pour une fois j'ai une question claire et précise...
    Y a t'il une fonction permettant de calculer la déviation sous VBA?

    Merci de votre aide,
    Johann

  2. #2
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Pour une fois j'ai une question claire et précise ...
    Déviation de quoi?

    La je trravail sur la déviation d'une trajectoire semi géodésique sur une surface ellipsoidale. Si c'est ce que tu veux alors non, ou alors ca m'arrangerais de le savoir
    une recher google parle pas mal de la déviation des rayon lumineux lors d'un changement de milieu (loi de descarte) mais aussi plus complexe de la déviation d'eu à la gravitation, mais dans une première approche on peu approché ca par une variation continu d'indice du milieu ca marche bien en plus on retombe sur la loi de descarte.

    Sinon un des résultats renvoi sur developpez .com et la on parle de la déviation d'une variable au court du temps (en gros de l'approx numérique de la dérivé en fonction de t).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Désolé,
    je cherchais pas aussi compliqué.
    Voilà, je x valeurs dans un tabeau (5, 7, 9, ...),
    je souhaite calculer la déviation, par rapport à la moyenne, de ces valeurs..., sachant le tableau n'est pas fixe...
    J'espère que je suis assez clair cette fois.

    Johann

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2009
    Messages : 9
    Par défaut
    Salut,
    voici l'instruction demandée. Ici on calcule la déviation d'une série de données existantes dans la colonne A (de la ligne 1 jusqu'à la ligne 50) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    X = Application.WorksheetFunction.StDev(Range("A1:A50"))
    ;-)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Merci Lonely1,

    le problème, ce que je ne sais pas à quelle ligne s'arrete la série de données.
    J'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dev = Application.WorksheetFunction.StDev(Range("B2", "B" & a))
            Range("B" & a + 4).Value = Dev
    ou a désigne la ligne à laquelle se termine ma série de donnés, mais cette formule me renvoie 0 dans tous les cas!

  6. #6
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Tu parles de la variance?

    Pour ton code, essaiesCordialement,

    PGZ

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Bonjour pgz,

    Je ne parle pas de variance, mais belle et bien de déviation.
    Merci pour ton code, mais j'avais déjà essayé, et le résultat est une fois de plus 0!!
    J'avoue que je comprends pas trop!!

  8. #8
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Quand tu affiche a tu as quoi comme valeur?
    Si ta des problème pour connaitre la valeur de a regarde ici

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Après plusieurs vérification,

    Ce que je recherche, c'est l'écart type!!
    Je pense que je devrais trouver la fonction....

  10. #10
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 126
    Par défaut
    Salut

    Peut être comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dev = Application.WorksheetFunction.StDev(Range("B2", cells(rows.count,"B").End(XlUp)))
    cells(rows.count,"B").End(XlUp).Offset(4,0).value = Dev
    Ou encore en une ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells(rows.count,"B").End(XlUp).Offset(4,0).value = Application.WorksheetFunction.StDev(Range("B2", cells(rows.count,"B").End(XlUp)))
    En esperant tomber juste
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  11. #11
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Sauf que la déviation, ça n'existe pas. StDEv, ça doit être l'écart-type.

    Pour ton pb, si tu as plusieurs feuilles, il faudrait mettre quelque chose devant le Range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("NomFeuille").Range("B2:B" & a)
    Et si ça continue, vérifie la valeur de a.

    Cordialement,

    PGZ

  12. #12
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Je me disai bien que en francais je n'aivais jamais vu deviation. standard deviation est la tradution de ecart type pour nos amis anglo saxon

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Si j'affiche "a"?
    Tout dépend de la "longeurs" de ma série de donnés... Si j'ai deux ligne, alors a=3 et ainsi de suite.

    Merci QWAZERTY pour le code,
    mais j'ai toujours 0 en sortie...

    Re,

    Petit point sur le problème.
    Si je précise la feuille, la valeur retournée est toujours 0, bien que la valeur de a soit la bonne...

    Ah, les mystères de la programmation

  14. #14
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Tu peux montrer où tu en es de ton code?

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Pas de problème.

    Voici le code entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    Sub Sheet_resistance()
     
    Set NewBook = Workbooks.Add  'creation d'un nouveau fichier
     
    Dim nom_fichier As String 
    nom_fichier = ActiveWorkbook.Name  
     
    Dim Counter     'Declaration de counter
    Counter = Application.GetOpenFilename(fileFilter:=",*.map", MultiSelect:=True) 
     
    Application.ScreenUpdating = False    
     
    Dim a, Dev As Integer 
    a = 1 'initialisation a 1
     
    On Error GoTo suite
     
    While Counter(a) <> ""   'Condition
        Workbooks.OpenText Filename:=Counter(a), Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
                xlDoubleQuote
     
        Dim file, newname, average, average_value, deviation, deviation_value, unit  As String    'declaration de la variable newname comme charactere
        file = ActiveWorkbook.Name
        newname = ActiveSheet.Name
        average = Range("D1")
        average_value = Range("C2")
        deviation = Range("E1")
        deviation_value = Range("D2")
        unit = Range("E2")
     
        Windows(nom_fichier).Activate
            Worksheets(1).Range("A" & a + 1) = newname
            Worksheets(1).Range("B" & a + 1) = average_value
            Worksheets(1).Range("C" & a + 1) = deviation_value
     
        a = a + 1
     
        'fermeture de file
        Windows(file).Activate
        ActiveWindow.Close savechanges:=False
     
    Wend        
    %%%%%%%%%%%%%%%%%%%%%%%%
     
    suite:
    'Mise en forme
        Windows(nom_fichier).Activate
            Range("A1").Value = "Sample Name"
            Range("B1").Value = average & unit
            Range("C1").Value = deviation
     
            Range("B" & a + 2).Value = "=AVERAGE(R[" & CStr(-a) & "]C:R[-1]C)"
            Range("C" & a + 2).Value = "=AVERAGE(R[" & CStr(-a) & "]C:R[-1]C)"
            Range("A" & a + 2).Value = "Average"
     
            Range("A" & a + 4).Value = "Deviation"
            Dev = Application.WorksheetFunction.StDev(Range("B2:B" & a))
            Worksheets(1).Range("B" & a + 4).Value = Dev
     
            MsgBox a
            Name = "Sheet_Resistance_Resume"
            Range("A1:F1").Font.Bold = True
            Cells.EntireColumn.AutoFit
            Cells.HorizontalAlignment = xlCenter
     
    Application.ScreenUpdating = True           'Mise a jour de l'ecran
     
    Application.Dialogs(xlDialogSaveAs).Show    'Ouvre la boite de dialogue save as
     
    End Sub
    Et voici... Le problème est toujours là, cependant, il y a du nouveau. Si j'importe plus de deux fichiers, le résultat pour la valeur de l#écart type est toujours de 1!!

    En passant, je sais que la boucle While n'est pas terrible, je suis tout oui à vos suggestions pour améliorations.

    Merci.

  16. #16
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Je pense avoir trouver mon erreur!! Quel Boulet

    Je déclarais ma variable "dev" comme "Integer"....
    En la remplaçant par "string", çà fonctionne.

    Merci de votre aide,
    Johann

  17. #17
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    ET donc tu avais juste oublié de préciser que tu travaillais sur un autre classeur...

    Oublie les .activate, .Select, ActiveWorkbook, ...

    Quand tu veux un range d'un autre classeur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NewBook.Worksheets("NomFeuille").Range(...)
    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    With NewBook.Worksheets("NomFeuille")
        .Range(ceci) = ... .Range(Cela)
        ....
    End With
    PGZ

  18. #18
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Citation Envoyé par johannj Voir le message
    Je pense avoir trouver mon erreur!! Quel Boulet

    Je déclarais ma variable "dev" comme "Integer"....
    En la remplaçant par "string", çà fonctionne.

    Merci de votre aide,
    Johann
    Le type single devrait être plus approprié.

    PGZ

  19. #19
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 124
    Par défaut
    Salut pgz,
    Je comprends pas très bien ta remarque concernant les classeurs. En effet, ma série de données et le calcul de l'écart type sont dans le meme classeur et la meme feuille...
    Puis-je te demandé de plus amples détails STP?

    Pour la suite, je suivrais tes conseils et tenterrai de ne plus utiliser les .activate

  20. #20
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 126
    Par défaut
    Re
    On gagnerait sans doute du temps si tu fournissais un Zip avec les fichiers nécessaire a l'exécution de ton code.

    En ce qui concerne le code par lui même, commence par désactiver la ligne "On error Resume Next", ce genre de ligne ne se rajoute qu'a la toute fin de la création d'un code, quand il est en principe exant de bugg, il y a de grande chance qu'une partie de ton code plante et la macro passe a la suite ... d'ou certainement le 0 final.

    a++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. calcul de taux de déviation d'un variable
    Par lamlouma dans le forum C#
    Réponses: 4
    Dernier message: 10/04/2007, 11h06
  2. [TP7] Calculer sin, cos, tan, sqrt via le FPU
    Par zdra dans le forum Assembleur
    Réponses: 8
    Dernier message: 25/11/2002, 04h09
  3. Calcul des numéros de semaine d'un calendrier
    Par Invité dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/11/2002, 21h29
  4. Récupérer 10 nb différents avec un calcul aléatoire
    Par BXDSPORT dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2002, 02h35
  5. Algo de calcul de FFT
    Par djlex03 dans le forum Traitement du signal
    Réponses: 15
    Dernier message: 02/08/2002, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo