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 :

Programmation renvoyant à une matrice [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut Programmation renvoyant à une matrice
    Bonsoir à tous,

    Je souhaite en fait regrouper des valeurs (les A(courbure) sur la photo) qui dépendent de 3 variables finalement:
    -la courbure
    -le nombre de coupure
    -l'angle considéré

    Je souhaite regrouper les valeurs comme indiqué sur la photo. Seulement, débutant en programmation je galère un peu...Je n'ai pas réussi à vous joindre mon fichier, voici le code:

    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
    Function generale(tbldonnees)
    PrécisionAlpha = 5
    NbrCoupure = 5
    CourbureMax = ((((tbldonnees(13, 2)) * (1 + (tbldonnees(19, 2)))) + 100)) / (tbldonnees(5, 2))
    Pi = Application.WorksheetFunction.Pi()
    ReDim mtxgenerale(NbrCoupure * CourbureMax, 180 / PrécisionAlpha + 1)
     
    For i = 0 To 180 / PrécisionAlpha
    alpha = i * PrécisionAlpha
    mtxgenerale(0, i + 1) = alpha
     
      For j = 0 To CourbureMax + 1
     
        For k = 1 To NbrCoupure
        mtxgenerale((j * k), 1) = (j) / 1000
        mtxgenerale((j * k), 0) = k
        mtxgenerale(0, 0) = "Coupure"
        mtxgenerale(0, 1) = "Courbure"
     
    '1.Calcul du moment ext
    'mtxgenerale(j + 1, i + 1) = tbldonnees(10, 6) + tbldonnees(1,6) * ((tbldonnees(4, 2)) / Pi) ^ 2 * (j - 1) / 1000 ' correspont au A(Courbure)
    'Next
     
    Next
    Next
    Next
     
    generale = mtxgenerale
     
    End Function
    Cette fonction fait appel au tableau "données" situé dans la feuille Excel et renseigné par l'opérateur

    Merci pour votre aide
    Images attachées Images attachées  

  2. #2
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut
    Bonjour,

    Il faut mettre ton fichier Excel sous format .zip, sinon tu ne pourras pas le joindre.

    Dans ton code, des le debut, tu definis ta fonction "generale" en fonction de la variable "tbldonnees". Mais cette derniere n'est pas definie. J'imagine que c'est une variable tableau. Si tu ne connais pas encore ses dimensions, tu dois definir de la maniere suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim tbldonnees() as Single
    il faut que tu saches le type de valeurs qui vont completer ta variable tableau pour bien la definir (j'ai mis Single pour des nombres decimaux allant jusqu'au 10^45 environ)

    en fait toute tes variables ne sont pas definies.

    met en tete de module (avant ta fonction "generale") pour pouvoir cibler les variables non definies:

    Je reviens sur ton tbldonnees, dans ton code tu l'utilises pour pouvoir calculer la valeur d'autres variables, mais comment vba peut connaitre ce que contient tbldonnees si tu ne lui dit pas ce que tu souhaites y mettre a l'interieur? Non seulement il faut definir tes variables, mais il faut aussi dire ce que tu y mets dedans pour ensuite les utiliser.

    vanhoa

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut
    Salut!
    Désolée en le précipitant j'ai oublié de préciser que le tableau tbdonnees est dans une feuille excel donc quand j'exécute la matrice je sélectionne toutes les données du tbldonnees..
    Je vais essayer ce que tu m'as dit. Comment zipper un fichier?

    En fait mon programme me donne les bons résultats pour les 66 premières lignes ensuite il me renvoie n'importe quoi.. Je ne sais pas d'où ça peut venir je suis bloquée la dessus depuis des jours..

  4. #4
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut
    Ok,

    sur ton fichier excel, clique droit, envoyer vers, format compresse.

    Oui mais pour ton tbldonnees, vba ne peut pas deviner que c'est une feuille Excel si tu ne le precise pas.
    Utilise option explicit

    Tu as deja teste ton code?
    Si oui, quel est le type d'erreur et a quelle ligne?

    vanhoa

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2014
    Messages : 87
    Par défaut
    J'ai déjà utilisé l'appel d'un tableau sur feuille Excel et ça ne m'a jamais posé de problème. je vais donc mettre le option explicit alors..
    voilà mon fichier.
    comme j'ai dit il fonctionne pour les 66 premières lignes( j'ai 1 en coupure avec une valeur de courbure en face). je souhaiterai pour les 66 lignes d'après avoir 2 en coupure et de nouveau les mêmes valeurs de courbures (allant de 0 à 0.066)
    Fichiers attachés Fichiers attachés

  6. #6
    Membre expérimenté Avatar de vanhoa
    Homme Profil pro
    Analyste Financier
    Inscrit en
    Octobre 2013
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Analyste Financier
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 117
    Par défaut
    Dans ton fichier ta boucle For j prend l'avantage sur ta boucle For k.

    donc il faudrait inverser NbrCoupure et CourbureMax+1

    Ce qui se passe c'est que vba va faire dans l'ordre ta boucle k en premier, donc de 1 a 5 lorsque j est a 0 Donc on aura mtxgenerale(0,0) 5 fois. Puis j va passer a 1, on va avoir mtxgenerale(1,0) (2,0) ... (5,0). Quand j passe a 2, ca va "ecraser" le mtxgenerale(2,0) qui a et definie quand j etait egal a 1 et k a 2 (et la ce sera j egale a 2 et k a 1). donc vba va prendre en compte la derniere valeur enregistree.
    Comme CourbureMax est egale a 66 (en arrondi!) a partir de 67, les valeurs ne sont plus remplacee.

    en faisant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    for j = 0 to 5
    for k = 1 to 66
     
    Cells(j*66+k,0)=j
     
    next j
    next k
    ta cellules va sur les 66 premieres lignes avoir 1, puis les 66 suivantes 2 etc... jusqu'a 5

    donc suffit de remplacer par tes courburemax etc...

    vanhoa

    Essaie avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For j = 0 To NbrCoupure - 1
        For k = 1 To CourbureMax + 1
             mtxgenerale((j * k), 1) = (j - 1) / 1000
             mtxgenerale(j * CourbureMax + k, 0) = j + 1
             mtxgenerale(0, 0) = "Coupure"
             mtxgenerale(0, 1) = "Courbure"
        Next k
    Next j

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. renvoyer une matrice
    Par shootgirl dans le forum MATLAB
    Réponses: 6
    Dernier message: 04/09/2011, 19h41
  2. Programme Trier une matrice (à compléter)
    Par mino77 dans le forum Débuter
    Réponses: 2
    Dernier message: 12/11/2009, 13h53
  3. fonction renvoyant une matrice
    Par sub-0 dans le forum Débuter
    Réponses: 6
    Dernier message: 31/12/2008, 17h59
  4. Réponses: 18
    Dernier message: 24/07/2006, 19h30
  5. Réponses: 1
    Dernier message: 18/05/2006, 12h52

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