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

  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 124
    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 124
    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 ?

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

    Pour ce qui est de l'erreur en elle même
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CDC = CDCBox.Value 'l'erreur se situe ici
    Set permet d'affecter un objet à un autre, ici tu essai d'affcter une valeur (CDCBox.value) à un objet (je présume) CDC

    Pour le reste je vais relire mais à mon avis tu peux grandement simplifier le fonctionnement. Plus le code est complexe et plus il est compliqué à maintenir en cas de bug ou de modification d'un paramètre.

    Ce que j'en ai compris en le lisant hier au soir, c'est que tu reçois des fichiers "sources" (quel format? txt, csv, xls, ...?).
    Puis que tu utilises le UserForm pour intégrer ces données avec un mise en forme.
    Le UserForm contient quoi exactement ? C'est l'utilisateur qui lit les données puis les saisie à la main ou le userofrm sert "juste" à indiquer où se trouve les fichiers?

    Ensuite tu utilises ExcelToolBuild pour utiliser les données placées dans tes variables mais ce passage est pour moi inutile
    Tu peux très bien faire un code du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Sheets("excel-tool").Range("a2").value = TypeEcriture
    sans passer par une variable intermédiaire.
    Toujours avec cette même ligne, d'où vient TypeEcriture ?

    Je ne voudrais pas avoir l'air d'insister lourdement mais tu gagnerais, je pense, à nous montrer un peu plus du code que tu utilises, un petit screenshot du UserForm aussi nous aiderais à mieux appréhender tout ça.
    Quand j'ai commencé la programmation, j'avais tendance à faire la même chose en déclarant autant de variables que de donnée... j'ai vite abandonné cette façon de faire
    Ici par exemple tes données se suivent sur la ligne 2; tu peux donc faire une boucle en incrémentant la colonne
    Un truc comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test
    Dim MaCellule as range
     
    For each MaCellue in Feuil2.Range("A2:U2")
        'Ici tu utilises MaCellule pour aller chercher une valeur et la déposer dans une autre feuille (du même classeur ou d'un autre ça n'a pas d'importance, il suffira de le préciser
        'ici on envoie les informations sur la ligne 6 de la feuil2 en respectant l'organisation, en terme de colonne, de la feuil1
        Feuil1.cells(6,Macellule.column).value = Macellule
    Next
    End sub
    Si tu commences par tout mettre dans des variables, il n'est plus possible (pas facilement du moins en VBA) de faire une boucle sur le contenu des variables... et le code devient bien plus compliqué à écrire.

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

  8. #8
    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
    Ce que j'en ai compris en le lisant hier au soir, c'est que tu reçois des fichiers "sources" (quel format? txt, csv, xls, ...?).
    Le fichier source , c'est du xls. dans mon userform, je vais indiquer dans quelle colonne se trouve quelle information, pour ensuite les retraiter.

    Le UserForm contient quoi exactement ? C'est l'utilisateur qui lit les données puis les saisie à la main ou le userofrm sert "juste" à indiquer où se trouve les fichiers?
    Par exemple, je vais recevoir un fichier avec les colonnes suivantes dans cet ordre: "centre de couts";"montant";"date"
    Puis je vais en recevoir un autre, organisé comme cela : "date";"centre de couts";"montant"

    L'organisation des deux fichiers est différente. (et je n'ai pas que 3 malheureuses colonnes dans ces fichiers, sinon il suffirait de manipuler le fichier source, nous sommes d'accord).

    donc dans mon userform, suivante l'exemple que j'ai donné je vais déterminer l'endroit ou se trouve le date, le montant, le centre de couts, etc... puis ma macro va l'écrire bien comme il faut au bon endroit dans un fichier.

    Nom : Capture d’écran 2018-05-26 à 08.34.41.png
