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

VBA Access Discussion :

[VBA] Problème fonction


Sujet :

VBA Access

  1. #1
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut [VBA] Problème fonction
    Bonjour j'ai un petit problème sur ma fonction, j'explique je créer une flèche automatiquement à partir de 3 traits(ça c'est ok ) apres je voudrai pouvoir déplacer la flèche

    Souci impossible de la déplacer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub create_fleche()
     
      flechex = traceflch(Taille, Angle) 'Fonction pour créer la flèche
    Maintenant quand je clique sur ma flèche nommer flechex si je ne me trompe pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub flechex_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
     
      Moveflch Button
     
    End Sub
    qui fait appel à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub Moveflch(Button As Integer)
     
      If Button = 1 Then
        ReleaseCapture
        SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
      End If
     
    End Sub
    Le souci c'est que sa ne rentre jamais dans ma fonction flechex_MouseMove. Est-ce que je l'ai mal nommer ou elle n'a peut-être même pas de nom

  2. #2
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Bonjour

    Si ta flèche dispose d'un évènement, c'est qu'elle est un objet. Or, elle n'a pas l'air d'avoir été déclarée comme telle.

    Peux-tu donner le code qui dimensionne ton objet flèche?

  3. #3
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function TypeOrientation(ByVal Angle As Double) As Boolean
     
        'Fonction renvoyant la valeur de la propriété LineSlant
        'du trait "/" (True) ou "\" (False)
        'Angle = exprimé en degrés
     
    'Evaluation du LineSlant
        If Angle Mod 180 > 90 Then
            TypeOrientation = False
        Else
            TypeOrientation = True
        End If
     
    End Function
    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
     
    Function GetCoeff(ByVal Angle As Double) As Variant
        'Fonction qui renvoi le coef multiplicateur pour la largeur et la hauteur
        'index 0 coeff pour la largeur
        'index 1 coeff pour la hauteur
        'Angle = exprimé en degrés
     
    Dim X As Double
    Dim Y As Double
    Dim Angle2 As Double
    Const PI As Double = 3.14159265358979
     
     
    'Faire le calcul rapporté à 90° en radians
        Angle2 = (Angle Mod 90) * PI / 180
        X = Abs(Cos(Angle2))
        Y = Abs(Sin(Angle2))
     
     
    'En fonction de l'angle
        If Angle Mod 180 > 90 Then
            GetCoeff = Array(Y, X)
        Else
            GetCoeff = Array(X, Y)
        End If
    End Function
    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
     
    Function traceflch(ByVal Taille As Long, ByVal Angle As Double)
     
    Dim v As Variant
    Const CoeffTaille   As Double = 0.1         'Taille de la pointe : 10% longueur fleche
    Const DecalAngle    As Double = 15          'Angle de la pointe : 5° par rapport au corps
    Dim lngBlack As Long
     
    Angle = 45
    Taille = 2000
    lngBlack = RGB(0, 0, 0)
     
    'Définition de la couleur
        trcorps.BorderColor = lngBlack
        trgauche.BorderColor = lngBlack
        trdroit.BorderColor = lngBlack
     
    'Définition du corps de la flèche
        v = GetCoeff(Angle)
        trcorps.Left = 900
        trcorps.Top = 900
        trcorps.Width = v(0) * Taille
        trcorps.Height = v(1) * Taille
        trcorps.LineSlant = TypeOrientation(Angle)
     
    'Définition de la première pointe
        v = GetCoeff(Angle + DecalAngle)
        trdroit.Width = v(0) * Taille * CoeffTaille
        trdroit.Height = v(1) * Taille * CoeffTaille
        trdroit.LineSlant = TypeOrientation(Angle)
     
    'Définition de la première pointe
        v = GetCoeff(Angle - DecalAngle)
        trgauche.Width = v(0) * Taille * CoeffTaille
        trgauche.Height = v(1) * Taille * CoeffTaille
        trgauche.LineSlant = TypeOrientation(Angle)
     
     
    'Position de la flêche
     
        'Définition des Top
            Select Case Angle
     
                Case 0 To 180
                    trdroit.Top = trcorps.Top
                    trgauche.Top = trcorps.Top
     
                Case 180 To 360
                    trdroit.Top = trcorps.Top + trcorps.Height - trdroit.Height
                    trgauche.Top = trcorps.Top + trcorps.Height - trgauche.Height
     
            End Select
     
        'Définition des left
            Select Case Angle
     
                Case 0 To 90, 270 To 360
                    trdroit.Left = trcorps.Left + trcorps.Width - trdroit.Width
                    trgauche.Left = trcorps.Left + trcorps.Width - trgauche.Width
     
                Case Else
                    trdroit.Left = trcorps.Left
                    trgauche.Left = trcorps.Left
     
            End Select

    Voila les 3 fonctions qui forment ma flèche

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Ces fonctions sont-elles comprises dans un module de classe?

    Tu disposes d'un ensemble de fonctions et procédures mais il faudrait nous les communiquer, notamment la procédure Moveflch Button

  5. #5
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub Moveflch(Button As Integer)
     
      If Button = 1 Then
     
        ReleaseCapture
        SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
     
      End If
     
    End Sub
    Voila ma procédure, après mes fonctions sont dans mon code en brut je n'ai qu'un module de classe il est presque vide il y a 3 lignes dedans

  6. #6
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut
    Voici mon module :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Option Compare Database
     
    Public Declare Function ReleaseCapture Lib "lamda" () As Long
    Public Declare Function SendMessage Lib "lamda" Alias "SendMessageA" _
    (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
     
    Public Const WM_NCLBUTTONDOWN = &HA1
    Public Const HTCAPTION = 2

  7. #7
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    étrange cette DLL "lamda" ?

    je la connaissais mieux avec "user32" ...

  8. #8
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut
    oups oui c'est avec user32 c'est mon brouillon la :s croyais que j'avais déja changer

  9. #9
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ta fleche est composée de trois traits. Ce sont ces traits qui doivent lever des évènements. Ton objet FlechEx, c'est quoi ?

  10. #10
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par Tofalu
    Ta fleche est composée de trois traits. Ce sont ces traits qui doivent lever des évènements. Ton objet FlechEx, c'est quoi ?
    Je le lui ai déjà demandé, mais impossible d'avoir la réponse... Donc, impossible de l'aider

  11. #11
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut
    désolé du retard,

    flechex je voulais que ce soit le nom de ma fleche.

    Le x dans flechex représente n'importe quel fleche, je veut pouvoir créer un nombre indéfini de flèche. Donc ma flèche s'appelle flechex car la fonction est appellé pour la formation de la flèche et ensuite est renommer en fleche1, flèche2, ...

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    En fait, tu cherches à créer un objet. Mais pour cela, tu dois créer une classe personnalisée définissant les propriétés et méthodes dont tu veux équiper ton objet. Tu sembles aussi vouloir gérer des évènements sur cet objet, et il te faut donc les définir également dans la classe de ton objet.

    Cela est donc plus complexe que le code que tu proposes, car tu dois maîtriser la programmation des classes...

  13. #13
    Membre confirmé
    Avatar de erfindel
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    498
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 498
    Points : 489
    Points
    489
    Par défaut
    aïe c'est un souci je ne maîtrise pas mais je débute dans la programmation des classes, comment doit-je procédé pour faire ma classe :s

Discussions similaires

  1. [XL-2003] Problème fonction recherche / remplacer sous VBA
    Par DVano dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 01/04/2010, 12h13
  2. [Vba-E]Problème fonction Date
    Par stargates dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/05/2007, 10h01
  3. VBA-Excel: problème fonction Roundup
    Par allergique dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/08/2006, 21h24
  4. [VBA] problème fonction
    Par SNB dans le forum Access
    Réponses: 3
    Dernier message: 05/01/2006, 16h22
  5. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24

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