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 :

Chercher et Affecter une valeur à une variable selon les valeurs de deux variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Par défaut Chercher et Affecter une valeur à une variable selon les valeurs de deux variables
    Bonjour ,
    après :

    1) Déclaration des variables

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Pvnai     As Single
    Dim semaiG    As String
    Dim UFLG   As Single
    2) Les valeurs des variables correspondent respectivement aux valeurs insérer dans un formulaire puis affecté à des cellules dans une feuille Excel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    semaiG = Range("E11").Value
    Pvnai = Range("M6").Value
    3) Question?

    Est-ce que vous pouvez me proposer un code qui me permet d’affecter une valeur à UFLG selon la valeur que prends la variable semaiG et Pvnai
    Par exemple pour semaiG = SemG28 et poids=30 alors UFLG=0,8
    semaiG = SemG31 et poids=40 alors UFLG=1 ( voir ficher excel)
    J’espère que j’été claire et je vous remercie d’avanceTableau.xlsxTableau.xlsxTableau.xlsx

  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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour répondre à ta question, il serait intéressant de savoir comment sont organisées tes données et pour anticiper ta réponse, je n'ouvre pas les classeurs mis en téléchargement (3 versions en plus)
    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 actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Par défaut Chercher et Affecter une valeur exacte à une variable selon les valeurs de deux autres
    Bonjour

    Je vais m’expliquer cette fois ci clairement, j’ai une variable Nom_colon représentant les noms des colonnes d’un tableau ( Nom_colon1 à Nom_colon14) et une autre variable Nom_ligne représentant les noms des lignes ( Nom_ligne1 à Nom_ligne6)
    La troisième variable Z représente le contenu de la table ( intersection de Nom_ligne et de Nom_colon) exemples : pour Nom_colon1 et Nom_ligne1 Z=2 pour Nom_colon1 et Nom_ligne3 Z=2.5 ainsi de suite ,c’est comme si on a une matrice.

    Est-ce que vous pouvez me proposer un code qui me permet de chercher la valeur exacte de Z selon ,le nom que prends Nom_colon (Nom_colon1 à Nom_colon14) et Nom_ligne ( Nom_ligne1 à Nom_ligne6).

    Je vous remercie

  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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    j’ai une variable Nom_colon représentant les noms des colonnes d’un tableau ( Nom_colon1 à Nom_colon14) et une autre variable Nom_ligne représentant les noms des lignes ( Nom_ligne1 à Nom_ligne6)
    N'est-ce pas plutôt des variables de type Range ?
    Une solution parmi d'autres seraient d'utiliser la fonction INDEX combinée à deux formules EQUIV (Match en anglais et en VBA)
    Imaginons donc les étiquettes de colonnes en B1,Trim1, C1, Trim2, D1, Trim3 et E1, Trim4 et en ligne : A2 Pommes, A3 Poires et A4 Abricots et enfin les données se trouvant en B2:E4
    Ainsi avec Excel, la formule sera par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX(B2:E4;EQUIV("Pommes";A2:A4;0);EQUIV("Trim2";B1:E1;0))
    En vba en utilisant l'objet WorksheetFunction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     Dim rngData As Range, rngLabelRow As Range, rngLabelColumn As Range, fn As WorksheetFunction
     Set fn = Application.WorksheetFunction
     With ThisWorkbook.Worksheets("Feuil1")
      Set rngData = .Range("B2:E4")
      Set rngLabelRow = .Range("A2:A4")
      Set rngLabelColumn = .Range("B1:E1")
     End With
     With fn
      MsgBox "Valeur trouvée " & .Index(rngData, .Match("Pommes", rngLabelRow, 0), .Match("TRim2", rngLabelColumn, 0))
     End With
    Il faut bien entendu remplacer les constantes Pommes et Trim2 par des variables
    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 actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Par défaut
    Je vous remercie infiniment
    Je pense que vous avez compris mon idée sauf que pommes, poires …etc. est une variable string appeler fruits cette variable fruits corresponds à la valeur introduite par un formulaire (type ComboBox) de même trim1 , Trim2… etc. est une variable appeler trimestre cette variable est introduite de la même façon par ailleurs est ce que je peux dire à VBa qu’à chaque fois que les variables fruits et trimestre prennent une valeur, le programme me cherche la valeur correspondante dans le tableau exemple fruit=pomme , trimestre =trim1 Z (intersection pomme et trim1) et affecter cette valeur à la variable Z.
    Je vous remercie encore une fois !!

  6. #6
    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 173
    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 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je pense que vous avez compris mon idée sauf que pommes, poires …etc. est une variable string appeler fruits cette variable fruits corresponds à la valeur introduite par un formulaire (type ComboBox) de même trim1 , Trim2… etc. est une variable appeler trimestre cette variable est introduite de la même façon par ailleurs est ce que je peux dire à VBa qu’à chaque fois que les variables fruits et trimestre prennent une valeur, le programme me cherche la valeur correspondante dans le tableau exemple fruit=pomme ,
    C'est ce que j'ai écrit à la fin de ma réponse
    Il faut bien entendu remplacer les constantes Pommes et Trim2 par des variables
    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

  7. #7
    Membre actif
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    52
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 52
    Par défaut
    bonjour je sais pas comment vous remercier pour votre aide précieux ,j'ai repris le même code en affectant mes variables déjà définit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim rngData As Range, rngLabelRow As Range, rngLabelColumn As Range, fn As WorksheetFunction
     Set fn = Application.WorksheetFunction
     With ThisWorkbook.Worksheets(Feuil1)
      Set rngData = .Range("X1:AK6")
      Set rngLabelRow = .Range("B2:B5")
      Set rngLabelColumn = .Range("Y1:AK1")
     End With
     With fn
      MsgBox "Valeur trouvée " & .Index(rngData, .Match(Pvnai, rngLabelRow, 0), .Match(semaiG, rngLabelColumn, 0))
     End With
    Par ailleurs j'ai une erreur

    Erreu d'excécution '-2147418113(8000ffff)'
    erreur Automation
    Défaillance irrémédiable
    Autre chose je veux pas afficher un Msgbox mais affecter la valeur trouvé à une variable

    Mes grands remerciements !!

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

Discussions similaires

  1. [AC-2007] Comptage dans une zone de liste selon les valeurs d'une colonne
    Par lakhdar16 dans le forum VBA Access
    Réponses: 4
    Dernier message: 18/07/2012, 11h11
  2. Réponses: 3
    Dernier message: 30/11/2009, 10h36
  3. Créations de table selon les valeurs d'une variable
    Par rocsylcanar dans le forum SAS Base
    Réponses: 9
    Dernier message: 27/05/2009, 12h22
  4. Affecter résultat d'une fonction à une variable ?
    Par ctobini dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 07/09/2006, 14h45
  5. Réponses: 4
    Dernier message: 24/07/2006, 17h34

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