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 :

Conversion de valeur suivant tableau de conversion [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut Conversion de valeur suivant tableau de conversion
    Bonjour à tout le monde,

    Bon aujourd’hui je me remets un peu à Excel après plus de 4 ans de non utilisation (ou peu d'utilisations).

    Pour aller directement au sujet, j'aimerais savoir comment en VBA je peux parcourir un tableau qui contient des valeurs de conversions afin de convertir des données à la demande.

    Voici un petit fichier excel pour mieux comprendre:

    Conversion.xlsx

    Merci d'avance pour votre aide.
    Cordialement,
    Paloma



    Pensez au

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Est-ce que tu pourrais nous expliquer ton problème sans PJ, stp ? Cf. : https://www.developpez.net/forums/d8...s-discussions/
    En général, en programmation, quand on veut parcourir quelque chose, on utilise une boucle.

  3. #3
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut

    Bonjour,

    en général dans un tel cas on évite les boucles au profit de l'existant d'Excel et ce même en VBA …

    ___________________________________________________________________________________________________________
    Je suis Paris, London, Manchester, Egypte, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  4. #4
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut Explications
    Bonjour riaolle and Marc-L,

    Merci pour vos commentaires et remarques.
    Je n'avais pas vu cette charte encore donc merci riaolle. Cela à du sens et du bon

    Bon revenons à mes petits moutons ^^

    En fait j'ai dans un onglet un tableau de conversion des min en heure en jour et en mois afin de convertir des unités de temps dans un sens et dans l'autre (exp. min en jour ou encore jour en heur...). ce tableau de conversion me permet de jouer sur deux valeurs précisent qui sont:

    1. le nombre d'heure (de travail) par jour
    2. le nombre de jour de travail par mois (moyenne pour une année considérée)


    Ensuite, j'aimerai pouvoir dans ce même onglet excel pouvoir créer un tableau exemple comme dans le fichier joint plus haut de la colonne A à la colonne E avec les noms de colonnes suivants:
    • ID (numéro de ligne de référence)
    • Topic (sujet concerné)
    • Valeur (est un nombre de 0 à l'infini avec ou sans virgule qui exprime une quantité)
    • Unité (une liste déroulante dans cette colonne permet d'indiquer si le nombre dans la colonne Valeur est exprimé en min, heure, jour, mois, année)
    • Conversion à partir de la ligne (qui si cette la valeur dans cette colonne est vide pour une ligne ID donnée ne produira rien sinon le numéro qui y est indiqué représenterait le numéro dans la colonne ID et la conversion se ferait).


    De plus il me faudrait ajouter par exemple 3 colonnes à droite de la colonne E (Conversion à partir de la ligne):
    • la première qui retournerait la valeur convertie
    • la deuxième qui indiquerait vers quelle unité de mesure cette valeur doit être converti
    • la troisième colonne - "mémoire" - qui permettrait de remettre les valeurs choisies dans la colonne F si la cellule A1 est remise à vide.


    J'ai aussi imaginé qu'il pourrait y avoir dans la cellule A1 une liste déroulante des unités qui forcerait toutes les valeurs de la deuxième colonne mentionnée ci-dessus en la valeur qui serait alors indiqué dans cette cellule (et tout ça dynamiquement).

    Bien sûr des explications si vous pouvez m'aider seraient les bienvenues

    En pièce jointe je vous mets le fichier excel en version 2.
    Conversion.2.xlsx

    Merci pour toute votre aide et patience !
    Cordialement,
    Paloma
    Cordialement,
    Paloma



    Pensez au

  5. #5
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Re-bonjour,
    Est-ce que tu pourrais nous expliquer ton problème sans PJ, stp ? Cf. : https://www.developpez.net/forums/d8...s-discussions/
    ...
    Je n'avais pas vu cette charte encore donc merci riaolle. Cela a du sens et du bon.
    ...
    comme dans le fichier joint ... En pièce jointe je vous mets le fichier excel en version 2.


    Est-ce que ce serait qqc comme cela ?
    Nom : conversion.png
Affichages : 1307
Taille : 9,7 Ko
    Avec un mélange INDEX/EQUIV ?

  6. #6
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Bonjour riaolle,

    Oui je sais j'ai encore mis le fichier attaché car mon sujet est plutôt long et je ne suis pas sûr que juste avec mon texte cela soir suffisant.
    Sinon votre solution est une bonne piste de départ mais ne répondra pas à ma question de base qui est de convertir des données à la demande de façon "dynamique".

    Je pense que seule le vba devrait pouvoir résoudre cela.
    Donc un equivalent de INDEX/EQUIV en vba devrait déjà aider je vais essayer de creuser cela.

    Sinon j'ai essayé sur mon fichier mais ma formule ne fonctionne pas, il faut que j'essaye de comprendre où cela cloche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =B4*INDEX(K3:P8,MATCH(D4,timevalue,0),MATCH(G4,L3:P3)-8)
    Cordialement,
    Paloma



    Pensez au

  7. #7
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Que veut dire de "façon dynamique" ?
    Attention à bien mettre les "$" au bon endroit dans la formule, car en la tirant, tu changera les plages de cellules sinon.

  8. #8
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    En fait j'ai corrigé mon "sujet" (désolé pour les nœuds au cerveau):

    Ensuite, j'aimerai pouvoir dans ce même onglet excel pouvoir créer un tableau exemple comme dans le fichier joint plus haut de la colonne A à la colonne E avec les noms de colonnes suivants:
    ID (numéro de ligne de référence)
    Topic (sujet concerné)
    Valeur (est un nombre de 0 à l'infini avec ou sans virgule qui exprime une quantité)
    Unité (une liste déroulante dans cette colonne permet d'indiquer si le nombre dans la colonne Valeur est exprimé en min, heure, jour, mois, année)
    Conversion à partir de la ligne (qui si cette la valeur dans cette colonne est vide pour une ligne ID donnée ne produira rien sinon le numéro qui y est indiqué représenterait le numéro dans la colonne ID et la conversion se ferait).

    De plus il me faudrait ajouter par exemple 3 colonnes à droite de la colonne E (Conversion à partir de la ligne):
    la première qui retournerait la valeur convertie
    la deuxième qui indiquerait vers quelle unité de mesure cette valeur doit être converti
    la troisième colonne - "mémoire" - qui permettrait de remettre les valeurs choisies dans la colonne F si la cellule A1 est remise à vide.
    Donc "dynamique" car si je ne mets rien dans la colonne G ou en A1 alors le nombre/les nombres n'est/ne sont pas converti(s) sinon suivant l'unité sélectionnée en A1 ou dans la colonne G fait que la ou les valeurs seront converties.

    heu je ne sais pas si j'ai été clair
    Cordialement,
    Paloma



    Pensez au

  9. #9
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    1. Pour la formule, j'ai mis "-8" à la fin, car mon tableau commence en colonne I. Mais toi tu fais le match seulement sur le tableau (d'ailleurs, tu devrais le faire sur K3: P3 et pas seulement L3: P3), donc tu n'as pas besoin de mettre le -8. Est-ce que tu comprends la formule ?
    2.
    si je ne mets rien dans la colonne G ou en A1 alors le nombre/les nombres n'est/ne sont pas converti(s) sinon suivant l'unité sélectionnée en A1 ou dans la colonne G fait que la ou les valeurs seront converties
    Tu veux que le calcul se fasse seulement s'il y a des données : tu peux faire une gestion d'erreur. Qqc comme SI(ESTVIDE(...);...;...)

  10. #10
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Bonjour riaolle

    Merci pour tes réponses.

    1. Pour la formule, j'ai mis "-8" à la fin, car mon tableau commence en colonne I. Mais toi tu fais le match seulement sur le tableau (d'ailleurs, tu devrais le faire sur K3: P3 et pas seulement L3: P3), donc tu n'as pas besoin de mettre le -8. Est-ce que tu comprends la formule ?
    Pas complètement désolé

    2.
    si je ne mets rien dans la colonne G ou en A1 alors le nombre/les nombres n'est/ne sont pas converti(s) sinon suivant l'unité sélectionnée en A1 ou dans la colonne G fait que la ou les valeurs seront converties
    Tu veux que le calcul se fasse seulement s'il y a des données : tu peux faire une gestion d'erreur. Qqc comme SI(ESTVIDE(...);...;...)
    Heu oui c'est ça. Si il y a min, ou day, ou h... alors je converti la ligne en question et sinon si la cellule A1 contient une valeur comme "min" par exemple alors toutes les cellules de droite prennent la valeur "min" et la conversion se fait sur cette unité de valeur et encore sinon rien


    J'avoue que ce n'est pas facile à exprimer surtout quand on n'a pas l'habitude de demander et de faire beaucoup de formule et vba

    Cordialement,
    Paloma



    Pensez au

  11. #11
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Pour expliquer la formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =B4*INDEX(K3:P8,MATCH(D4,timevalue,0),MATCH(G4,K3:P3))
    EQUIV ou MATCH en anglais permet de trouver la position relative d'une valeur dans une colonne ou ligne. Par exemple, si la valeur de G4 se trouve en L3, alors EQUIV(G4;K3: P3) va renvoyer 2.
    INDEX permet à partir d'un indice de ligne et d'un indice de colonne de renvoyer la valeur de la cellule avec la bonne ligne et la bonne colonne (relatives!) dans la matrice donnée. Par ex. INDEX(K3: P8;2;3) renvoie la valeur de M4.
    A partir de là, il suffit de voir quelle est ta matrice.

    Pour la gestion d'erreur, j'ai pas trop compris ce que tu veux. Mais il suffit que tu définisses clairement les cas où tu ne veux pas faire la conversion et ce que tu veux écrire le cas où tu ne veux pas faire la conversion. Ensuite avec un/des SI tu repères ces cas.

  12. #12
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Bonjour riaolle,

    Merci pour tes explications mais je dois rater encore quelque chose car les résultats obtenus ne sont pas tous bons.

    Il va me falloir revoir ma façon de faire les choses...

    C'est galère pour l'instant

    Je pense qu'il faut taper plus fort pour que cela rentre LOL
    Cordialement,
    Paloma



    Pensez au

  13. #13
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Est-ce que tu peux joindre une copie d'écran de ce que tu as fait pour l'instant, stp? Dans ta copie d'écran il faudrait qu'on voit le tableau de conversion, le tableau avec tous les résultats à convertir, la façon dont tu appliques ta formule et le résultat de ta formule. Il faut bien-entendu qu'on puisse voir les n° de lignes et colonnes.

  14. #14
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Je pense qu'il me faut mettre des conditions pour que le tableau soit utilisé correctement ... ou un truc du genre.

    Nom : capture.jpg
Affichages : 880
Taille : 137,5 Ko

    Enfin je dois réfléchir un peu à ça
    Cordialement,
    Paloma



    Pensez au

  15. #15
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Quelle est la plage timevalue ?
    Attention, INDEX donne la position relative. Si tu prend la matrice J3:O8, alors il faut donner la position dans CETTE matrice, donc en-têtes compris !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =C4*INDEX($J$3:$O$8;EQUIV(D4;$J$3:$J$8);EQUIV(F4;$J$3:$O$3))

  16. #16
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Mince désolé la formule sur la copie d'écran n'est pas bonne. Voilà ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =C4*INDEX($J$3:$O$8,MATCH(D4,$J$3:$J$8),MATCH(F4,$K$3:$O$3))
    Bon je regarde avec votre formule.
    Cordialement,
    Paloma



    Pensez au

  17. #17
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Ha ben nous avons presque pareil LOL


    Voilà le résultat après correction:

    Nom : capture.jpg
Affichages : 932
Taille : 116,9 Ko
    Cordialement,
    Paloma



    Pensez au

  18. #18
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Euh...là, j'avoue que je suis un peu perdue. J'arrive pas trop à voir de logique dans les faux résultats
    Surtout que chez moi ça marche très bien ...
    Nom : conversion.png
Affichages : 817
Taille : 7,7 Ko

    Oooh... en regardant ce que je fais, j'ai peut-être une idée --> ajoute le 3ème argument dans EQUIV : ajoute le 0 qui dit que tu veux une correspondance exacte.

  19. #19
    Membre régulier Avatar de Paloma
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    228
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 228
    Points : 79
    Points
    79
    Par défaut
    Bonjour riaolle,

    C'est parfait merci en effet avec la "valeur exact" c'est bon.
    J'ai rajouté une condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =IF(F11="","",C11*INDEX($J$3:$O$8,MATCH(D11,$J$3:$J$8,0),MATCH(F11,$J$3:$O$3,0)))
    Il ne me reste plus qu'à trouver comment faire pour forcer la colonne D qui est une liste déroulante si A1 prend une valeur et faire en sorte que si A1 repasse à vide alors les valeurs dans la colonne D sont remisent.

    Beaucoup plus difficile
    Cordialement,
    Paloma



    Pensez au

  20. #20
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Excel n'a pas de "mémoire".
    Il faut que tu passes par une colonne intermediaire : une colonne où tu notes la valeur que doit prendre la colonne D si la cellule A1 est vide --> ta colonne G !
    Ensuite en colonne D, tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTVIDE($A$1); G4;$A$1)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Extraction valeur suivant plusieurs valeurs dans un tableau
    Par fabibou dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2007, 19h02
  2. [Tableaux] recuperation valeurs dun tableau ou d'un array
    Par pascale86 dans le forum Langage
    Réponses: 5
    Dernier message: 11/10/2005, 16h14
  3. [vbscript] valeur dans tableau ?
    Par niglo dans le forum ASP
    Réponses: 3
    Dernier message: 08/06/2005, 13h26
  4. [Collections] Conversion de Vector en tableau de String
    Par java_math dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 06/06/2004, 12h55
  5. [CR9] conversion de valeurs NULL
    Par ministry dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 12/09/2003, 11h41

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