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 :

Aide sur l'utilisation des userform [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut Aide sur l'utilisation des userform
    Bonjour,

    Je viens vous demander de l'aide dans la gestion des appels des userform.
    Peut-être pouvez vous aussi m'aiguiller vers un tuto.
    Il y certes un tuto complet sur les fonctions des USF
    http://silkyroad.developpez.com/VBA/UserForm/
    http://silkyroad.developpez.com/VBA/ControlesUserForm

    Mais ce n'est pas assez clair pour moi sur la méthode et les enchainements notamment quand et comment on doit ouvrir et fermer les USF pour rendre proprement la main au procédures en cours.

    Je m'explique, j'ai une macro qui consiste à saisir des valeurs et à remplir une mini base de données qui fonctionne.

    J'ai ajouté un userform de saisie des données de départ; ça a marchouillé un peu mais maintenant ça ne marche plus.
    Je pense que d'une part je ne transfère pas correctement mes variables vers la macro appelée.
    D'autre part j'ai un effet d'affichage d'une feuille en surimpression d'une autre pendant que la macro s'exécute.
    Enfin même si je mets un point d'arret sur la macro appelé, je n'arrive pas à prendre la main.

    Si vous prenez la peine d'essayer mon exemple en renseignant
    article = "85603131",
    OF = "62128100"
    Equipe = "1"

    La macro retourne article non trouvé alors qu'il existe.
    Si je lance directement la macro dans le module 1 appel_data_of() là ça marche.

    Merci beaucoup pour votre aide.
    Denis
    test_saisie.xlsm

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 942
    Points : 28 941
    Points
    28 941
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Mais ce n'est pas assez clair pour moi sur la méthode et les enchainements notamment quand et comment on doit ouvrir et fermer les USF pour rendre proprement la main au procédures en cours.
    On ouvre un UserForm lorsque l'on souhaite utiliser les contrôles qui y sont et on le ferme ensuite en cliquant sur le ControlButton prévu à cet effet ou lorsqu'une procédreu est terminée. C'est à toi de savoir ce que tu souhaites faire. C'est de l'analyse.
    C'est la même chose qu'un formulaire sur internet. Lorsque tu t'es inscrit comme membre de ce forum, tu as cliqué sur un lien Inscription qui à enclenché l'ouverture d'un formulaire d'inscription que tu as toi même fermé en cliquant sur un bouton de confirmation.
    Si vous prenez la peine d'essayer mon exemple en renseignant
    article = "85603131",
    OF = "62128100"
    Equipe = "1"
    Si tu souhaites augmenter tes chances d'obtenir des réponses, il serait préférable que tu publies le code que tu utilises plutôt que d'emblée mettre en téléchargement un classeur que certains intervenants et j'en fait partie n'ouvrent pas.

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Merci pour cette première réponse,
    Je pensais honnêtement que ce serait plus clair de publier mon fichier que des bouts de codes.
    --> je sais que je progfite largement d'une communauté très coopérative et loin de moi l'idée de la décevoir par mes questions maladroites.

    Ce que je veux est clair.
    J'ai créé un macro qui fonctionne.
    J'ai ajouté un userform de saisie des valeurs pour lancer la macro et je souhaite que ce userform s'ouvre quand j'ouvre le fichier.

    J'ai donc une procédure worbookopen qui appelle le userform Saisie et qui lorsque je valide désactive le userform et lance la macro Saisie.
    .... enfin c'est que je crois faire, mais ça ne semble pas fonctionner.

    Voici les différents code.

    Donc le code d'appel dans la procédure open workbook
    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
    Private Sub Workbook_Open()
    ' nettoyage de la feuille
    '----------------------------------------
    ' Oter la protection de la feuille
    '----------------------------------------
        Sheets("Saisie").Unprotect "lamacro"
     
        Sheets("Saisie").Range("C3:I3,K3:L3,K4:L4,H4,C4:D4,C7:O9,D12:F17,C12:O37,C39:O41").Select
     
        Selection.ClearContents
     
        Sheets("Saisie").Protect "lamacro"
     
    saisie.Show
     
    End Sub
    Puis dans le userform le code est
    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
    Private Sub Confirme_Click()
    If Controls("EQ") = "" Or Controls("OF") = "" Or Controls("Article") = "" Then
    MsgBox "Veuillez saisir les valeurs"
    Exit Sub
    Else
    Sheets("Saisie").Range("c4") = Date
    Unload saisie
    'Application.Run "'" & ActiveWorkbook.Name & "'!appel_data_of()"
    Application.Run "'test_saisie.xlsm'!appel_data_of()"
    End If
    End Sub
    Private Sub Annule_Click()
    Unload saisie
    End Sub
    Private Sub EQ_Change()
    eqNr = saisie.EQ
    Sheets("Saisie").Range("h4") = eqNr
    End Sub
    Private Sub OF_Change()
    OfNr = saisie.OF
    Sheets("Saisie").Range("k4") = OfNr
    End Sub
    Private Sub Article_Change()
    ItemNr = saisie.Article
    Sheets("Saisie").Range("k3") = ItemNr
    End Sub
    Enfin le code d'exécution appelé, celui qui marche quand je le lance directement mais qui ne marche pas quand le userform l'appel ou que je ne passe pas les bonnes valeurs de mes variables
    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
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
     
    'Public Article
    Public Ligne As Integer ' ligne de comptage pour positionner sur la fiche de saisie
    Public LigneArt     ' ligne où se trouve l'article cherché
    Public Cell_source  ' la cellule de la base de donnee
    Public Col_source   ' la colonne de la source
    Public Ligplus      ' incrément pour la deuxième ligne (dernier OF)
    Public Lig_cible   'ligne cible à remplir
    Public Col_cible   'colonne de la cible à remplir
    Public Ligne_bdd    'Ligne OF dans la base
    Public EQ
    Public OF
    Public Article
    Sub call_saisie()
    eqNr = ""
    ItemNr = ""
    OfNr = ""
    Load saisie
    saisie.Show
    End Sub
    Sub appel_data_of()
    '
    '*****************************************
    ' Descritption
    '-----------------------------------------
    ' Cette macro va lire la base de donnée et ventile les valeurs dans la fiche de saisie
    ' suivant l'ordre indiqué dans la feuille mapping.
    ' Le principe est que la consigne est générée par l'OF ayant un Flag dans la colonne Ref.
    ' Si on ne trouve pas d'OF de Ref on ne remplit pas la ligne et on avertit.
    ' Ensuite on recherhce le dernier OF
    ' Si cet OF est déjà présent (en cas de reprise ou aprèssauvegarde et relancement de la macro on recherche
    ' l'OF d'avant.
     
    ' pour debug
    'eqNr = "1"
    'ItemNr = "85603131"
    'OfNr = "62128100"
    '*****************************************
    ' à faire
    '----------------------------------------
    ' attention vérifier si la macro revérouille la feuille en cas de sortie de boucle.
    '
    '*****************************************
    'clear des variables
    Ligne = 0
    LigneArt = ""
    Cell_source = ""
    Col_source = ""
    Ligplus = ""
    Lig_cible = ""
    Col_cible = ""
    Ligne_bdd = ""
     
    'vérification des saisies
    '------------------------
     
    'Article
    If Sheets("Saisie").Cells(3, 11) = "" Then
    MsgBox "Veuillez saisir l'article"
    GoTo OpenErreur
    End If
    ''Article (Désignation)
    'If Sheets("Saisie").Cells(3, 3) = "" Then
    'MsgBox "Veuillez saisir la Désignation de l'article"
    'Sheets("Saisie").Cells(3, 3).Select
    'GoTo OpenErreur
    'End If
    'OF
    If Sheets("Saisie").Cells(4, 11) = "" Then
    MsgBox "Veuillez saisir l'OF"
    GoTo OpenErreur
    End If
    'Date
    'If Sheets("Saisie").Cells(4, 3) = "" Then
    'MsgBox "veuillez saisir la date"
    'GoTo OpenErreur
    'End If
    'Equipe
    If Sheets("Saisie").Cells(4, 8) = "" Then
    MsgBox "veuillez saisir l'équipe"
    GoTo OpenErreur
    End If
     
     
    ' Oter la protection de la feuille
    '----------------------------------------
        Sheets("Saisie").Unprotect "lamacro"
     
    ' nettoyage de la feuille
    '----------------------------------------
        Sheets("Saisie").Range("C7:O9,D12:F17,C12:O37,C39:O41").Select
        Selection.ClearContents
     
    ' je prends l'article Renseigné
    '----------------------------------------
    Article = Sheets("Saisie").Range("K3").Value
     
    'j'active la base
    '----------------------------------------
     Sheets("Base de donnée").Activate
     
    'je mets les N° d'articles et les N° OF au format numérique
    '----------------------------------------
    'Sheets("Base de donnée").Columns(1).TextToColumns FieldInfo:=Array(1, 1)
    'Sheets("Base de donnée").Columns(4).TextToColumns FieldInfo:=Array(1, 1)
     
    ' je trie le tableau "base_OF"
    '----------------------------------------
        ActiveWorkbook.Worksheets("Base de donnée").ListObjects("base_OF").Sort. _
            SortFields.Clear
        ActiveWorkbook.Worksheets("Base de donnée").ListObjects("base_OF").Sort. _
            SortFields.Add Key:=Range("base_OF[Article]"), SortOn:=xlSortOnValues, _
            Order:=xlAscending, DataOption:=xlSortTextAsNumbers
        ActiveWorkbook.Worksheets("Base de donnée").ListObjects("base_OF").Sort. _
            SortFields.Add Key:=Range("base_OF[Date]"), SortOn:=xlSortOnValues, Order _
            :=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Base de donnée").ListObjects("base_OF").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
     
    'Je cherche mon article
    '----------------------------------------
    Range("A1").Activate
    On Error Resume Next
        Cells.Find(What:=Article, After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
            LigneArt = ActiveCell.Row()
    On Error GoTo Art_pas_trouve
     
    If Sheets("base de donnée").Cells(LigneArt, 3) <> "X" And Sheets("base de donnée").Cells(LigneArt, 3) <> "x" Then
    MsgBox "Attention l'article ** " & Sheets("Saisie").Cells(3, 11).Value & " **n'a pas de données de références !"
    Else
    ' on affiche la consigne (OF 0). D'abord les données génrales
    '----------------------------------------
    'Date
    Sheets("Saisie").Cells(3, 3) = Sheets("Base de donnée").Cells(LigneArt, 2)
    'OF
    Sheets("Saisie").Cells(2, 18) = Sheets("Base de donnée").Cells(LigneArt, 4)
    'Date
    Sheets("Saisie").Cells(3, 18) = Sheets("Base de donnée").Cells(LigneArt, 5)
    'Equipe
    Sheets("Saisie").Cells(4, 18) = Sheets("Base de donnée").Cells(LigneArt, 6)
     
    'Puis les données détaillées.
    '----------------------------------------
    Ligne = 8 ' on ne remplit pas l'entete
    Ligplus = 0   'lors de la première passe on charge la référence (l'OF 0)
    Application.Run "'" & ActiveWorkbook.Name & "'!Remplissage_fiche_saisie"
     
    'maintenant on cherche le dernier OF qui a tourné
    '----------------------------------------
    LigneArt = LigneArt + 1
    Do While Not Sheets("Base de donnée").Cells(LigneArt, 1).Value <> Article
    LigneArt = LigneArt + 1
    Loop
     
    ' on recule d'un cran pour lire le dernier OF
    LigneArt = LigneArt - 1
    ' attention s'il n'y en a pas on retombe sur l'OF de référence
    ' donc il faut simplement créer et enregistrer les données
    If Sheets("Base de donnée").Cells(LigneArt, 3) = "X" Then
    MsgBox "Pas encore d'OF en historique pour l'article  ** " & Sheets("Saisie").Cells(3, 11).Value & " **renseigner les valeurs et enregistrer"
    GoTo OpenErreur
    End If
    ' si le dernier OF est le même que l'OF encours alors il faut rechercher le précédent
    ' et recharger les valeurs de l'OF en cours
    If Sheets("Saisie").Cells(6, 18) = Sheets("Base de donnée").Cells(LigneArt, 4) Then
    LigneArt = LigneArt - 1
    If Sheets("Base de donnée").Cells(LigneArt, 3) = "X" Then
    MsgBox "Pas encore d'OF en historique pour l'article ** " & Sheets("Saisie").Cells(3, 11).Value & " ** renseigner les valeurs et enregistrer"
    ' là on rajoute +1 à ligneart pour repasser sur l'OF suivant (qui est en fait l'actuel)
    ' et on ajoute + 1 à ligneplus pour positionner l'OF trouvé sur la ligne suivante c'est à dire l'OF actuel.
    LigneArt = LigneArt + 1
    Ligplus = Ligplus + 1
    End If
    End If
    End If
     
     
    ' on affiche le dernier of consigne (OF avec flagX).
    'OF
    Sheets("Saisie").Cells(6, 18) = Sheets("Base de donnée").Cells(LigneArt, 4)
    'Date
    Sheets("Saisie").Cells(7, 18) = Sheets("Base de donnée").Cells(LigneArt, 5)
    'Equipe
    Sheets("Saisie").Cells(8, 18) = Sheets("Base de donnée").Cells(LigneArt, 6)
     
    'Puis les données détaillées.
    '----------------------------------------
    Ligne = 17  ' ici on ne remplit plus l'entête ni les produits
    Ligplus = Ligplus + 1   'on ecrit le dernier OF une ligne plus bas
    Application.Run "'" & ActiveWorkbook.Name & "'!Remplissage_fiche_saisie"
    'End If
    ' Je remets la protection de la feuille
    '----------------------------------------
        ActiveSheet.Protect "lamacro", True, True, True
     
    '****************************************
    '  gestion des erreurs
    '****************************************
    ' sortie exit sub avec remise de la protection de feuille
    OpenErreur:
    ' Je remets la protection de la feuille
    '----------------------------------------
        Sheets("Saisie").Protect "lamacro", True, True, True
    Exit Sub
     
    Art_pas_trouve:
    MsgBox "Article  ** " & Sheets("Saisie").Cells(3, 11).Value & " ** pas trouvé remplir les données pour créer l'article"
    Sheets("Saisie").Activate
    Exit Sub
    End Sub
    Sub Remplissage_fiche_saisie()
    Sheets("Saisie").Activate
     
    'd'abord on charge les données de référence
    ' en colonne S(18) on a la lettre en colonne T(19) on a la première ligne à remplir
    '----------------------------------------
    Map_Cell = Sheets("Mapping").Cells(Ligne, 18)
    Do While Not IsEmpty(Map_Cell)
    If Not IsEmpty(Sheets("Mapping").Cells(Ligne, 18)) Then
    Col_source = Sheets("Mapping").Cells(Ligne, 18).Value
    Col_cible = Sheets("Mapping").Cells(Ligne, 19).Value
    Lig_cible = Sheets("Mapping").Cells(Ligne, 21).Value
    Sheets("Saisie").Cells(Lig_cible + Ligplus, Col_cible) = _
    Sheets("Base de donnée").Cells(LigneArt, Col_source)
    End If
    Ligne = Ligne + 1
    Map_Cell = Sheets("Mapping").Cells(Ligne, 18)
    Loop
     
     
    End Sub
    Sub remplissage_bdd()
    ' Oter la protection de la feuille
    '----------------------------------------
        Sheets("Base de donnée").Unprotect "lamacro"
     
    'vérification des saisies
    '------------------------
    'Article
    If Sheets("Saisie").Cells(3, 11) = "" Then
    MsgBox "Veuillez saisir l'article"
    GoTo OpenErreur
    End If
    'Article (Désignation)
    If Sheets("Saisie").Cells(3, 3) = "" Or Sheets("Saisie").Cells(3, 3) = "Nouveau" Then
    InputBox "Recopier la désignation de l'article"
    'MsgBox "Veuillez saisir la Désignation de l'article"
    Sheets("Saisie").Cells(3, 3).Select
    GoTo OpenErreur
    End If
    'OF
    If Sheets("Saisie").Cells(4, 11) = "" Then
    MsgBox "Veuillez saisir l'OF"
    GoTo OpenErreur
    End If
    'Date
    If Sheets("Saisie").Cells(4, 3) = "" Then
    MsgBox "veuillez saisir la date"
    GoTo OpenErreur
    End If
    'Equipe
    If Sheets("Saisie").Cells(4, 8) = "" Then
    MsgBox "veuillez saisir l'équipe"
    GoTo OpenErreur
    End If
     
    'Je cherche mon OF
    '--------------------
    Sheets("Base de donnée").Activate
    Range("C1").Select
    On Error Resume Next
        Cells.Find(What:=Sheets("Saisie").Cells(4, 11), After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
            LigneArt = ActiveCell.Row()
     
    If Sheets("Saisie").Cells(4, 11) = ActiveCell.Value Then
    Ligne_bdd = ActiveCell.Row()
    MsgBox "l'OF  " & Sheets("Saisie").Cells(4, 11) & "   sera mis à jour"
    Else
    ' on recherche la dernière ligne de la base
    '----------------------------------------
    Ligne_bdd = Sheets("Base de donnée").Range("A1").End(xlDown).Row() + 1
    End If
     
    ' on enregistre les donnée d'entete
    '----------------------------------------
    'Article
    Sheets("Base de donnée").Cells(Ligne_bdd, 1) = Sheets("Saisie").Cells(3, 11)
    'Article (Désignation)
    Sheets("Base de donnée").Cells(Ligne_bdd, 2) = Sheets("Saisie").Cells(3, 3)
    'OF
    Sheets("Base de donnée").Cells(Ligne_bdd, 4) = Sheets("Saisie").Cells(4, 11)
    'Date
    Sheets("Base de donnée").Cells(Ligne_bdd, 5) = Sheets("Saisie").Cells(4, 3)
    'Equipe
    Sheets("Base de donnée").Cells(Ligne_bdd, 6) = Sheets("Saisie").Cells(4, 8)
     
    'Positionnement du pointeur
    '----------------------------------------
    Ligne = 8 ' on ne remplit plus l'entete
    Ligplus = 2   ' l'OF actuel se trouve en troisième ligne
     
    'd'abord on charge les données de référence
    ' en colonne S(18) on a la lettre en colonne T(19) on a la première ligne à remplir
    '----------------------------------------
    Map_Cell = Sheets("Mapping").Cells(Ligne, 18)
    Do While Not IsEmpty(Map_Cell)
    If Not IsEmpty(Sheets("Mapping").Cells(Ligne, 18)) Then
    Col_source = Sheets("Mapping").Cells(Ligne, 18).Value
    Col_cible = Sheets("Mapping").Cells(Ligne, 19).Value
    Lig_cible = Sheets("Mapping").Cells(Ligne, 21).Value
    Sheets("Base de donnée").Cells(Ligne_bdd, Col_source) = Sheets("Saisie").Cells(Lig_cible + Ligplus, Col_cible)
    End If
    Ligne = Ligne + 1
    Map_Cell = Sheets("Mapping").Cells(Ligne, 18)
    Loop
    Sheets("saisie").Activate
     
    ' sortie exit sub avec remise de la protection de feuille
    OpenErreur:
    ' Je remets la protection de la feuille
    '----------------------------------------
        Sheets("Base de donnée").Protect "lamacro", True, True, True
    Sheets("saisie").Activate
    Exit Sub
    Sheets("saisie").Activate
     
    End Sub
    'PARKING
    '----------------------------------------
     
    ''sequence de sortie
    'Msg = "Veux-tu sortir O/N"
    'Title = "test"
    'Ma_feuille = InputBox(Msg, Title)
    'If Ma_feuille = "" Then
    'Exit Sub
    'End If
     
    'ActiveSheet.Cells(Mdtlign, 2).Select
    'If Appel <> "liste" Then
    'MsgBox "Mise à jour effectuée"
    'Sheets(Mon_Mdt).Activate
    'End If
     
    'Dim Ligne As Integer
    'Ligne = 2
    'Map_Cell = Sheets("Mapping").Cells(Ligne, 15)
    'Do While Not IsEmpty(Map_Cell)
    'If Not IsEmpty(Sheets("Mapping").Cells(Ligne, 16)) And _
    'Not IsEmpty(Sheets("Mapping").Cells(Ligne, 5)) Then
    'cell_source = Sheets("Mapping").Cells(Ligne, 2).Value
    'col_cible = Sheets("Mapping").Cells(Ligne, 5).Value
    'Sheets("Liste des projets").Cells(Mdtlign, col_cible) = _
    'Sheets(Mon_Mdt).Range(cell_source)
    'End If
    'Ligne = Ligne + 1
    'Map_Cell = Sheets("Mapping").Cells(Ligne, 1)
    'Loop
    'ActiveSheet.Cells(Mdtlign, 2).Select
    'If Appel <> "liste" Then
    'MsgBox "Mise à jour effectuée"
    'Sheets(Mon_Mdt).Activate
    'End If
    Denis

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 942
    Points : 28 941
    Points
    28 941
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Avant d'aller plus loin, pourquoi à la ligne 9 du code de ton UserForm, utilise-tu cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Application.Run "'test_saisie.xlsm'!appel_data_of()"
    plutôt que

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    C'était si simple !

    Par habitude je lance toujours mes procédures par
    car souvent mes procédures sont lancées à partir d'un autre classeur.
    Je pensais que cette syntaxe était universelle et pouvait s'appliquer dans tous les cas, ce qui n'est manifestement pas le cas.


    Merci.
    Denis

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 942
    Points : 28 941
    Points
    28 941
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Déjà cela ne pouvait pas fonctionner parce-que ta procédure est privée et de plus si par hasard tu modifiais le nom de ton classeur, tu devrais modifier ta ligne de code.
    Pour ma part, j'utilise toujours l'appel direct à la procédure et si je dois traiter un autre classeur, je le fais à l'aide d' une procédure se trouvant dans un seul classeur dit "Maître".
    Il fait éviter d'utiliser du code qui ne rende pas pérenne l'application

  7. #7
    Membre averti
    Inscrit en
    Août 2009
    Messages
    817
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 817
    Points : 314
    Points
    314
    Par défaut
    Je suis d'accord, c'est pour cela que ma syntaxe est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Application.Run "'" & ActiveWorkbook.Name & "'!appel_data_of()"
    ce qui me permet de récupérer le nom du classeur courant, mais là comme cela ne marchait pas, je l'avais commenté et mis le nom du fichier en dur.

    En fait c'est le fait que la procédure soit private qui bloquait.

    la boucle est bouclée, je me concherai un peu moins bête... il y encore du boulot !
    Denis

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 942
    Points : 28 941
    Points
    28 941
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En fait c'est le fait que la procédure soit private qui bloquait.
    Oui et il vaut mieux la conserver comme telle sinon elle se retrouvera dans la liste des Macros accessible à l'utilisateur.

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

Discussions similaires

  1. Aide sur l'utilisation des boutons
    Par Anomaly dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 0
    Dernier message: 24/06/2010, 10h55
  2. 3 précisions sur l'utilisation des "std::vector"
    Par Invité dans le forum SL & STL
    Réponses: 9
    Dernier message: 10/01/2006, 00h42
  3. Compteur sur l'utilisation des index
    Par hkhan dans le forum Administration
    Réponses: 11
    Dernier message: 14/10/2004, 17h57

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