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 - Tableau remplie à la base d'un formulaire


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 21
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : avril 2021
    Messages : 14
    Points : 5
    Points
    5
    Par défaut VBA - Tableau remplie à la base d'un formulaire
    Bonjour à tous,
    Je travaille sur la création d'un tableau qui se remplit sur la base d'un formulaire.
    Le souci que je rencontre est au niveau de cette ligne de code et je ne trouve pas d'où vient l'erreur et comment la corriger

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sheets("Option avec dividendes").ListObjects(1).ListRows.Add
        Sheets("Option avec dividendes").Range("a" & dlt) = Now()
        Sheets("Option avec dividendes").Range("b" & dlt) = K
         Sheets("Option avec dividendes").Range("c" & dlt) = V
        Sheets("Option avec dividendes").Range("d" & dlt) = r & "%"
        Sheets("Option avec dividendes").Range("e" & dlt) = d & "%"
        Sheets("Option avec dividendes").Range("f" & dlt) = T
         Sheets("Option avec dividendes").Range("g" & dlt) = sigma
        Sheets("Option avec dividendes").Range("h" & dlt) = optiont
        Sheets("Option avec dividendes").Range("i" & dlt) = VO(TypeOption, V, K, r, d, T, sigma)
        Sheets("Option avec dividendes").Range("j" & dlt) = Delta_VO(TypeOption, V, K, r, d, T, sigma)
        Sheets("Option avec dividendes").Range("k" & dlt) = Gamma_VO(V, K, r, d, sigma, T)
    ThisWorkbook.Save
    ThisWorkbook.RefreshAll
    option avec dividendes est la feuille sur laquelle je veux transmettre les données du formulaire le problème est dans la première ligne

    Pourriez vous avoir la gentillesse de m'expliquer comment réparer ce bug ?
    merci beaucoup d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    juillet 2016
    Messages
    2 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 861
    Points : 4 973
    Points
    4 973
    Par défaut
    Bonjour,

    Multipliez vos variables "V,K,r,d,sigma,T" par 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        V = Val(V.Value) * 1
        K = Val(K.Value) * 1
        r = Val(r.Value) * 1
        d = Val(d.Value) * 1
        sigma = Val(sigma.Value) * 1
        T = Val(T.Value) * 1
    Mauvaise idée que d'avoir attribué le même nom d'une textbox à une variable.

    Cdlt

  3. #3
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 434
    Points : 50 403
    Points
    50 403
    Billets dans le blog
    92
    Par défaut
    Salut.

    Voici un code qui illustre comment on ajoute des données à une nouvelle ligne d'un tableau structuré. Ce code s'appuie sur un tableau structuré nommé t_Contacts composé des colonnes Prénom, Nom, Date. On récupère l'index de la ligne ajoutée au tableau, puis grâce à l'utilisation des références nommées en VBA, on transfère les données dans les bonnes cellules de la ligne.

    J'ai pris cet exemple avec les trois variables pour coller à ta réalité, mais on pourrait transférer directement les données du formulaire, que celui-ci soit un userform ou un formulaire "feuille de calcul"... Au fait, quelle est la nature de ton formulaire?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub AddContact()
      Dim Prenom As String, Nom As String, DateEntree As Date
      Dim Index As Long
     
      Prenom = "Alain"
      Nom = "Térieur"
      DateEntree = Date
     
      Index = Range("t_Contacts").ListObject.ListRows.Add.Index
      Range("t_Contacts[Prénom]")(Index).Value = Prenom
      Range("t_Contacts[Nom]")(Index).Value = Nom
      Range("t_contacts[Date]")(Index).Value = DateEntree
    End Sub
    Un peu de lecture avec mes réponses à des questions similaires, une contribution et des billets de blog
    https://www.developpez.net/forums/d2...via-recherche/
    https://www.developpez.net/forums/d2.../#post11705265
    https://www.developpez.net/forums/d2...eau-structure/
    https://www.developpez.net/forums/bl...lacer-valeurs/
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  4. #4
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 434
    Points : 50 403
    Points
    50 403
    Billets dans le blog
    92
    Par défaut
    Salut

    @Arturo,

    Je ne comprends pas pourquoi tu effectues Val(...)*1. Val(...) transforme en double, il n'est donc pas nécessaire de réaliser un *1 derrière. C'est l'un ou l'autre, il me semble.

    Par contre, les résultats ne sont pas identiques car le séparateur décimal utilisé dans la saisie va faire que Val et * 1 ne vont pas renvoyer les mêmes valeurs.
    • Val("1.5") => 1,5
    • Val("1,5") => 1
    • "1.5" * 1 => 15
    • "1,5" * 1 => 1,5



    @Halima,

    Puisque tu travailles avec un tableau structuré, je te conseillerais de travailler avec les références structurées plutôt qu'avec le code Sheets("Option avec dividendes").Range("a" & dlt) = Now() qui est un code que je considère comme obsolète. L'utilisation des références va détacher ton code des colonnes de la feuille, ce qui lui permet de continuer à fonctionner sans douleurs si tu dois ajouter, supprimer ou réorganiser des colonnes du tableau.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Expert confirmé
    Homme Profil pro
    Electrotechnicien
    Inscrit en
    juillet 2016
    Messages
    2 861
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Electrotechnicien

    Informations forums :
    Inscription : juillet 2016
    Messages : 2 861
    Points : 4 973
    Points
    4 973
    Par défaut
    Bonjour Pierre,

    Je ne comprends pas pourquoi tu effectues Val(...)*1. Val(...) transforme en double, il n'est donc pas nécessaire de réaliser un *1 derrière. C'est l'un ou l'autre, il me semble.
    Je n'ai pas trop creusé, mais j'avais constaté que la variable v dans Val("v.value") restait en string, ce qui générait une erreur dans la ligne de calcul suivante, d'où la simplicité de *1.

    Cdlt

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2021
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 21
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : avril 2021
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    bonjour,
    @Pierre
    j'ai essayé d'appliquer le code que vous m'avez donné mais j'ai toujours pas réussi, je pense que je l'ai mal appliqué.

  7. #7
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    17 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 17 434
    Points : 50 403
    Points
    50 403
    Billets dans le blog
    92
    Par défaut
    Pourrais-tu le mettre ici et mettre une copie d'écran?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/03/2021, 15h15
  2. Réponses: 3
    Dernier message: 17/08/2009, 09h57
  3. Réponses: 6
    Dernier message: 03/04/2007, 10h19
  4. Réponses: 3
    Dernier message: 09/06/2006, 08h29
  5. Réponses: 7
    Dernier message: 08/06/2005, 11h04

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