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 :

Ecriture d'une propriété avec new


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Points : 139
    Points
    139
    Par défaut Ecriture d'une propriété avec new
    Bonjour à tous,

    j'ai créé un module de classe cAffaire, 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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private mNuméro As String
    Private mCtp As String
    Private mAvancement As Long
     
    Private Enum col_cm006
        colCtp = 7
        aff = 11
        avt = 30
    End Enum
     
    Property Let Numéro(Numéro As String)
        mNuméro = Numéro
    End Property
     
    Property Get Ctp()
        Ctp = mCtp
    End Property
     
    Property Get Avancement()
        Avancement = mAvancement
    End Property
     
    Private Sub ChercheAffaire(fichier As Workbook)
    Dim recherche As Range
        If mNuméro <> Empty Then
            With fichier.Sheets(1)
                Set recherche = .Range(.Cells(2, col_cm006.aff), .Cells(.UsedRange.Rows.Count, col_cm006.aff)) _
                .Find(mNuméro, LookIn:=xlValues)
                If Not recherche Is Nothing Then
                    mCtp = .Cells(recherche.Row, col_cm006.colCtp).Value
                    If mCtp = Empty Then
                        mCtp = "SANSCTP"
                    End If
                    mAvancement = .Cells(recherche.Row, col_cm006.avt)
                Else
                    mNuméro = Empty
                    mCtp = "SANSCTP"
                    mAvancement = Empty
                End If
            End With
        End If
        Set fichier = Nothing
        Set recherche = Nothing
    End Sub
    pour l'utiliser je fais ceci:

    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
    Sub testCAffaire()
    Dim affaire1 As cAffaire
    Dim message As Integer
    Dim fichier_cm006 As Workbook
     
        Set feuille_debut = ThisWorkbook.Sheets("Début")
     
        On Error Resume Next
        Set fichier_cm006 = Workbooks.Open(Filename:=feuille_debut.Range("b4"))
        If Err.Number <> 0 Then
            message = MsgBox(Err.Description, vbCritical)
            Exit Sub
        End If
     
    Set affaire1 = New cAffaire
    affaire1.Numéro = "C209ADW007"
    affaire1.ChercheAffaire fichier_cm006
    Debug.Print affaire1.Avancement
    Debug.Print affaire1.Ctp
    End Sub
    Première chose est-ce la bonne façon de faire, je débute en POO, il bien se faire un peu les dents

    Deuxième chose, j'aurais préféré pouvoir utiliser mes propriétés Avancement et Ctp dès que l'objet est instancié, en gros écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set affaire1 = New cAffaire "C209ADW007" fichier_cm006
    et ensuite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    class_initialize(Numéro as string, fichier as workbook)
    à priori ce n'est pas possible, ligne new en rouge et je n'ai pas trouvé de tuto écris de cette manière.



    Est-ce cette notion de constructeur personalisé qui manque à VBA ?

    Merci d'avance pour vos réponses.

    PS: la POO ici n'as certes pas beaucoup d’intérêt, mais je n'ai pas d'autre os à ronger

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    class_initialize(Numéro as string, fichier as workbook) n'est pas un constructeur, mais un éventement il n'existe pas de surcharge en vba , c'est pas possible!
    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
    Sub testCAffaire()
    Dim affaire1 As New cAffaire
    Dim message As Integer
    Dim fichier_cm006 As Workbook
     
        Set feuille_debut = ThisWorkbook.Sheets("Début")
     
        On Error Resume Next
        Set fichier_cm006 = Workbooks.Open(Filename:=feuille_debut.Range("b4"))
        If Err.Number <> 0 Then
            message = MsgBox(Err.Description, vbCritical)
            Exit Sub
        End If
     
    Set affaire1 = New cAffaire
    affaire1.Numéro = "C209ADW007"
    affaire1.ChercheAffaire fichier_cm006
    Debug.Print affaire1.Avancement
    Debug.Print affaire1.Ctp
    End Sub
    Code cAffaire : 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
    Private mNuméro As String
    Private mCtp As String
    Private mAvancement As Long
     
    Private Enum col_cm006
        colCtp = 7
        aff = 11
        avt = 30
    End Enum
     
    Public Property Let Numéro(value As String)
        mNuméro = value
    End Property
     
    Public Property Get Ctp()
        Ctp = mCtp
    End Property
     
    Public Property Get Avancement()
        Avancement = mAvancement
    End Property
     
    Public Sub ChercheAffaire(fichier As Workbook)
    Dim recherche As Range
        If mNuméro <> Empty Then
            With fichier.Sheets(1)
                Set recherche = .Range(.Cells(2, col_cm006.aff), .Cells(.UsedRange.Rows.Count, col_cm006.aff)) _
                .Find(mNuméro, LookIn:=xlValues)
                If Not recherche Is Nothing Then
                    mCtp = .Cells(recherche.Row, col_cm006.colCtp).value
                    If mCtp = Empty Then
                        mCtp = "SANSCTP"
                    End If
                    mAvancement = .Cells(recherche.Row, col_cm006.avt)
                Else
                    mNuméro = Empty
                    mCtp = "SANSCTP"
                    mAvancement = Empty
                End If
            End With
        End If
        Set fichier = Nothing
        Set recherche = Nothing
    End Sub

  3. #3
    Membre habitué
    Homme Profil pro
    Programmeur en temps libre
    Inscrit en
    Février 2015
    Messages
    68
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Programmeur en temps libre
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2015
    Messages : 68
    Points : 139
    Points
    139
    Par défaut OK Merci
    c'est bien ce que je craignait, je vais donc pouvoir continuer comme ça mes autres classes et mon développement.

    merci pour ta réactivité rdurupt.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/09/2012, 16h32
  2. Detecter ecriture dans une textBox avec Timer
    Par Shargat dans le forum ASP.NET
    Réponses: 10
    Dernier message: 23/04/2009, 14h13
  3. Binding sur une propriété avec paramètre
    Par FRED.G dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 17/11/2008, 18h38
  4. [Composant] publier une propriété avec un type perso
    Par jpc34 dans le forum C++Builder
    Réponses: 6
    Dernier message: 12/10/2004, 08h39
  5. Recuperation de la taille d'une image avec la propriété SRC
    Par CDRIK dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/10/2004, 03h05

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