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 :

Option rechercher quantité en fonction de diamètre [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 46
    Par défaut Option rechercher quantité en fonction de diamètre
    Bonjour le forum,

    Je possède une feuille excel qui donne des quantités en fonction de diamètre.
    les diamètres vont de 5 en 5 (0,5,10,15.....170) mais ne sont pas classé dans l'ordre.

    Lorsque j'arrive dans mon userform, je rentre un diamètre (ex : 50)
    J'appuye sur mon bouton "rechercher" et je voudrai que celui ci cherche la quantité des diamètres à + ou - 10 du diamètre rentré.
    (Si on rentre un diamètre 50, on affiche la quantité de 40+45+50+55+60)
    Une textbox affiche la quantité

    Merci pour votre attention
    Bonne journée

    Cordialement
    Fichiers attachés Fichiers attachés

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    trier les données par ordre croissant de diamètre, c'est vraiment un grand conseil que je te donne, pour une macro rapide et simple à écrire
    voici deux manières de faire réalisée sans userform, je te laisse adapter

    - Utilisation de Find :

    1) Données triées : on recherche la cellule contenant le diamètre, et on fait la somme des 5 cellules (le diamètre + 2 au dessus et 2 au dessous)

    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
    Sub Test1()
    Dim Qt As Long
    Dim Diametre As Long
    Dim Cell As Range
     
    Diametre = 50
     
    ' recherche du diamètre
    Set Cell = Columns(1).Find(what:=Diametre, lookat:=xlWhole)
     
     
    If Not Cell Is Nothing Then
        ' addition des 5 cellules
        For i = -2 To 2
            On Error Resume Next
            Qt = Qt + Cell.Offset(i, 1)
            On Error Goto 0
        Next i
    Else
        MsgBox "Diamètre introuvable"
    End If
     
    MsgBox Qt
     
    End Sub
    c'est de loin la méthode la plus rapide !

    2) les données ne sont pas triées, on doit effectuer 5 Find à la suite ...

    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
    Sub Test1()
    Dim Qt As Long
    Dim Diametre As Long
    Dim Cell As Range
     
    Diametre = 50
     
    For i = -2 To 2
        Set Cell = Columns(1).Find(what:=Diametre + (i * 5), lookat:=xlWhole)
     
        If Not Cell Is Nothing Then
            Qt = Qt + Cell.Offset(0, 1)
        End If
    Next i
     
    MsgBox Qt
     
    End Sub


    il est également possible d'utiliser une variable Tableau : on charge la plage dans le tableau et on fait les recherches dedans

    exemple sur des données triées :

    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
    Sub Test1()
    Dim Qt As Long
    Dim Diametre As Long
    Dim Tablo
     
    Diametre = 50
     
    Tablo = Range(Cells(2, 1), Cells(Rows.Count, 2).End(xlUp))
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        If Tablo(i, 1) = Diametre Then
            For j = -2 To 2
                On Error Resume Next
                Qt = Qt + Tablo(i + j, 2)
                On Error GoTo 0
            Next j
        End If
    Next i
     
    MsgBox Qt
     
    End Sub

    sur des données non triées : on est obligé à nouveau de faire 5 recherches

    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
    Sub Test1()
    Dim Qt As Long
    Dim Diametre As Long
    Dim Tablo
     
    Diametre = 50
     
    Tablo = Range(Cells(2, 1), Cells(Rows.Count, 2).End(xlUp))
    For i = LBound(Tablo, 1) To UBound(Tablo, 1)
        If Tablo(i, 1) >= Diametre - 10 And Tablo(i, 1) <= Diametre + 10 Then
            Qt = Qt + Tablo(i, 2)
        End If
    Next i
     
    MsgBox Qt
     
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2015
    Messages : 46
    Par défaut
    SUPER !

    4 solutions qui fonctionne parfaitement, un grand merci.
    En plus celà me permet de comprendre un peu plus le language VBa et de voir qu'il y a de multiple façon d'écire nos problèmes.

    Bonne journée et encore merci

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

Discussions similaires

  1. <option><b>?</b>Ca fonctione ?</option>
    Par leodi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 27/11/2006, 19h39
  2. [C] recherche d'une fonction
    Par Alice9 dans le forum MFC
    Réponses: 4
    Dernier message: 06/04/2006, 09h19
  3. Réponses: 17
    Dernier message: 14/02/2006, 00h21
  4. barre de recherche dans les fonctions php pour firefox
    Par titoumimi dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 03/02/2006, 10h16
  5. Réponses: 15
    Dernier message: 12/08/2005, 15h06

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