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 :

Traduction Excel vers VBA tableau listobject


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 15
    Points
    15
    Par défaut Traduction Excel vers VBA tableau listobject
    Bonjour à tous.

    Ma demande d'aide : dans quelle direction dois-je chercher pour trouver mon erreur ?

    J'ai une formule Excel qui fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(INDEX(A1 : D3;SOMMEPROD(EQUIV(G1 & H1 & I1 & J1;A1:A3 & B1:B3 & C1:C3 & D1 : D3;0) * 1);4));"Pas de résultat";"Résultat")
    Quand je l'enregistre via macro, elle devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=IF(ISNA(INDEX(A1:D3,SUMPRODUCT(MATCH(G1 & H1 & I1 & J1,A1:A3 & B1:B3 & C1:C3 & D1:D3,0) * 1),4)),""Pas de résultat"",""Résultat"")"
    Or, je voudrais la faire fonctionner avec les tableaux listobject.
    J'ai donc adapté le code ci-dessus par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Dim wsFullDatas As Worksheet
        Set wsFullDatas = ThisWorkbook.Worksheets("Full Datas")
        Dim varTableauFullDatas As ListObject
        Set varTableauFullDatas = wsFullDatas.ListObjects("TableauFullDatas")
        If IsNA(Index(varTableauFullDatas, SumProduct(Match((ComboBoxAddNewFlowCountryName & ComboBoxAddNewFlowRange & CDbl(TextBoxWaveNumber) & CDbl(TextBoxAddNewFlowNbCR)), (varTableauFullDatas([@COUNTRY]) & varTableauFullDatas([@RANGE]) & varTableauFullDatas([@WAVE]) & varTableauFullDatas([@NB CR])), 0) * 1), 4)) Then
    Mais quand je lance la macro, j'obtiens un message d'avertissement "Erreur de compilation : nombre d'arguments incorrect ou affectation de propriété incorrecte", en ciblant l'utilisation de "varTableauFullDatas([@COUNTRY])"

    Ma demande d'aide : dans quelle direction dois-je chercher pour trouver mon erreur ?

    Merci d'avance !!!

  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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il faudrait que tu places le code que tu publies entre les balises prévues à cet effet dans l'éditeur des messages. C'est le bouton avec croisillon #
    J'ai des doutes quant au fait que la ligne de code ci-dessous fonctionne car tu mélanges une formule excel avec du code VBA. Soit tu passes par la fonction EVALUATE soit tu écris cette formule d'excel directement dans le classeur soit encore tu traduis cette ligne de code en instructions VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If IsNA(Index(varTableauFullDatas, SumProduct(Match((ComboBoxAddNewFlowCountryName & ComboBoxAddNewFlowRange & CDbl(TextBoxWaveNumber) & CDbl(TextBoxAddNewFlowNbCR)), (varTableauFullDatas([@COUNTRY]) & varTableauFullDatas([@RANGE]) & varTableauFullDatas([@WAVE]) & varTableauFullDatas([@NB CR])), 0) * 1), 4))
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Il faudrait que tu places le code que tu publies entre les balises prévues à cet effet dans l'éditeur des messages. C'est le bouton avec croisillon #
    Voilà c'est fait, sorry :p

    Je teste ce que tu me proposes, et je reviens vers toi.

    Merci pour ton aide

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Peut-être que je m'y prend mal ...
    Je récupère 4 infos d'un Userform (2 combobox et 2 textbox) et je veux les ajouter sur la même ligne au tableau (TableauFullDatas) si ces 4 infos n'y sont pas déjà (une info par colonne de la même ligne).

  5. #5
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Peut-être que je m'y prend mal ...
    Je récupère 4 infos d'un Userform (2 combobox et 2 textbox) et je veux les ajouter sur la même ligne au tableau (TableauFullDatas) si ces 4 infos n'y sont pas déjà (une info par colonne de la même ligne).
    J'avoue ne pas comprendre le lien entre ta demande initiale où tu parles de modifier une formule d'excel pour l'intégrer en VBA et ton dernier post.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    Bonjour,

    J'avoue ne pas comprendre le lien entre ta demande initiale où tu parles de modifier une formule d'excel pour l'intégrer en VBA et ton dernier post.
    Je rebondissais sur ta phrase " tu mélanges une formule excel avec du code VBA". Donc je remettais en question ma demande initiale.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Je tente donc de traduire en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim t_TableauFullDatas As ListObject
    Set t_TableauFullDatas = ThisWorkbook.Worksheets("Full Datas").ListObjects("TableauFullDatas")
    If Application.IsNA(Application.Index(t_TableauFullDatas, Application.SumProduct(Application.Match(ComboBoxAddNewFlowCountryName & ComboBoxAddNewFlowRange & CDbl(TextBoxWaveNumber) & CDbl(TextBoxAddNewFlowNbCR), t_TableauFullDatas.ListColumns("COUNTRY").Range.Column & t_TableauFullDatas.ListColumns("Range").Range.Column & t_TableauFullDatas.ListColumns("WAVE").Range.Column & t_TableauFullDatas.ListColumns("NB CR").Range.Column, 0) * 1), 4)) Then
      msgbox ("Pas trouvé")
      else: msgbox ("Champagne !")
    end if
    Je précise que :
    - t_TableauFullDatas est le nom d'un tableau structuré
    - ComboBoxAddNewFlowCountryName. ComboBoxAddNewFlowRange sont du texte provenant de ComboBox issus d'un UserForm
    - TextBoxWaveNumber et TextBoxAddNewFlowNbCR sont des nombres de TextBox issus du même UserForm que les ComboBox.

    Lorsque j'exécute cette macro, le userForm s'ouvre et je peux saisir mes 4 valeurs. Au clic sur le bouton "Valider" j'obtiens une "erreur d'exécution '13' Incompatibilité de type".

  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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Voici un exemple avec EVALUATE qui me semble plus simple.
    Dans cet exemple, le nom
    • de la feuille : Feuil1
    • du tableau structuré : T_Test
    • les étiquettes de colonnes : Ref1 à Ref4


    La formule dans une cellule d'Excel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(INDEX(A2:D4;SOMMEPROD(EQUIV(G1 & H1 & I1 & J1;T_Test[Ref1] & T_Test[Ref2] & T_Test[Ref3] & T_Test[Ref4];0) * 1);4));"Pas de résultat";"Résultat")
    Le code VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub T()
     ' Déclaration Variables et constantes
     Const SheetName As String = "Feuil1"
     Const TableName As String = "T_Test"
     Const Formula As String = "=IF(ISNA(INDEX(A2:D4,SUMPRODUCT(MATCH(G1 & H1 & I1 & J1,T_Test[Ref1] & T_Test[Ref2] & T_Test[Ref3] & T_Test[Ref4],0) * 1),4)),""Pas de résultat"",""Résultat"")"
     Dim t_TableauFullDatas As ListObject
     ' Affectation des variables
     Set t_TableauFullDatas = ThisWorkbook.Worksheets(SheetName).ListObjects(TableName)
     MsgBox Evaluate(Formula)
     Set t_TableauFullDatas = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Merci à nouveau pour ta réponse, Philippe.

    Ça fonctionne très bien si je copie les valeurs saisies depuis mon Userform dans des cellules de ma feuille.

    Mais ça ne fonctionne pas quand je tente de traiter directement les infos saisies dans le Userform.
    Je vais rester comme ça, en attendant la quatrième partie du tuto de Pierre Fauconnier sur les Tableaux structurés. Il annonce en effet "Le quatrième tutoriel fera la jonction entre formulaire lié aux données et tableaux structurés."

  10. #10
    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 767
    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 767
    Points : 28 626
    Points
    28 626
    Billets dans le blog
    53
    Par défaut
    Bonjour Benoît,
    Ça fonctionne très bien si je copie les valeurs saisies depuis mon Userform dans des cellules de ma feuille.
    Mais ça ne fonctionne pas quand je tente de traiter directement les infos saisies dans le Userform.
    Je ne saisi pas bien la différence.
    A mon avis le problème ne vient pas de la manière de gérer la lecture/écriture sur le tableau structuré mais sans doute de la manière de transmettre ce qui est géré dans les différents contrôles du UserForm
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 25
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Philippe Tulliez Voir le message
    A mon avis le problème ne vient pas de la manière de gérer la lecture/écriture sur le tableau structuré mais sans doute de la manière de transmettre ce qui est géré dans les différents contrôles du UserForm
    J'en suis arrivé à la même conclusion.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/08/2016, 14h16
  2. [XL-2003] Export données Excel vers un tableau Word
    Par Marc31 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/06/2012, 09h12
  3. Traduction de formule d'Excel vers VBA
    Par emi3113 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/05/2008, 20h15
  4. Copier des données d'un fichier Excel vers des tableau Word
    Par drthodt dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 23/05/2008, 14h57
  5. formule excel vers VBA
    Par kedas dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/10/2007, 18h18

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