Affichages : 1497
Taille : 34,1 Ko



    Ici par exemple tes données se suivent sur la ligne 2; tu peux donc faire une boucle en incrémentant la colonne
    . J'ai agi comme cela, car quelque soit la disposition du fichier source (qui n'est pas normalisé) il faudra à tout prix que les bonnes informations arrivent au bon endroit. il me semblait aussi plus facile de les manipuler pour passer à la ligne suivante.

    Toujours avec cette même ligne, d'où vient TypeEcriture ?
    C'est variable est définie par l'utilisateur. type string.




    Dans mon userform, j'ai corrigé comme 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
    21
    Private Sub CommandButton1_Click()
     
     TypePce = TypePceBox
     CodeSté = choixSté
     Set Réf = Sheets("base").Range("a1")
     Devise = DeviseBox
     Set EnTête = Sheets("base").Range("a1")
     DateCptable = DateCBox
     DatePce = DatePBox
     CpteG = CptGBox
     CpteAux = CptABox
     TypeCpte = "K"
     Set TxtPoste = Sheets("base").Range("a1")
     CodeTVA = TVABox
    Set CDC = CDCBox
    Set Debit = Sheets("base").Range("a1")
     Set Credit = Sheets("base").Range("a1")
     Set SL = Sheets("base").Range("a1")
    Call ExcelToolBuild.ExcelToolBuild
     
    End Sub
    en fait, si l'utilisateur indique dans une ComboBox une référence de cellule, je veux que cette référence soit stockées dans une variable.
    ex: dans le userform, je sélectionne cellule A1 de tel fichier, dans telle feuille, je veux que la variable correspondante prenne la valeur "Telfichier.Tellefeuille.A1"


    Et maintenant, j'ai une erreur "incompatibilité de type 13"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    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 société
    End Sub
    Alors que cette ligne de code fonctionnait parfaitement auparavant.

    Si je supprime le code de CommandButton1_Click(), soit l'affectation des données de mon userform aux variables publiques, je peux remplir mon userfom sans problèmes.
    Mais à quoi ça sert de remplir un userform si les données ne sont pas utilisées? alors quant il s'agit des variables de type string il n'y a pas de soucis, mais dès qu'il s'agit d'affecter la référence entrée dans une combobox, impossible de l'affecter à une variable de type range.


    Auparavant, j'avais fait le même test avec des imputBox type =8 , et il n'y avais pas de soucis. Le problème, c'est que je ne peux multiplier les inputBox car j'ai une trentaine d'informations à demander. d'ou le userform

  9. #9
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 124
    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 124
    Par défaut
    Salut
    Citation Envoyé par ChrisM972 Voir le message
    Par exemple, je vais recevoir un fichier avec les colonnes suivantes dans cet ordre: "centre de couts";"montant";"date"
    Puis je vais en recevoir un autre, organisé comme cela : "date";"centre de couts";"montant"
    Les entêtes sont toujours les mêmes?, Si oui, tu peux très bien lire les valeur contenues dans la 1ère ligne de ton tableau pour repérer l'organisation de celui-ci

    Citation Envoyé par ChrisM972
    Citation Envoyé par Qwaz
    Toujours avec cette même ligne, d'où vient TypeEcriture ?
    Cette variable est définie par l'utilisateur. type string.
    S'il la saisie dans un TextBox, autant directement faire reférence à celui-ci, inutile de passer par une variable intermédiaire.

    Rien à voir avec ton problème mais il vaut mieux éviter les caractères accentués sur les noms de composants ou de variables

    Alors que cette ligne de code fonctionnait parfaitement auparavant.
    Je n'arrive pas à faire le lien entre l'affectation de CDC et la ligne qui pose problème. Vu que pour tester cette ligne qui te pose problème tu as vidé le contenu de CommandButton1_Click, le problème peut venir d'une autre des lignes de code qu'il contient qui modifie la valeur de ChoixSté peut-être...

    S'il n'y a pas de données sensibles, peux-tu nous mettre ton fichier en PJ, ça serait plus simple pour comprendre. S'il y a des données sensibles, peux-tu les remplacer avec des données bidons (3/4 lignes de données suffisent)

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

  10. #10
    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
    Les entêtes sont toujours les mêmes?

    Justement non , sinon il n'y aurait pas eu besoin de UserForm

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S'il la saisie dans un TextBox
    c'est défini par l'utilisateur via les checkBox dans le cadre "Type écriture"

    Les données sont bien évidemment confidentielles. donc je ne donne rien, désolé. Il faudra que j'en fasse un Lundi quand je serai au boulot. D'ailleurs peu importe la source ou sa nature, puisqu'il s'agit de sélectionner certaines cellules et de rentrer d'autres données à la Mano qui seront répétées.

    Je veux affecter la référence cellule d'une combobox à une variable de type Range rendue publique. C'est ça que je veux faire. Le reste pour l'instant n'est pas important à mes yeux puisque le reste des macros n'est pas construit.

    Si je supprime l'affectation de CDC uniquement, l'erreur s'appliquera à une autre variable à laquelle j'essaie d'attribuer une réf contenue dans une comboBox.

    le problème peut venir d'une autre des lignes de code qu'il contient qui modifie la valeur de ChoixSté
    Pour le choix de la société, il y a une liste dans laquelle l'utilisateur choisit la société (ce choix se stocke dans une variable de type string), a coté de cette liste une rechercheV affiche le nom de la société correspondant au code .
    Rien de plus.

    Voici un exemple de mon userform remplie.

    Nom : Capture d’écran 2018-05-26 à 10.17.02.png
