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 :

Multiplication de complexe avec un vecteur


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut Multiplication de complexe avec un vecteur
    Bonjour,

    Je suis entrain de réaliser un programme qui permet de récupérer des valeurs dans différents textbox et de les stocker dans 3 vecteurs : epaisseur_mm, tg et eps.

    A présent je souhaite effectuer une multiplication dans ma boucle pour le vecteurepaisseur_mm avec un complexe : (1 - 1i*tg(k)).

    J'ai essayer de plusieurs manière notamment avec COMPLEXE(1;-tg(k);""k"") mais j'ai toujours une erreur.

    Voici mon code que j'ai actuellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim epaisseur_mm(1 To 12), k As Long
    Dim tg(1 To 12)
    Dim eps(1 To 12)
     
    For k = 1 To M
        epaisseur_mm(k) = CSng(Me.Controls("ep_c" & k).Text)
        tg(k) = CSng(Me.Controls("tg_c" & k).Text)
        eps(k) = CSng(Me.Controls("eps_c" & k).Text)
    Next k
    Merci.

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en VBA, la fonction COMPLEXE() est Application.WorksheetFunction.Complex(Partie Réelle, Partie Imaginaire)
    il y a un troisième paramètre facultatif pour travailler sur du i ou j ... par défaut c'est i

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub toto()
    Dim i As Long
    i = 5
                                         '1 - 20i
        MsgBox WorksheetFunction.Complex(1, -4 * i)
    End Sub

  3. #3
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    en VBA, la fonction COMPLEXE() est Application.WorksheetFunction.Complex(Partie Réelle, Partie Imaginaire)
    il y a un troisième paramètre facultatif pour travailler sur du i ou j ... par défaut c'est i
    Salut,

    J'ai testé cette fonction mais quand je debug je n'obtiens pas une valeurs complexe sur esp(k).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    eps(k) = CSng(Me.Controls("eps_c" & k).Text) * WorksheetFunction.Complex(1, -tg(k) * i)
    Merci.

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Complex ne renvoie pas réellement un nombre complexe, il renvoie un string affichant un nombre complexe.

    Tu peux utiliser au sein de la fonction Complex des opérations sur la partie imaginaire ou réelle, mais tu ne peux pas réutiliser le résultat de la fonction dans une nouvelle opération

  5. #5
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Complex ne renvoie pas réellement un nombre complexe, il renvoie un string affichant un nombre complexe.

    Tu peux utiliser au sein de la fonction Complex des opérations sur la partie imaginaire ou réelle, mais tu ne peux pas réutiliser le résultat de la fonction dans une nouvelle opération
    Est-il possible de stocker une valeurs complexe dans une variable et ensuite de la réutiliser afin d'effectuer un produit ?

    Je trouve pas de solution pour mon cas.

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Tu ne peux pas stocker des nombres complexes et les calculer depuis VBA

    En revanche, tu peux évaluer le produit de deux nombres complexes (et autres opérations) en utilisant la classe des fonctions Excel
    On ne part plus de deux nombres complexes déjà constitués, on part des 2 parties réelles et 2 parties imaginaires dissociées

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub toto()
    Dim Reel1 As Long, Reel2 As Long, Imaginaire1 As Long, Imaginaire2 As Long
    Reel1 = 1
    Imaginaire1 = 1
    Reel2 = 1
    Imaginaire2 = 1
                    ' SOMME de 1 + i et 1 + i  ===> donne 2 + 2i
    MsgBox Evaluate("IMSUM(COMPLEX(" & Reel1 & "," & Imaginaire1 & "),COMPLEX(" & Reel2 & "," & Imaginaire2 & "))")
     
                    ' PRODUIT de 1 + i et 1 + i  ===> donne 2i
    MsgBox Evaluate("IMPRODUCT(COMPLEX(" & Reel1 & "," & Imaginaire1 & "),COMPLEX(" & Reel2 & "," & Imaginaire2 & "))")
    End Sub

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par SpaceX Voir le message
    Voila comment j'ai déclarer mes vecteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim eps(1 To 12) As Single
    Un Single est un entier. Par définition, il ne peut pas contenir un complexe.

    J'obtiens bien mes vecteurs qui vont bien de 1 à 12, cependant pour faire un produit de complexe, je trouve la solution nulle part.
    Dans mon message précédent, je t'ai donné une solution possible (à tester) : passer par des cellules Excel au lieu de passer par des variables.

    Sinon, puisque COMPLEXE renvoie un String, essaye de passer par des variables de type String.

    Sur Matlab c'est très simple, il suffit de multiplier un vecteur par une expression de cette forme et hop terminé :
    Et dans AutoCAD il est superfacile de connaitre l'intersection de deux droite alors que c'est compliqué dans Excel.
    Et dans Word on peut paramétré la distance entre paragraphes alors qu'on ne peut pas le faire dans Excel.
    A force de vouloir faire faire tout et n'importe quoi à Excel, on en oublie que chaque logiciel a son domaine propre et qu'Excel n'est pas un logiciel universel.

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Comment est déclaré eps() ?
    A ma connaissance, VBA ne sait pas gérer les nombres complexes, contrairement à Excel.
    https://msdn.microsoft.com/en-us/VBA...les/data-types

    Dans VBE, quand je tape Dim MaVariable As, je ne vois rien dans les proposition qui semble se rapprocher d'un nombre complexe.

    Plutôt que de passer par des variable, peut-être devrais-tu passer par des cellules.

  9. #9
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Comment est déclaré eps() ?
    A ma connaissance, VBA ne sait pas gérer les nombres complexes, contrairement à Excel.
    https://msdn.microsoft.com/en-us/VBA...les/data-types

    Dans VBE, quand je tape Dim MaVariable As, je ne vois rien dans les proposition qui semble se rapprocher d'un nombre complexe.

    Plutôt que de passer par des variable, peut-être devrais-tu passer par des cellules.
    Salut,

    Voila comment j'ai déclarer mes vecteurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim epaisseur_mm(1 To 12) As Single, k As Integer
    Dim tg(1 To 12) As Single
    Dim eps(1 To 12) As Single
    Dim n(1 To 12) As Single
     
    For k = 1 To M
        epaisseur_mm(k) = CSng(Me.Controls("ep_c" & k).Value)
        tg(k) = CSng(Me.Controls("tg_c" & k).Value)
        eps(k) = CSng(Me.Controls("eps_c" & k).Value)
        n(k) = Sqr(eps(k))
    Next k
    J'obtiens bien mes vecteurs qui vont bien de 1 à 12, cependant pour faire un produit de complexe, je trouve la solution nulle part.

    Sur Matlab c'est très simple, il suffit de multiplier un vecteur par une expression de cette forme et hop terminé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    'x * (1 - 2i)
    X * (1-1j*2)
    Il doit surement y avoir une solution en langage VBA

Discussions similaires

  1. Multiplication d'une matrice avec un vecteur
    Par picolot dans le forum VB.NET
    Réponses: 0
    Dernier message: 14/02/2010, 23h02
  2. problème avec un vecteur
    Par Mathieu.J dans le forum C++
    Réponses: 9
    Dernier message: 30/10/2005, 23h53
  3. [SQL] Requête complexe avec appel multiple à la même table
    Par Julien Dufour dans le forum Langage SQL
    Réponses: 9
    Dernier message: 14/04/2005, 15h12
  4. Requete un peu complexe avec la fonction IN
    Par Taichin dans le forum Oracle
    Réponses: 27
    Dernier message: 10/11/2004, 09h59
  5. [Swing]remplissage d'un JTable avec les vecteur
    Par 3adoula dans le forum Composants
    Réponses: 7
    Dernier message: 15/06/2004, 17h09

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