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 :

Recherche dans un tableau en fonction de saisie [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 81
    Par défaut Recherche dans un tableau en fonction de saisie
    Bonjour à tous,
    Je découvre VBA et dommage il se trouve que j'ai déjà un gros problème que je dois résoudre. J'aurai besoin de vos conseils d'experts.
    Voici mon problème :
    J'ai 5 feuilles dans mon classeur excel (en réalité beaucoup plus mais pour simplifier). J'ai fait une capture de chaque feuille pour plus de clarté.

    La 1ère feuille sert de saisie à l'utilisateur, il saisit :
    - Une largeur
    - Une hauteur
    - choisit une section parmi 3 type
    - choisit un mécanisme parmi 4 ( mais pour le moment je ne prends pas en compte ce mécanisme dans mes calculs)
    - choisit une dimension parmi 2

    En fonction de ce qu'aura saisit l'utilisateur, il fait calculer et ce bouton fait appelle à ma MACRO que je dois coder en VBA.

    Je donne un exemple de ce que doit faire la macro :

    L'utilisateur choisit la section : 027S
    Saisit : 800 pour la hauteur et 400 de largeur
    choisit comme dimension : découpe
    Lorsqu'il fait calculer, on doit lui sortir le prix correspondant (ici c'est 85) qui se trouve dans le tableau de la feuille correspondant à la section choisit (ici feuille3) et l'afficher dans la cellule E24 de la 1ère feuille. Même déroulement pour les 2 autres sections.
    Et à partir de ce prix, on doit compléter la feuille2.

    Le gros problème que j'ai c'est que je ne vois pas comment faire en VBA pour changer de feuille et sortir le bon prix en fonction des données de l'utilisateur ?

    J'aurai besoin d'une aide svp .
    Pour le moment je cherche en apprenant le langage mais ça reste quand même un peu flou.
    J'espère avoir été explicite dans la description de mon problème.

    Merci
    Images attachées Images attachées      

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    Voici un début de réponse, pour te mettre sur la voie :

    à insérer derrière le bouton "Calculer"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TypeSection = Range("B13").Value
    Colonne = Worksheets(TypeSection).Range("B8:S8").Find(What:=Range("B19")).Column
    Ligne = Worksheets(TypeSection).Range("A9:A22").Find(What:=Range("B21")).Row
    Range("E24") = Worksheets(TypeSection).Cells(Ligne, Colonne).Value
    Pour que cela fonctionne il faudra que tu renommes les feuilles, où sont les tableaux de correspondance, par leur nom de type de section.

    Et, dans les tableaux, le "w" et le "h" (B8, H9 dans ton exemple)

    Normalement, en entrant le type de section, la hauteur et la largeur, puis en cliquant sur calculer, ça devrait te retourner le bon prix.

    Bonne continuation.

  3. #3
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 81
    Par défaut Merci pour ce début de réponse :)
    Du coup tu m'as débloqué encore merci.
    Mais plus j'avance dans mon problème plus j'ai d'autres contraintes ^^ :
    Il y aurait-il une façon de faire un SWITCH...CASE en VBA comme dans les autres langages comme ça je pourrai gérer les 3 feuilles en fonction de la section choisie ?
    Et dans le cas où l'utilisateur entre des valeurs qui ne sont pas des multiples de 100, je voudrai tronquer ces valeurs au nombre supérieur ou inférieur multiple de 100.

    Encore merci

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par akuma8 Voir le message
    ... SWITCH...CASE en VBA ..
    voir Select Case ...

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2013
    Messages : 18
    Par défaut
    Voilà qui pourrait répondre à tes questions ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    'Arrondi à la centaine supérieure
    Range("B19") = IIf(Range("B19") / 100 > 0, (Range("B19") \ 100) * 100, Range("B19"))
    Range("B21") = IIf(Range("B21") / 100 > 0, (Range("B21") \ 100) * 100, Range("B21"))
    '
    'Recherche prix
    TypeSection = Range("B13").Value
    Select Case TypeSection
        Case "027S"
            Colonne = Worksheets(TypeSection).Range("B8:S8").Find(What:=Range("B19")).Column
            Ligne = Worksheets(TypeSection).Range("A9:A22").Find(What:=Range("B21")).Row
        Case "058S"
            Colonne = Worksheets(TypeSection).Range("B8:V8").Find(What:=Range("B19")).Column
            Ligne = Worksheets(TypeSection).Range("A9:A29").Find(What:=Range("B21")).Row
        Case "069S"
            Colonne = Worksheets(TypeSection).Range("B6:AF6").Find(What:=Range("B19")).Column
            Ligne = Worksheets(TypeSection).Range("A7:A38").Find(What:=Range("B21")).Row
    End Select
    Range("E24") = Worksheets(TypeSection).Cells(Ligne, Colonne).Value

  6. #6
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 81
    Par défaut Eureka !
    J'avais trouvé pour le switch...case mais j'ai eu un problème de connexion hier soir... Pas évident de vivre en cité universitaire !
    Merci à toi Kitty01560 pour toutes tes indications.
    Je reviendrai dans le cas où j'aurai un autre souci VBA

  7. #7
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 81
    Par défaut Gros soucis :(
    Bonjour,

    J'ai presque fini le programme mais j'ai un soucis lorsque je le teste :
    - Pour des petites valeurs de hauteur/largeur saisies, i-e entre 300 et 800 pour la section: 027S. Entre 500 et 800 pour la section 058S et entre 500 et 1000 pour la section 069S, j'ai des valeurs de prix qui sont totalement aberrantes.
    J'ai cherché pour voir à quoi s'est dû mais je ne trouve pas .
    J'ai joint aussi le classeur excel si quelqu'un veut tester pour voir.

    Voici le code, à mettre derrière "calculer" (vu que je ne peux pas importer en format xltm )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Sub calcul()
    '
    ' calcul Macro
    '
    TypeSection = Range("B13").Value
    Select Case TypeSection
     
    Case "027S":
                Ligne = Worksheets("027S").Range("B8:S8").Find(What:=Range("B19")).Column
                Colonne = Worksheets("027S").Range("A9:A22").Find(What:=Range("B21")).Row
                If (Range("B21").Value >= 1600 Or Range("B19").Value >= 2000) Then
                    MsgBox ("FAHAMOU! ( Attention en Mahorais :-) )" & vbLf & vbLf & "Information fournisseur :" & vbLf & "Pour ces types de dimension, utilisez les films:" & vbLf & "SG2,4 ou SG10" & vbLf & "À ne pas conseiller généralement")
                End If
                Range("F24") = Worksheets("027S").Cells(Colonne, Ligne).Value
     
    Case "058S":
                Ligne = Worksheets("058S").Range("B8:V8").Find(What:=Range("B19")).Column
                Colonne = Worksheets("058S").Range("A9:A29").Find(What:=Range("B21")).Row
                Range("F24") = Worksheets("058S").Cells(Colonne, Ligne).Value
     
    Case "069S":
                Ligne = Worksheets("069S").Range("B6:AF6").Find(What:=Range("B19")).Column
                Colonne = Worksheets("069S").Range("A7:A38").Find(What:=Range("B21")).Row
                Range("F24") = Worksheets("069S").Cells(Colonne, Ligne).Value
     
    End Select
     
    End Sub
    Merci pour votre aide !
    Fichiers attachés Fichiers attachés

  8. #8
    Membre confirmé
    Homme Profil pro
    Avide d'apprentissage
    Inscrit en
    Avril 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Avide d'apprentissage
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2012
    Messages : 81
    Par défaut Eureka 2.0 :)
    C'est bon j'ai fini par trouver en passant par une autre méthode. Je manquais un peu de matières vu que je commençais l'apprentissage du langage étant donné que je ne l'aurai jamais vu dans mon cursus scolaire. Mais maintenant que je suis presque un confirmé (mini confirmé quand même) j'ai tous les outils pour résoudre mon problème :
    Certes mon code est assez long mais au moins avec celui-là je ne risque plus d'avoir des erreurs.
    Je le mets quand même, ça peut servir à d'autres personnes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
    Sub calculer()
     
    ' calculer Macro
    ' donne le prix fournisseur
     
    Section = Range("B13").Value
    Mecanisme = Range("B15").Value 'pas pris en compte pour le moment
    Dim lig, col As Variant
    Dim i As Range
    Dim j As Range
     
    Select Case Section
     
    Case "027S":
    ' Boucle qui va sortir le numéro de la colonne selon la largeur saisie
            For Each i In Worksheets("027S").Range("B8:S8")
                If i = Range("B19").Value Then
                     lig = i.Column
                End If
            Next
     
    ' Boucle qui va sortir le numéro de la ligne selon la hauteur saisie
            For Each j In Worksheets("027S").Range("A9:A22")
                 If j.Value = Range("B21").Value Then
                    col = j.Row
                 End If
            Next
            Range("F24").Value = Worksheets("027S").Cells(col, lig).Value
     
    Case "058S":
            For Each i In Worksheets("058S").Range("B8:V8")
                If i = Range("B19").Value Then
                     lig = i.Column
                End If
            Next
     
            For Each j In Worksheets("058S").Range("A9:A29")
                 If j.Value = Range("B21").Value Then
                    col = j.Row
                 End If
            Next
            Range("F24").Value = Worksheets("058S").Cells(col, lig).Value
     
    Case "069S":
            For Each i In Worksheets("069S").Range("B6:AF6")
                If i = Range("B19").Value Then
                     lig = i.Column
                End If
            Next
     
            For Each j In Worksheets("069S").Range("A7:A38")
                 If j.Value = Range("B21").Value Then
                    col = j.Row
                 End If
            Next
            Range("F24").Value = Worksheets("069S").Cells(col, lig).Value
    End Select
     
    End Sub

    Merci encore à vous pour votre aide et ce site superbement bien fait <3 !


    ____________________________________________________________

    C'est en se posant les bonnes questions qu'on trouve la bonne solution

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 16/07/2014, 09h40
  2. Réponses: 0
    Dernier message: 30/03/2010, 20h07
  3. rechercher dans un tableau en fonction de la valeur d'une cellule
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/06/2007, 10h04
  4. [VBA-E] recherche dans un tableau
    Par tibss dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 03/05/2006, 17h52
  5. URGENt: recherche dans un tableau trié par ordre alphabetiqu
    Par JulPop dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/02/2005, 17h21

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