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 :

Pb conversion nombre et date suite modification avec userform [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut Pb conversion nombre et date suite modification avec userform
    Bonjour
    N'étant qu'un piètre bricoleur en VBA, je vais déjà essayer de me faire comprendre, en espérant que vous puissiez m'apporter une aide et surtout que je puisse l'exploiter.

    J'ai 2 souci sur lesquels je bloque complètement.

    1) J'ai un classeur avec plusieurs feuilles contenant des tableaux. Ces tableaux sont alimentés par un formulaire, les données sont converties selon mes besoins en nombre (val) ou Date (Cdate) ou restant en texte. Jusque là ce va.
    Ensuite, j'ai d'autre petit formulaires qui me permettent de modifier les données, le souci, c'est que ce formulaire ne reprend pas les données de manière individuelle, je me retrouve avec des données qui sont au format texte, ce qui me pose des souci pour les formules et les conditions.

    2) A partir des données des tableaux, j'obtiens différents résultat que je souhaite conserver (et réutiliser) de manière fixe ; Je souhaite si possible dans le code de mes 2 userform qu'en fin de procédure, la valeur (en C24 dans l'exemple) soit copiée en conservée en fin de tableau pour chacune de date. inclure les formule dans le formulaire ne me semble pas possible au vu de la compléxité et de l'imbrication dans le classeur.

    J'espère avoir été clair ou au moins un minimum compréhensible.

    Merci par avance de votre aide.
    Cordialement
    Joël
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Essai avec 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    Private Sub CmdModifier_Click()
     
        ' Modifier
        Dim Ctrl As Control
        Dim Colonne As Integer
        Dim Ligne As Long
     
        If Me.CboDate.ListIndex = -1 Then Exit Sub
     
        Ligne = Me.CboDate.ListIndex + 4
     
        With Sheets("Données")
     
            For Each Ctrl In Me.Controls
     
                Colonne = Val(Ctrl.Tag)
     
                If Colonne > 0 Then
     
                    If IsNumeric(Ctrl) Then
     
                        .Cells(Ligne, Colonne) = CDbl(Ctrl)
     
                    Else
     
                        .Cells(Ligne, Colonne) = Ctrl
     
                    End If
     
                End If
     
            Next Ctrl
     
        End With
     
        Unload Me
     
    End Sub
    Hervé.

  3. #3
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    Bonjour
    Merci de ta réponse matinale
    Ca fonctionne sur le fichier exemple, je transfère sur mon fichier initiale et je te redis.
    J'ai juste pas pensé hier soir, fatigue peut être, que j'avais quelques case avec des dates, dans l'exemple, elles sembles passer en texte.
    Joël

    Re
    Je confirme, ça fonctionne impeccable pour les chiffres entiers, pour les décimaux, je doit saisir la virgule du clavier texte, le point du pavé fait convertir en texte.
    Les dates sont également converties en texte, elles sont au format jj/mm/aaaa au départ.
    Joël

    Re
    J'ai modifié le code comme suit:
    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
     
    Dim Ctrl As Control
        Dim Colonne As Integer
        Dim Ligne As Long
     
         If Me.CboDate.ListIndex = -1 Then Exit Sub
         Ligne = Me.CboDate.ListIndex + 4
         With Sheets("Données")
             For Each Ctrl In Me.Controls
                 Colonne = Val(Ctrl.Tag)
                 If Colonne > 0 Then
                     If IsNumeric(Ctrl) Then
                         .Cells(Ligne, Colonne) = CDbl(Ctrl)
                     Else
                     If IsDate(Ctrl) Then
                         .Cells(Ligne, Colonne) = CDate(Ctrl)
                     Else
                         .Cells(Ligne, Colonne) = Ctrl
                     End If
                 End If
                 End If
             Next Ctrl
         End With
       Unload Me
    Ca fonctionne pour les dates, également pour les chiffres entiers, par contre si je met un point dans les valeurs numérique, il me les convertis en date.

    Joël

  4. #4
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Bonjour

    Pour obtenir le bon séparateur décimal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim a As Variant
                  a = Replace(Replace(Ctrl, ".", Format(0, ".")), ",", Format(0, "."))
                     If IsNumeric(a) Then
                         .Cells(Ligne, Colonne) = CDbl(a)
                     Else
                     If IsDate(Ctrl) Then
                         .Cells(Ligne, Colonne) = CDate(Ctrl)
                     Else
                         .Cells(Ligne, Colonne) = Ctrl
                     End If

  5. #5
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    RE
    Merci, mais je n'arrive pas à la faire fonctionner
    J'ai modifié le code comme ci-dessous, ça ne fonctionne pas et si je change de place la ligne a = Replace(Replace(Ctrl, ".", Format(0, ".")), ",", Format(0, ".")) ça me plante le code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    Private Sub CmdModifier_Click()
     
        ' Modifier
        Dim Ctrl As Control
        Dim Colonne As Integer
        Dim Ligne As Long
        Dim a As Variant
     
         If Me.CboDate.ListIndex = -1 Then Exit Sub
         Ligne = Me.CboDate.ListIndex + 4
         With Sheets("Data_Ration")
     
             For Each Ctrl In Me.Controls
                 Colonne = Val(Ctrl.Tag)
                 If Colonne > 0 Then
     
                 a = Replace(Replace(Ctrl, ".", Format(0, ".")), ",", Format(0, "."))
                     If IsNumeric(Ctrl) Then
                         .Cells(Ligne, Colonne) = CDbl(Ctrl)
                     Else
                     If IsDate(Ctrl) Then
                         .Cells(Ligne, Colonne) = CDate(Ctrl)
                     Else
                         .Cells(Ligne, Colonne) = Ctrl
                     End If
                   End If
                 End If
             Next Ctrl
         End With
     
       Unload Me
     
    End Sub
    Joël

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    test ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    ActiveCell = TrouveType("toto")
    ActiveCell.Offset(, 1) = TrouveType("5.2")
    ActiveCell.Offset(, 2) = TrouveType("01/01/2014")
    ActiveCell.Offset(, 3) = TrouveType("01/01/2014 15:20")
    End Sub
     
    Function TrouveType(V)
    TrouveType = V
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function
    If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function
    End Function

  7. #7
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    RE
    Dur les code pour les néophytes, quand j'avance d'un peu, j'ai l'impression de reculer de 2.
    En plus de mon problème de point et de virgule, en voila un autre.
    Toujours avec ce même code, les cellules vides mais converties en nombre dans mon premier formulaire, sont vidées par le second code et excel ne me les reconnait plus dans mes calculs.
    Cdt
    joël

  8. #8
    Invité
    Invité(e)
    Par défaut
    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
    Function TrouveType(V)
    TrouveType = V
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 And InStr(TrouveType, ":") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd hh:mm"): Exit Function
    If IsDate(TrouveType) = True And InStr(TrouveType, "/") <> 0 Then TrouveType = Format(TrouveType, "yyyy-mm-dd"): Exit Function
    If IsNumeric(Replace(TrouveType, ".", ",")) = True Then TrouveType = Replace(TrouveType, ",", "."): Exit Function
    End Function
     
     
    Private Sub CmdModifier_Click()
     
        ' Modifier
        Dim Ctrl As Control
        Dim Colonne As Integer
        Dim Ligne As Long
        Dim a As Variant
     
         If Me.CboDate.ListIndex = -1 Then Exit Sub
         Ligne = Me.CboDate.ListIndex + 4
         With Sheets("Data_Ration")
     
             For Each Ctrl In Me.Controls
                 Colonne = Val(Ctrl.Tag)
                 If Colonne > 0 Then
                       .Cells(Ligne, Colonne) = TrouveType(Ctrl)
                 End If
             Next Ctrl
         End With
     
       Unload Me
     
    End Sub

  9. #9
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    Re
    Excellent, merci beaucoup.
    Là est la différence entre un pro et un bricoleur.
    Par clarté, je note ce post résolu, cependant j'en n'ouvre à suivre un nouveau, je bloque sur 2-3 autres soucis.
    Cdt
    Joël

  10. #10
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    RE
    Je réouvre ce post, je croyais avoir résolu les conséquences des cette modification de code, je viens d'en retrouvé une nouvelle.

    Je vais essayé d'être compréhensible dans mes explications.

    Le souci provient des formats nombre.

    Dans mon fichier de travail, les tableaux de données sont alimentés par un formulaire qui convertis avec Val (..) les données au format nombre.
    Le dernier code du formulaire de modification traduit bien les données au bon format exploitable par excel.
    Dans ma feuille excel de traitement de données, pas de souci pour les cellules contenant des nombres, les formules fonctionnent.
    Les problèmes se poses pour les cellules vides ou valeur zéro.
    J'ai des formules conditionnelles du type =si(A1="";"";A1+B1) pour éviter les erreurs. Ces conditions fonctionnent avec les données issues de mon formulaire de création, mais plus si j'ai utilisé le formulaire de modification.
    Si je remplace par =si(A1=0;0;A1+B1), c'est l'inverse, ça ne fonctionne plus avec le formulaire de création , mais Ok avec celui de modifiaction.
    J'ai essayé si(esterreur.., je ne suis pas parvenu à résoudre non plus.

    Comment puis je remédier à se souci, est que la conversion Val (...) est la bonne? ou doit ajouté un code complémentaire? ou...
    Merci de vos lumières.

    Joël

  11. #11
    Invité
    Invité(e)
    Par défaut
    oublis la fonction Val, utilise ma fonction TrouveType.

    si tu l'utilise à plusieurs endroits de ton programme, retire la du UserForm et mets la dans un module.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Val(1.5) 'OK
    val("1,5")'KO  val("1,5")=0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub CboDate_Change()
    Dim Ctrl As Control
    Dim Colonne As Integer
    
      If Me.CboDate.ListIndex = -1 Then Exit Sub
      With Sheets("Données")
        Ligne = Me.CboDate.ListIndex + 4
        For Each Ctrl In Me.Controls
          Colonne = CInt("0" & Ctrl.Tag)
          If Colonne > 0 Then Ctrl = .Cells(Ligne, Colonne)
        Next Ctrl
      End With
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    With LignTablo.Range
        .Cells(1, 1) = TrouveType(BoxDateD2)
        .Cells(1, 2) = TrouveType(TextBox1)
        .Cells(1, 3) = TrouveType(TextBox2)
        .Cells(1, 4) = TrouveType(TextBox3)
        .Cells(1, 5) = TrouveType(TextBox4)
        .Cells(1, 6) = TrouveType(TextBox5)
        .Cells(1, 7) = TrouveType(TextBox6)
        .Cells(1, 8) = TrouveType(CommentairesD2)
    End With
    Dernière modification par Invité ; 29/10/2014 à 15h34.

  12. #12
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    RE
    Pas souci pour la formulaire création, mais blocage sur le code au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .Cells(1, 1) = TrouveType(BoxDateD2)
    Par la même occasion, sur l'autre fil, pour ces mêmes formulaires, le calcul se fait bien, par contre il ne prend pas en compte la date de la feuille de saisie (F7), il prend la valeur et la transfère en fin de tableau par rapport à la date de la combobox.

    A l'usage, je m'aperçois que je n'aurais pas du mette la date en combobox mais en textbox chargée avec la date F7 de la feuille 1 afin d'éviter les erreur d'adressage. toutes mes formules de ma feuille 1 ne faisant référence qu'à une seule date à la fois.

    Joël
    Fichiers attachés Fichiers attachés

  13. #13
    Membre confirmé
    Homme Profil pro
    Profession indépendande
    Inscrit en
    Octobre 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Profession indépendande
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Octobre 2014
    Messages : 102
    Par défaut
    Bonjour
    Après relecture du code avec des yeux frais du matin, correction, le code fonctionne, MERCI, excellent cette fonction trouvetype.
    Le question de conversion de combobox à textbox étant également posée sur un autre sujet, je clos celui-ci.
    Merci encore
    Joël

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

Discussions similaires

  1. [Macro] Conversion nombre en date
    Par Florian53 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 18/03/2015, 13h37
  2. [Débutant] Conversion Nombre en Date et Heure
    Par vg-matrix dans le forum VB.NET
    Réponses: 6
    Dernier message: 03/03/2014, 10h17
  3. [XL-2003] Conversion nombre en date et ajout dans une formule
    Par clem71 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/04/2009, 10h26
  4. Conversion nombre en date
    Par polux dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 06/10/2007, 04h47
  5. Conversion nombre en date
    Par onyouma dans le forum Access
    Réponses: 6
    Dernier message: 30/01/2006, 11h06

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