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 :

[VBA-E] problème avec une formule


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut [VBA-E] problème avec une formule
    Bonjour à tous.
    J'ai un problème suite à un programme VBA (enfin c'est ce que je pense c'est peut etre pas ca).
    Je m'explique, j'ai crée sous VBA une userform qui est lancée à partir d'excel.
    Cette userform sert à remplir des données dans des textbox. Les données sont renvoyées dans une feuille excel. Elle servent ensuite à faire des calculs dans excel.
    Le problème c'est que mes données apparaissent dans les cellules comme si j'avai écri '123. Elles se mettent toutes sur la gauche et lorsque je fais somme(B2:B5) le resultat est toujours 0.
    D'ou peut provenir mon problème. De VBA ou d'Excel? J'ai essayé de chercher mais la je vois vraiment pas.
    Si vous avez des questions n'hésitez pas.
    Amélie

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cells(NoLigne,NoCol).value = Val(Me.textbox1.text)
    Teste cette syntaxe en adaptant

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Hello dadavyvy,
    Évidemment, c'est mieux, mais c'est à propos de cdbl et val : Je me souviens d'une discussion où, dans un cas il valait mieux utiliser val et dans l'autre, cdbl. C'était à propos de date. Tu as une idée sur les raisons de l'utilisation de l'un ou de l'autre ?
    Merci

    Edit
    dadavyvy, toujours, pourquoi tu as effacé ta solution ?

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Mon code de suavegarde des donnée c'est ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Private Sub Sauvegarde(PanelIndex As Integer)
    CurrentPanelNo = base1.SelectedItem.Index
    With BDD1
    For CurrentPanelNo = 0 To 2
    v = CurrentPanelNo
        .Cells(Date1Row, 4 + v) = Controls("PR" & "0" & CurrentPanelNo & "0")
        .Cells(Date1Row, 7 + v) = Controls("PR" & "0" & CurrentPanelNo & "1")
        .Cells(Date1Row, 10 + v) = Controls("PR" & "0" & CurrentPanelNo & "2")
        .Cells(Date1Row, 13 + v) = Controls("PR" & "0" & CurrentPanelNo & "3")
        .Cells(Date1Row, 16 + v) = Controls("PR" & "0" & CurrentPanelNo & "4")
    ...
    Il faudrai donc que je mette à chaque fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cells(Date1Row, 4 + v).value = val(Control("PR" & "0" & CurrentPanelNo & "0"))
    C'est ce que tu voulais dire ou est ce que je dois ecrire ca dans un autre module?

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Visiblement ca fonctionne super bien. je change tout mon code.
    merci beaucoup maintenant tout mon projet fonctionne à la perfection.
    Amélie

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    C'est ce que je voulais dire mais vu que ce sont des dates, je ferais autrement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(Date1Row, 16 + v) = Format(cdbl(Controls("PR" & "0" & CurrentPanelNo & "4")),"dd/mm/yyyy")
    selon le format de date que tu souhaites.
    Pas testé. Tu peux faire ça pour nous ?
    A+

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    dadavyvy avait proposé un code qui vérifiait la donnée avant de la coller dans la cellule. Je propose la même chose, mais ce contrôle devrait être fait lors de la saisie, dans l'événement exit de la textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
        If Not IsDate(TextBox1.Text) Then
            MsgBox "Saisir une date valide (jj/mm/yyyy)"
            Cancel = True
            TextBox1.SetFocus
        End If
    End sub
    A+

  8. #8
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    Je ne comprend pas, ce ne sont pas des dates ce sont des nombres qui sont entrées dans les textbox. le seul moment ou j'ai des dates c'est lorsque je selectionne le mois et l'année au début sur ma première interface. c'est ce qui servira à choisir la ligne concernée par la textbox.
    Je veux bien essayer quand même mais j'ai pas tout compris la je crois.

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ok. C'est Date1Row qui m'a trompé
    Dans ce cas là, la syntaxe que tu as proposé est bonne mais dadavyvy avait proposé une vérification qui me plaisait bien, je la remets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If isnumeric(Controls("PR" & "0" & CurrentPanelNo & "0").text) then _
    Cells(Date1Row, 4 + v).value = val(Control("PR" & "0" & CurrentPanelNo & "0").text)
    Ce qui ne me plait pas bien dans ce cas, c'est si la contenu de ta textbox n'est pas numérique. Et donc, une vérif de la validité de la donnée serait plus sioux dans l'exit de la textbox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    if Textbox1.text = "" then exit sub 'n'oblige pas la saisie
        If Not Isnumeric(TextBox1.Text) Then
            MsgBox "Saisir une valeur"
            Cancel = True
            TextBox1.SetFocus
        End If
    End sub
    Auquel cas, ta ligne peut se réduire à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Date1Row, 4 + v).value = val(Control("PR" & "0" & CurrentPanelNo & "0").text)
    Tu dis
    A+

  10. #10
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 73
    Points : 41
    Points
    41
    Par défaut
    En fait les personnes qui saisiront leur données ne pourront pas saisir toutes les données en même temps car il y a des délai en fonction des données. Par contre c'est vrai que dans 3 cas mes textbox me servent à entrer des commentaires donc pas des données numériques. Je ne sais pas trop si je dois appliquer le dernier code que tu ma donné car j'ai environ 270 textbox et ca va faire un programme énorme déja qu'il est bien long. au mieux je peux faire un for each control in ... mais dans ce cas ca me prendrai en compte mes 3 textbox commentaires. La ca fonctionne tres bien et mes calculs se font bien c'est déja super bien.
    Merci beaucoup

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Juste une indication :
    Tu pourrais faire un test unique pour tous tes textbox
    Tu as le nom de chacun d'eux avec ActiveControl.name
    En faisant référence à ce nom, tu pourrais appeler une sub unique qui vérifie la donnée saisie dans tous les textbox concernés
    Mais comme tu es partie, je pense que ce sera pour une prochaine fois...
    A+

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

Discussions similaires

  1. [XL-2003] Problème avec une formule Matricielle
    Par willou893 dans le forum Excel
    Réponses: 9
    Dernier message: 01/12/2011, 14h25
  2. [XL-2007] problème avec une formule Excel
    Par skipeemed dans le forum Excel
    Réponses: 1
    Dernier message: 09/09/2011, 12h36
  3. [XL-2010] Problème avec une formule et des guillemets
    Par Clausisse dans le forum Excel
    Réponses: 1
    Dernier message: 22/07/2011, 08h38
  4. Problème avec une formule mathématique
    Par Djobird dans le forum Débuter
    Réponses: 2
    Dernier message: 01/02/2009, 15h59
  5. [VBA-E] Problème avec une UserForm
    Par jamelie dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 16/05/2007, 14h20

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