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 :

tableau à double entrée ligne - colonne avec recherche par tranche


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut tableau à double entrée ligne - colonne avec recherche par tranche
    bonjour le phorum
    j'ai actuellement une macro que je développe sous la forme d'un formulaire
    j'ai bien avancé mais je bloque sur une fonction ou une instruction pour afficher dans un textbox un tarif qui est calculé par tranche comme suit

    Num Tarifs / Poids 20 g 35 g 50 g 100 g
    1 1.05 1.7 1.7 2.53
    2 0.85 1.4 1.4 2.06
    3 0.82 1.27 1.27 1.66

    comme il s'agit d'un tableau à la base que je souhaite intégrer à mon formulaire, j'ai utilisé la formule de l'onglet correspondant
    =SIERREUR(INDEX(VALEURS;EQUIV(C2;TYPE_AFFRANCHISSEMENTS;0);SIERREUR(EQUIV(B2;TRANCHE_POIDS);0)+ESTNA(EQUIV(B2;TRANCHE_POIDS;0)));"NON CONFORME")
    et que j'ai ensuite retranscris en VBA
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Txt_Tarif = Application.IfError(Application.Index( _
    Sheets("BDD TARIFS").Range("VALEURS"), Application.Match(Valeur, _
    Sheets("BDD TARIFS").Range("TYPE_AFFRANCHISSEMENTS"), 0), Application.IfError(Application.Match(Val(Me.Txt_Poids), _
    Sheets("BDD TARIFS").Range("TRANCHE_POIDS")), 0) + Application.IsNA(Application.Match(Val(Me.Txt_Poids), _
    Sheets("BDD TARIFS").Range("TRANCHE_POIDS"), 0))), "NON CONFORME")
    jusqu'ici tout allait bien mais j'ai cependant remarqué que dès je passe au dessus de 50 grammes le tarif ne change pas en conséquence....

    il reste bloque au tarif inférieur à 50 grammes....

    quelqu'un aurait il une idée du pourquoi du comment ?
    ou une autre soluce car j'avoue malgré mes recherches ne pas trouver
    j'ai bien vu des solutions pour des valeurs fixes mais par pour valeurs comprises dans des tranches
    1-20gr
    21-35gr
    36-50gr
    51-100gr
    etc....


    merci beaucoup pour vos pistes

    david

  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
    13 178
    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 : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    La fonction MATCH (EQUIV pour la version française d'excel) permet de faire des recherches par tranche comme RECHERCHEV.
    Toutefois pour cela les données doivent être classées par ordre croissant.
    Avant de le faire à l'aide de VBA, je ne peux que vous conseiller de le faire avec Excel pour vos tests
    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 éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    bonjour philippe
    et merci pour votre retour
    La fonction MATCH (EQUIV pour la version française d'excel) permet de faire des recherches par tranche comme RECHERCHEV.
    Toutefois pour cela les données doivent être classées par ordre croissant.
    les données sont bien classées par ordre croissant sur la ligne du tableau correspondante au poids

    Avant de le faire à l'aide de VBA, je ne peux que vous conseiller de le faire avec Excel pour vos tests
    les tests via Excel sont OK puisqu'à la base je suis parti de la formule pour construire l'instruction en VBA
    la formule Excel marche parfaitement

    c'est bien pour cela que je ne comprends (j'ai vérifié les parenthèses et conditions dans la formule mais rien n'y fait)
    c'est bizarre car ce n'est pas la première fois que j'utilise ce sytème...

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 178
    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 : 13 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si c'est le code publié, votre recherche avec EQUIV (MATCH) n'est pas correcte pour une valeur proche

    Suivant l'illustration ci-dessous, la formule est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(B2:E4;EQUIV(B6;A2:A4;0);EQUIV(B7;B1:E1;1))
    Les couleurs vous permettrons de voir les zones cherchées. Ensuite, il suffit de le traduire en VBA avec un simple EVALUATE en remplaçant les zones d'Input par la valeur des TextBox

    Nom : 201020 dvp INDEX_EQUIV.png
Affichages : 825
Taille : 13,8 Ko
    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

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    776
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 776
    Par défaut
    merci pour la piste

    Je vais creuser
    par contre la valeur que vous indiquez n'est pas correcte
    en effet le tarif 2 à 25 gr devrait être de 1.40 euros et non 0.85

    c'est un peu le souci que je rencontre avec la formule dans VBA
    ce que je ne comprends pas c'est que ma formule dans excel fonctionne très bien
    c'est juste quand je la transpose dans VBA qu'elle rencontre un problème

    =SIERREUR(INDEX(VALEURS;EQUIV(C2;TYPE_AFFRANCHISSEMENTS;0);SIERREUR(EQUIV(B2;TRANCHE_POIDS);0)+ESTNA(EQUIV(B2;TRANCHE_POIDS;0)));"NON CONFORME")
    VALEURS = valeurs des tarifs par poids

    et en ce qui concerne
    Si c'est le code publié, votre recherche avec EQUIV (MATCH) n'est pas correcte pour une valeur proche
    quel est le problème que rencontre ce syntaxe dans VBA (alors que dans Excel tout va bien)

    après si une autre solution par bound ou autre est possible je suis preneur
    je sais me débrouiller en VBA mais les tableaux ne sont pas mon fort malheureusement

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur Méthodes Industrialisation
    Inscrit en
    Octobre 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Méthodes Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2020
    Messages : 39
    Par défaut
    Bonjour,

    Pour faire des listes en cascades je me réfère à un fichier excel de boisgontierjacques que je vous transmets en pièce jointe.
    (je retrouve plus le poste de référence ou la fonction CascadePrixQte surson site http://boisgontierjacques.free.fr/pa...es_cascade.htm)

    Je pense que la façon dont il gère le CacasdePrixQte peux vous intéresser.
    (il va plus loin que vous dans ça démarche de gestion des prix mais peu être adapté à votre cas)

    jb-listescascade.xls

    EDIT : Je viens de retrouver le lien de téléchargement (pour plus de transparence) :
    http://boisgontierj.free.fr/fichiers...tescascade.xls

    Zeabon

Discussions similaires

  1. formulaire avec tableau à double entrée
    Par dmalik dans le forum Services
    Réponses: 1
    Dernier message: 02/07/2013, 21h49
  2. [AC-2003] Tableau Double entrées avec case à cocher
    Par meud007 dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/05/2012, 21h40
  3. Sélection ligne complète avec recherche dans tableau
    Par Dralex dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/12/2010, 08h32
  4. PB controle formulaire avec tableau à double entrées
    Par Poutchou dans le forum Général JavaScript
    Réponses: 36
    Dernier message: 23/03/2006, 14h37
  5. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07

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