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 :

Déclaration de variables et Userform [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Mai 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 22
    Par défaut Déclaration de variables et Userform
    Bonjour,

    J'ai un problème sur un classeur macro que j'essaie de programmer.

    Le voici : ET project (Récupéré).xlsm

    Pour faire simple

    le module 1 contient une déclaration de variables publiques.
    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
    Public TypeEcriture As String 'déclarations de variables publiques : on les utilise pour récupérer les données dans Uferform et les transférer dans ETB
    Public TypePce As String
    Public CodeSté As String
    Public Réf As Range
    Public Devise As String
    Public EnTête As Range
    Public DateCptable As String
    Public DatePce As String
    Public CpteG As String
    Public CpteAux As String
    Public TypeCpte As String
    Public TxtPoste As Range
    Public CodeTVA As String
    Public CDC As Range
    Public Debit As Range
    Public Credit As Range
    Public SL As Range
    Le module Excel tool build contient une macro

    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
    Public Sub ExcelToolBuild()
    Dim TypeEcriture1 As Range, TypePce1 As Range, CodeSté1 As Range, Réf1 As Range, Devise1 As Range, EnTête1 As Range, DateCptable1 As Range, DateePce1 As Range, CpteG1 As Range, CpteAux1 As Range, TypeCpte1 As Range, TxtPoste1 As Range, CodeTVA1 As Range, CDC1 As Range, Debit1 As Range, Credit1 As Range, SL1 As Range
     
    Set TypeEcriture1 = Sheets("excel-tool").Range("a2") 'Détermination des Cellules pour créer l'ET
    Set TypePce1 = Sheets("excel-tool").Range("b2")
    Set CodeSté1 = Sheets("excel-tool").Range("c2")
    Set Réf1 = Sheets("excel-tool").Range("d2")
    Set Devise1 = Sheets("excel-tool").Range("e2")
    Set EnTête1 = Sheets("excel-tool").Range("f2")
    Set RangeCptable1 = Sheets("excel-tool").Range("g2")
    Set RangePce1 = Sheets("excel-tool").Range("h2")
    Set CpteG1 = Sheets("excel-tool").Range("i2")
    Set CpteAux1 = Sheets("excel-tool").Range("j2")
    Set TypeCpte1 = Sheets("excel-tool").Range("k2")
    Set TxtPoste1 = Sheets("excel-tool").Range("m2")
    Set CodeTVA1 = Sheets("excel-tool").Range("n2")
    Set CDC1 = Sheets("excel-tool").Range("o2")
    Set Debit1 = Sheets("excel-tool").Range("r2")
    Set Credit1 = Sheets("excel-tool").Range("s2")
    Set SL1 = Sheets("excel-tool").Range("u2")
     
     
    TypeEcriture1 = TypeEcriture 'Copie valeurs Userform dans feuille ET
    TypePce1 = TypePce
    CodeSté1 = CodeSté
    Réf1 = Réf
    Devise1 = Devise
    EnTête1 = EnTête
    RangeCptable1 = RangeCptable
    RangePce1 = RangePce
    CpteG1 = CpteG
    CpteAux1 = CpteAux
    TypeCpte1 = TypeCpte
    TxtPoste1 = TxtPoste
    CodeTVA1 = CodeTVA
    CDC1 = CDC
    Debit1 = Debit
    Credit1 = Credit
    SL1 = SL
     
     
    End Sub
    Ce que je veux faire, c'est affecter les données récupérées dans le userform à mes variables du module 1, pour ensuite les utiliser avec la macro du module Excel Tool.

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
     
     
    Private Sub CheckBox1_Click()
    If CheckBox1.Value = True Then
    TypeEcriture = "P"
    Else
    TypeEcriture = ""
    End If
     
    End Sub
     
    Private Sub ChoixSté_Change()
    Label3.Caption = Worksheets.Application.VLookup(choixSté.Value, Sheets("base").Range("e:f"), 2, False) 'Met le nom de la société a côté du choix
    End Sub
     
     
     
     
    Private Sub DeviseBox_Change()
    Label5.Caption = Worksheets.Application.VLookup(DeviseBox.Value, Sheets("base").Range("g:h"), 2, False) 'choix de la devise
    End Sub
     
     
     
     
     
    Private Sub OptionButton1_Click()
    If OptionButton1.Value = True Then 'si on choisit FAE, on Génère une pièce XD
     
    TypePceBox.Value = "XD"
    End If
    End Sub
     
    Private Sub OptionButton2_Click()
     If OptionButton2.Value = True Then
        TypePceBox.Value = "SZ" 'Si on choisit une FNP, on génère une SZ
        End If
    End Sub
     
       Private Sub OptionButton3_Click()
      If OptionButton3.Value = True Then
            TypePceBox.Value = "SA" 'si on choisit une ODA, on génère une SA
            End If
       End Sub
     
     
     
     
    Private Sub TypePceBox_Change()
     
    Label1.Caption = Worksheets.Application.VLookup(TypePceBox.Value, Sheets("Base").Range("a:b"), 2, False) 'descriptif Type de pièce à côté du choix
    TypePce = TypePceBox.Value
    If TypePceBox.Value = "SZ" Then
    CheckBox1.Value = True 'Si on choisit SZ comme type pièce, L'extourne est aussi sélectionnée
    Else: CheckBox1.Value = False
    End If
     
    End Sub
     
    Private Sub OptionButton4_Click()
     
      If OptionButton4.Value = True Then
            TypePceBox.Value = "KB" 'si on choisit une Facture reçue, on génère une KB
            End If
       End Sub
     
    Private Sub UserForm_Initialize()
    Me.Height = 550
    Me.Width = 425
     
    Dim TypeEcriture, TypePce, CodeSté, Réf, Devise, EnTête, CpteG, CpteAux, TypeCpte, TxtPoste, CodeTVA, CDC, CtreProfit, SL, DomaineA   As Range
    Dim DateCptable, DatePce, DateEch As Date
    Dim Debit, Credit As Integer
     
    For i = 1 To 5
    TypePceBox.AddItem Sheets("Base").Cells(i + 1, 1) 'liste déroulante Type de pièce
    Next
     
    For i = 2 To Worksheets.Application.CountA(Sheets("base").Range("e:e"))
    choixSté.AddItem Sheets("base").Cells(i, 5) 'Liste déroulante Choix Société
    Next
     
    For i = 2 To Worksheets.Application.CountA(Sheets("base").Range("g:g"))
    DeviseBox.AddItem Sheets("base").Cells(i, 7) 'Liste déroulante Choix Devises
    Next
    DeviseBox.Value = "EUR"
     
    For i = 2 To Worksheets.Application.CountA(Sheets("base").Range("n:n"))
    TVABox.AddItem Sheets("Base").Cells(i, 14)
    Next
    TVABox.Value = "ZZ"
     
    CheckBox1.Value = False
     
     
    End Sub
     
    Private Sub CommandButton1_Click() 'affectation des valeurs aux variables, puis lancement de la macro ExcelToolBuild
     
     TypePce = TypePceBox.Value
     CodeSté = choixSté.Value
     Set Réf = Sheets("base").Range("a1")
     Devise = DeviseBox.Value
     Set EnTête = Sheets("base").Range("a1")
     DateCptable = DateCBox.Value
     DatePce = DatePBox.Value
     CpteG = CptGBox.Value
     CpteAux = CptABox.Value
     TypeCpte = "K"
     Set TxtPoste = Sheets("base").Range("a1")
     CodeTVA = TVABox.Value
    Set CDC = CDCBox.Value
    Set Debit = Sheets("base").Range("a1")
     Set Credit = Sheets("base").Range("a1")
     Set SL = Sheets("base").Range("a1")
    Call ExcelToolBuild.ExcelToolBuild
     
    End Sub
    L'affectation des variables se fait au moment de la validation. J'ai une erreur '424' Objet Requis.

    où est mon erreur? que faire pour la réparer?

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Comme la plupart des gens, dont moi, n'ouvriront pas ton fichier avec macro, ce serait préférable de mettre directement le code utilisé (la partie nécessaire) ici et de bien expliquer.
    Ne pas oublier le bouton # pour formater ton code.

  3. #3
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Mai 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 22
    Par défaut
    Citation Envoyé par parmi Voir le message
    Bonjour,

    Comme la plupart des gens, dont moi, n'ouvriront pas ton fichier avec macro, ce serait préférable de mettre directement le code utilisé (la partie nécessaire) ici et de bien expliquer.
    Ne pas oublier le bouton # pour formater ton code.

    C'est fait, j'ai rajouté directement en modifiant du premier post

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 122
    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 122
    Par défaut
    Salut

    Peux-tu nous expliquer un peu le contexte et décrire ce que tu souhaites faire plus globalement.
    Tes données semblent être stockées en ligne 2, il serait probablement plus efficient d'utiliser un boucle plutôt que de référencer chaque cellule par une variable.

    ++
    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

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Je suis d'accord avec Qwazerty.
    Quoiqu'il en soit, sur quelle ligne de quelle macro survient l'erreur 424 ?

  6. #6
    Membre averti
    Homme Profil pro
    Comptable
    Inscrit en
    Mai 2018
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2018
    Messages : 22
    Par défaut
    Bon alors je reprends tout depuis le début.

    Le but est de générer des écritures à partir d'un fichier source contenant les infos dont j'ai besoin.

    Mon classeur contient deux modules et un UserForm.

    Le Userform sert à rentrer des données provenant de n'importe quel fichier. cela va se traduire par un identifiant d'écriture, des dates, des numéros de sociétés.... et l'ensemble des informations nécessaires pour écriture comptable.

    • ces données seront contenues soit dans une colonne , et donc l'info change à chaque ligne, (par exemple le montant sera dans la colonne XX , mais à chaque ligne il est différent) d'ou utilisation d'une variable avec un attribut RANGE.


    • Ou alors ce sont des données fixes qui ne changeront pas mais qui doivent figurer sur chaque ligne, par exemple la date de saisie. donc Variable de type STRING.



    Ces données sont rentrées dans le userform. en cliquant sur le bouton de validation, je souhaite que les données entrées dans mon userform se stockent dans les variables publiques déclarées en modules 1, puis que ces variables soient utilisées par ma macro ExcelToolBuild qui les écrira en ligne 2 d'une autre feuille.c'est ici que j'ai mon problème: Je n'arrive pas à affecter mes valeurs UserForm dans mes variables publiques. c'est ça que je veux faire .

    l'erreur s'affiche ici (voir commentaire) :

    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
    Private Sub CommandButton1_Click() 'affectation des valeurs aux variables, puis lancement de la macro ExcelToolBuild
     
     TypePce = TypePceBox.Value
     CodeSté = choixSté.Value
     Set Réf = Sheets("base").Range("a1")
     Devise = DeviseBox.Value
     Set EnTête = Sheets("base").Range("a1")
     DateCptable = DateCBox.Value
     DatePce = DatePBox.Value
     CpteG = CptGBox.Value
     CpteAux = CptABox.Value
     TypeCpte = "K"
     Set TxtPoste = Sheets("base").Range("a1")
     CodeTVA = TVABox.Value
    Set CDC = CDCBox.Value 'l'erreur se situe ici 
    Set Debit = Sheets("base").Range("a1")
     Set Credit = Sheets("base").Range("a1")
     Set SL = Sheets("base").Range("a1")
    Call ExcelToolBuild.ExcelToolBuild
    (pour l'instant j'ai déterminé les variable de type Range comme correspondant à la cellule a1 de la feuille "Base" de façon provisoire) car en affectant les valeurs de mon userform, ça bloque (et de cette façon aussi d'ailleurs.

    Cela semble concerner les références de cellules

    Tes données semblent être stockées en ligne 2
    ExcelToolBuild je n'ai pas totalement fini de le programmer et c'est pour cela que je n'ai pas encore mis de boucle ou quoi que soit. Quoiqu'il en soit, lorsque cette macro sera achevée, elle écrira les données à partir de la deuxième ligne sur la feuille indiquée (c'est comme cela que le logiciel accepte le fichier créé). Du coup, j'affecte la valeur de la variable publique Module 1 à mes variables de la macro ExcelToolBuild afin de faire le traitement.
    La boucle créera autant de lignes qu'il y en a dans le fichier source. mon problème ne se situe pas ici.

    Pourquoi 2 x les variables ?

    Parce que les premières variables couvrent le fichier source, et les deuxième écrivent le fichier cible. Ainsi J'aurai la variable "CDC" qui prends les données CDC sur le fichier source, et "CDC1" qui copient ce qui se trouve dans "CDC". Quand la ligne est remplie, on passe à la ligne suivante du fichier source donc CDC = CDC.Offset(1,0) et CDC1=CDC1.offset(1,0) et on boucle sur ça .

    En gros : la macro va prendre les données dans le fichier source, écrire la première ligne, passer a la seconde ligne sur le fichier source, écrire la 2nde ligne sur mon deuxième fichier , etc ... le tout dans un format normé. Le userform permet justement de faire face à la diversité des sources pour les normer dans le fichier cible qui va par exemple contenir le montant en colonne C , ou alors en colonne AZ , ou en D selon le fichier source que l'on m'envoie.


    Donc dans cette macro : je détermine l'endroit ou je vais écrire mon nouveau fichier, puis je fais la correspondance avec les variables publiques qui contiennent ce que je veux écrire

    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
    Public Sub ExcelToolBuild()
    Dim TypeEcriture1 As Range, TypePce1 As Range, CodeSté1 As Range, Réf1 As Range, Devise1 As Range, EnTête1 As Range, DateCptable1 As Range, DateePce1 As Range, CpteG1 As Range, CpteAux1 As Range, TypeCpte1 As Range, TxtPoste1 As Range, CodeTVA1 As Range, CDC1 As Range, Debit1 As Range, Credit1 As Range, SL1 As Range
     
    Set TypeEcriture1 = Sheets("excel-tool").Range("a2") 'Détermination des Cellules pour créer l'ET
    Set TypePce1 = Sheets("excel-tool").Range("b2")
    Set CodeSté1 = Sheets("excel-tool").Range("c2")
    Set Réf1 = Sheets("excel-tool").Range("d2")
    Set Devise1 = Sheets("excel-tool").Range("e2")
    Set EnTête1 = Sheets("excel-tool").Range("f2")
    Set RangeCptable1 = Sheets("excel-tool").Range("g2")
    Set RangePce1 = Sheets("excel-tool").Range("h2")
    Set CpteG1 = Sheets("excel-tool").Range("i2")
    Set CpteAux1 = Sheets("excel-tool").Range("j2")
    Set TypeCpte1 = Sheets("excel-tool").Range("k2")
    Set TxtPoste1 = Sheets("excel-tool").Range("m2")
    Set CodeTVA1 = Sheets("excel-tool").Range("n2")
    Set CDC1 = Sheets("excel-tool").Range("o2")
    Set Debit1 = Sheets("excel-tool").Range("r2")
    Set Credit1 = Sheets("excel-tool").Range("s2")
    Set SL1 = Sheets("excel-tool").Range("u2")
     
     
    TypeEcriture1 = TypeEcriture 'Copie valeurs Userform dans feuille ET
    TypePce1 = TypePce
    CodeSté1 = CodeSté
    Réf1 = Réf
    Devise1 = Devise
    EnTête1 = EnTête
    RangeCptable1 = RangeCptable
    RangePce1 = RangePce
    CpteG1 = CpteG
    CpteAux1 = CpteAux
    TypeCpte1 = TypeCpte
    TxtPoste1 = TxtPoste
    CodeTVA1 = CodeTVA
    CDC1 = CDC
    Debit1 = Debit
    Credit1 = Credit
    SL1 = SL
     
     
    End Sub
    Encore une fois, mon problème c'est la transition entre le Userform et le reste. je ne parviens pas à stocker les valeurs de cellules dans les variables range .

    Suis-je assez clair cette fois ci ?

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

Discussions similaires

  1. Déclaration Variable dans Userform et ThisWorkbook
    Par grimgrim dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 12/09/2018, 08h14
  2. déclaration de variable dans userform!
    Par lizzie59 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/04/2013, 16h49
  3. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33
  4. [FLASH MX2004] Déclaration de variables sous flash mx
    Par softyClochette dans le forum Flash
    Réponses: 4
    Dernier message: 29/11/2004, 16h11
  5. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43

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