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 :

plusieurs valeurs dans un intervalle


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut plusieurs valeurs dans un intervalle
    Bonjour tous le monde,

    J'ai un petit soucis pour réaliser un code.

    Je dispose de données dans ma colonne 1 de ma feuille excel. A l'aide d'une macro je dois détecter toutes les valeurs qui sont dans un intervalle [min;max] et garder uniquement celle étant la plus proche de zéro.
    min et max sont des variables de type double.

    Voici un exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Colonne1
     
    2
    5
    8
    15
    25
    Je fixe min=4
    Je fixe max=9

    5 et 8 sont compris dans cette intervalle mais comme 5 est le plus petit je le conserve et je supprime le 8.

    Voili voilou, si quelqu'un aurait une idée ça serait chouette merci

  2. #2
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour,
    en partant du principe que toutes tes valeur sont positives

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mintrouve=max
    For i = 2 to dernereligne
       if cells(i,1)>=min and cells(i,1)=<mintrouve then
          mintrouve=cells(i,1)
      end if
    next i
    Edit c'est bien sur a toi de donner des valeur a min , max et dernereligne

  3. #3
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Bonjour,
    Voici une idée, bonne continuation...

    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
    Sub Interval()
     
    Dim MaPlage As Range
    Dim cel As Range
    Dim c As Integer
    Dim max As Integer
    Dim min As Integer
     
    min = 4 'Défini en "dur" pour l'exemple
    max = 9
    c = max 'servira à définir la plus petite valeur
    Set MaPlage = Sheets("sheet1").Range("A1:A6") 'A adapter selon le cas.
     
    For Each cel In MaPlage 'Boucle sur toutes les cellules comprise dans la plge
     
        If cel.Value < max And cel.Value > min Then 'Vérifie si la valeur est comprise en min et max
            If cel.Value < c Then c = cel.Value 'Si la valeur est plus petit que la précédente on remplace la valeur de c
        End If
    Next cel
     
    MsgBox "La plus petite valeur comprise entre " & min & " et " & max & " est " & c
     
    End Sub
    Edit: Salut Krovax, c'est grave, je venais de faire un refresh et je suis quand même deuxième Et en plus, ton code est plus court

  4. #4
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bonjour Fvandermeulen,

    une fois que c=max plus besoin de tester le max il suffit de tester le c

    Sinon je me pose une question (je n'ai jamais testé) le for each est plus rapide que la boucle en i?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Points : 723
    Points
    723
    Par défaut
    Salut à tous,

    Je dois avouer que je suis aussi intéressé de savoir si le For Each est plus ou moins rapide qu'une boucle classique

    Et quant-à moi, je ne poste même pas ma solution

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    merci beaucoup pour vos réponses c'est chouette

  7. #7
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Re,
    Ben ouaip, Krovax a bien raison plus besoin de tester le max , je vais aller me recoucher...
    Et pour la boucle, je promets, je ferai un test avec un chrono de compétition et je vous dis quoi (mais à mon avis ça doit pas changer grand chôse)
    A+

  8. #8
    Membre chevronné Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Points : 2 168
    Points
    2 168
    Par défaut
    Bon après un petit test
    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
     
    Dim deb As Long
    Dim res1 As Long
    Dim res2 As Long
    Dim cel As Range
    Dim i As Long
    deb = GetTickCount
    For Each cel In Range("A1:A10000")
    cel = cel
    Next cel
    res1 = GetTickCount - deb
    deb = GetTickCount
    For i = 1 To 10000
    Cells(i, 1) = Cells(i, 1)
    Next i
    res2 = GetTickCount - deb
     
    MsgBox "For each " & res1 & Chr(13) & "For next " & res2
    For each est un peut plus rapide (100ms environ, si GetTickCount renvoi bien des miliseconde j'ai un doute d'un coup)
    mais comme ca dépend de l'utilisationdu proc ca vari pas mal.

    Bon après cette paranthèse nous te prions marie de bien vouloir nous excuser pour ce petit écart. Les codes que l'on ta donné fonctionne?

  9. #9
    Membre du Club
    Femme Profil pro
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 61
    Points
    61
    Par défaut
    En effet ça à l'air de fonctionner

    Merci pour à tous

    Bonne journée

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

Discussions similaires

  1. récupérer plusieurs valeurs dans un champ hidden
    Par karimphp dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2006, 18h13
  2. trouver une valeur dans un intervalle
    Par gwenhael dans le forum Requêtes
    Réponses: 3
    Dernier message: 16/09/2006, 12h21
  3. Réponses: 10
    Dernier message: 03/07/2006, 15h55
  4. Réponses: 4
    Dernier message: 19/05/2006, 11h26
  5. Plusieurs valeurs dans un value
    Par nebule dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/11/2004, 11h58

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