Affichages : 1374
Taille : 37,6 Ko
    Images attachées Images attachées  

  11. #11
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 124
    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 124
    Par défaut
    Citation Envoyé par ChrisM972 Voir le message
    Justement non , sinon il n'y aurait pas eu besoin de UserForm
    Je demandais si les entêtes étaient toujours les mêmes car il m'a semblait comprendre que le problème était juste lié à leur position dans le tableau pas à leur intitulé.
    Quels autres noms peuvent prendre "date";"centre de couts";"montant" ?

    Citation Envoyé par ChrisM972 Voir le message
    Je veux affecter la référence cellule d'une combobox à une variable de type Range rendue publique.
    Si j'ai bien compris avec le screenshot, CDCBox contient une chaine du style "Feuil1$A1", dans ce cas il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CDC = Range(CDCBox.texte)
    Citation Envoyé par ChrisM972 Voir le message
    C'est ça que je veux faire. Le reste pour l'instant n'est pas important à mes yeux puisque le reste des macros n'est pas construit.
    C'est bien souvent le problème des gens qui viennent poster ici. Il vaut mieux réfléchir à ce que va réaliser ton code et comment tu vas t'y prendre avec de commencer à faire un UserForm. Stocker des données sans penser à comment tu vas y accéder par la suite, c'est courir à l'usine à gaz

    Au lieu de demander un référence à une cellule, tu pourrais simplement demander la colonne qui contient les données.

    N'hésite pas à poster un fichier de démonstration.

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

  12. #12
    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 Qwazerty Voir le message
    C'est bien souvent le problème des gens qui viennent poster ici. Il vaut mieux réfléchir à ce que va réaliser ton code et comment tu vas t'y prendre avec de commencer à faire un UserForm. Stocker des données sans penser à comment tu vas y accéder par la suite, c'est courir à l'usine à gaz
    En effet, c'est le cahier des charges qui définit la façon de coder. Dans mon cas j'avais pas mal de données à gérer. J'ai bien tout schématisé , de même que les différents formats de sortie possible (différents types d'écritures).

    Si j'ai bien compris avec le screenshot, CDCBox contient une chaine du style "Feuil1$A1", dans ce cas il faut faire


    Code :
    Set CDC = Range(CDCBox.texte)

    En fait mon soucis, est que j'utilisais le paramètre "value"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CDC = Range(CDCBox.value)
    au lieu de "text" pour ma RefEdit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CDC = Range(CDCBox.text)
    donc le code bloquait.

    simple ignorance de ma part.

    En tou cas, merci de votre aide

+ 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