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 :

Variable et msg box ne fonctionnent pas [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut Variable et msg box ne fonctionnent pas
    Bonjour le forum

    Je viens de réaliser un petit programme, mais comme je suis un novice tout ne fonctionne pas.



    Nom : Capture.JPG
Affichages : 288
Taille : 144,4 Ko

    Depuis mon userform je viens incrémenter des lignes dans ma feuille, jusque là pas de souci. Dans les colonnes surlignées en jaune je souhaite que les dates change de format " pour les mois "mmmm" et année "yyyy".
    J'ai déclaré une variable qui fonctionne dans un autre programme mais pas dans celui ci, peut être pas au bon endroit???? "Voir le code"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim i As VariantFor Each i In Range("b5:b" & Cells(Rows.Count, "b").End(xlUp).Row) ' transformation de la date en mois
     
    If IsDate(i) Then i = Format(i, "mmmm")
    Next i
    For Each i In Range("c5:c" & Cells(Rows.Count, "c").End(xlUp).Row) ' transformation de la date en Année
    If IsDate(i) Then i = Format(ci, "yyyy")
    Next i
    ensuite lorsque je boucle en début de programme pour verifier si tous les controls sont remplis, le message sur la listbox ne fonctionne pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    'On teste la saisie de  l'agent     
      If Me.choix.Value = "" Then
           MsgBox "Vous devez entrer un Nom."
           Me.choix.SetFocus
           Exit Sub
        End If
    Est ce que c'est parcque c'est du multiselect multicolonnes ??

    je vous joint le code entier du programme entier?


    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
     
    'Déclaration des variables
     
     
    Dim Liste, Sequence, Durée, nbCol, L, a()
     
     
    Private Sub CommandButton1_Click()
    UserForm1.Show
    End Sub
     
     
     
     
     
     
    Sub UserForm_Initialize()
    Gpt.Value = (Sheets("Agents").Range("a1")) 'Groupement
    Zone.Value = (Sheets("Agents").Range("b1")) 'Zone
    Centre.Value = (Sheets("Agents").Range("c1")) 'Centre
     
      nbCol = 3 'Nombre de colonnes de la liste sur la feuille Thèmes
      L = 200 'Nombre de lignes dans la liste
     
      ReDim a(1 To L, 1 To nbCol)
      'Remplissage des colonnes 1 à 3 de la listbox nommée choix,
     
      Set Liste = Sheets("Agents")
      Set Thèmes = Sheets("Thèmes")
      Set Durée = Sheets("Thèmes")
      'Remplir la ligne jusqu'à la dernière ligne trouvée
       Me.choix.List = Range(Liste.[d4], Liste.[f65000].End(xlUp)).Value   ' liste des noms
       Me.Sequence_pédagogique.List = Range(Thèmes.[c3], Thèmes.[c65000].End(xlUp)).Value    'liste des séquences
       Me.Temps.List = Range(Thèmes.[i4], Thèmes.[i65000].End(xlUp)).Value     '  liste des durées
      'Option de sélection multiple
      Me.choix.MultiSelect = fmMultiSelectMulti
         Me.choix.ColumnCount = nbCol
        Me.choix.ColumnWidths = "100;40;40"
     
     
    End Sub
     
     
    Private Sub cmdValider_Click()
    ' On teste la saisie de la dat
        If Me.DateSaisie.Text = "" Then
            MsgBox "Vous devez entrer une date."
            Me.DateSaisie.SetFocus
            Exit Sub
        End If
            If Not IsDate(DateSaisie.Text) Then
            MsgBox "format incorrect"
            DateSaisie.Text = ""
            Exit Sub
        End If
           'On teste la saisie de  l'agent
           If Me.choix.Value = "" Then
           MsgBox "Vous devez entrer un Nom."
           Me.choix.SetFocus
           Exit Sub
        End If
        ' On teste la saisie du thémes de manoeuvres
            If Me.Sequence_pédagogique.Text = "" Then
            MsgBox "Vous devez entrer une Sequence pédagogique."
            Me.Sequence_pédagogique.SetFocus
            Exit Sub
        End If
        ' On teste la saisie de  l'agent
        If Me.Temps.Value = "" Then
            MsgBox "Vous devez entrer un temps de formation ."
            Me.Temps.SetFocus
            Exit Sub
        End If
    'Endroit de la feuille où remplir la base:
     
     
    Dim k As Byte                  ' boucle sur la listbox et transfert les données contenues dans les différents controls
    For k = 0 To Me.choix.ListCount - 1
    If Me.choix.Selected(k) = True Then
     ligne = ligne + 1
     
         For c = 0 To nbCol - 1 'boucle sur les colonnes
     
           a(ligne, c + 1) = Me.choix.List(k, c)
    Next c
    Range("a65536").End(xlUp).Offset(1, 0).Value = DateSaisie ' remplissage de la  colonne date
    Range("b65536").End(xlUp).Offset(1, 0).Value = DateSaisie   ' remplissage de la  colonne mois
    Range("c65536").End(xlUp).Offset(1, 0).Value = DateSaisie ' remplissage de la  colonne Année
    Range("d65536").End(xlUp).Offset(1, 0).Value = Gpt ' remplissage de la  colonne groupement
    Range("e65536").End(xlUp).Offset(1, 0).Value = Zone ' remplissage de la  colonne zone
    Range("f65536").End(xlUp).Offset(1, 0).Value = Centre ' remplissage de la  colonne centre
    Range("J65536").End(xlUp).Offset(1, 0).Value = Module         ' remplissage de la  colonne module
    Range("K65536").End(xlUp).Offset(1, 0).Value = Thème           ' remplissage de la  colonne uv
    Range("L65536").End(xlUp).Offset(1, 0).Value = Sequence_pédagogique  ' remplissage de la  colonne Sequence
    Range("M65536").End(xlUp).Offset(1, 0).Value = Temps.Value          ' remplissage de la  colonne temps
    Range("N65536").End(xlUp).Offset(1, 0).Value = Formation.Value          ' remplissage de la  colonne for
    Range("O65536").End(xlUp).Offset(1, 0).Value = Abs_for.Value          ' remplissage de la  colonne Abs for
     
     
    End If
     
     
    Next k 'boucle sur les colonnes
    Range("g65536").End(xlUp).Offset(1, 0).Resize(UBound(a), nbCol) = a 'remplissage de la  colonne grade, nom ,statut
     
     
    Dim i  As Variant
    For Each i In Range("b5:b" & Cells(Rows.Count, "b").End(xlUp).Row)   ' transformation de la date en mois
        If IsDate(i) Then i = Format(i, "mmmm")
    Next i
    For Each i In Range("c5:c" & Cells(Rows.Count, "c").End(xlUp).Row)     ' transformation de la date en Année
        If IsDate(i) Then i = Format(ci, "yyyy")
    Next i
     
     
     Dim intRet As Integer
     Dim y As Control
    intRet = MsgBox("Veux tu enregistrer une nouvelle date", vbInformation + vbYesNo, " Enregistrement effectué avec succès")
    If intRet = vbYes Then
        'procédure si click sur Oui
        'vider la combo noms
        Me.choix.MultiSelect = 0
        Me.choix.MultiSelect = 1
        DateSaisie.Value = ""
         Module.Value = ""
          Thème.Value = ""
           Formation.Value = ""
            Abs_for.Value = ""
     For Each y In Me.Controls
         Select Case TypeName(y)
     
            Case "ComboBox"
              y.ListIndex = -1
         End Select
      Next y
     
     
    Else
     
     
        If intRet = vbNo Then
        Me.choix.MultiSelect = 0
        Me.choix.MultiSelect = 1
        DateSaisie.Value = ""
         Module.Value = ""
          Thème.Value = ""
           Formation.Value = ""
            Abs_for.Value = ""
        'procédure si click sur Non les combos sont vidé
      For Each y In Me.Controls
         Select Case TypeName(y)
     
     
            Case "ComboBox"
              y.ListIndex = -1
         End Select
      Next y
    End If
    inret = MsgBox("Appuie sur OK pour fermer le programme", vbCritical + vbOKOnly, " ")
    If intRet = vbOKOnly Then
    ActiveWorkbook.Save
     
     
    End If
    Unload Me
    End If
     
     
    End Sub
     
     
    Private Sub Sequence_pédagogique_Click()
     
     
      ligne = Sheets("Thèmes").[c:c].Find(Sequence_pédagogique, LookIn:=xlValues).Row
       Me.Module = Sheets("Thèmes").Cells(ligne, 1)
       Me.Thème = Sheets("Thèmes").Cells(ligne, 2)
     
        Dim Tbl
        Dim Tbl2
        Dim x As Integer
        Dim y As Integer
        Dim Retour_for As Integer
        Dim Retour_Abs As Integer
     
        Tbl = Array("SAP", "OPD", "INC", "SR", "Fdf", "CAD")
        For x = 0 To UBound(Tbl)
        If Module.Text = Tbl(x) Then Retour_for = 1: Exit For ' renvoie 1 si la txt module est = à une valeur de la table
        Next x
        Formation = Retour_for
     
        Tbl2 = Array("Abs for")
        For y = 0 To UBound(Tbl2)
        If Module.Text = Tbl2(y) Then Retour_Abs = 1: Exit For ' renvoie 1 si la txt module est = à une valeur de la table2
        Next y
        Abs_for = Retour_Abs
     
    End Sub
    Private Sub DateSaisie_Change()
    Dim valeur As Byte
    DateSaisie.MaxLength = 10
    valeur = Len(DateSaisie)
    If valeur = 2 Or valeur = 5 Then DateSaisie = DateSaisie & "/"
    End Sub
    En vous remerciant pour votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Bonjour,

    effectivement, la liste multiselectionnable impose un traitement different de celui utilise pour la monoselection.

    Pour ton test tu peux passer par un code comme celui-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim bOk As Boolean
    bOk=False
    For k = 0 To Me.choix.ListCount - 1
        If Me.choix.Selected(k) = True Then
            bOk=True
            Exit For
        End If
    Next k
    if bOk Then
        'c'est bon
    Else
        Msg box "pas Glop"
    End If
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut Re à jean philippe André
    Merci pour la réponse,

    ça fonctionne, j'ai juste rajouter en fin la prise de focus sur la lbx , ci joint le code.
    Il ne me reste que les format date des cellules et c'est bon.

    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
     
     Dim bOk As Boolean 'On teste la saisie de  l'agent
    bOk = False
    For w = 0 To Me.choix.ListCount - 1
        If Me.choix.Selected(w) = True Then
            bOk = True
            Exit For
        End If
    Next w
    If bOk Then
        'c'est bon
    Else
        MsgBox "Vous devez entrer au moins un Nom"
        Me.choix.SetFocus
        Exit Sub
    End If
    Même si c'est du bricolage, Je joint le fichier si ça peut aider quelqu'un, reste juste le point de changement de format sur les colonne B et C et il serra fini.

    Merci pour votre aide
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Attention, la fonction Format retourne une chaine de caracteres et non une date.
    Si tu veux changer le format d'afficher, il faut regarder NumberFormat, par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A1").NumberFormat = "dd/mm/yy"
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  5. #5
    Membre confirmé
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Par défaut re
    Merci tout fonctionne

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/12/2010, 11h58
  2. Le passage de ma variable de session (PHP) ne fonctionne pas
    Par beegees dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 27/03/2009, 14h10
  3. mon len("variable") ne fonctionne pas
    Par beegees dans le forum ASP
    Réponses: 15
    Dernier message: 19/10/2006, 10h23
  4. Réponses: 4
    Dernier message: 06/09/2006, 14h50
  5. Réponses: 2
    Dernier message: 06/09/2006, 14h27

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