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 :

Plage de recherche variable dans macro VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2011
    Messages : 1
    Par défaut Plage de recherche variable dans macro VBA
    Tout d'abord, Bonjour à tous ceux qui passeront sur ce fil !

    Je coince sérieusement sur une partie de ma macro...


    J'ai 3 colonnes A, B et C
    Ligne 1 les titres
    Ligne 2 à N(N variable définie au début de ma macro) :
    -Colonne A, des temps en seconde.
    -Colonne B, des temps en seconde, qui sont initialement rangés par ordre croissant, MAIS quand la macro travaille ils ne sont plus rangés de la sorte.
    -Colonne C, des entiers positifs

    Ce que je voudrais faire, c'est définir un plage de cellule qui serait ma plage de recherche initiale ( toute la colonne B de la ligne 2 à N)

    Ensuite faire une boucle de i=2 jusqu'à N qui :
    Va chercher la plus petite des valeurs des cellules comprises dans la plage de recherche ET entre cellule(2,"B") et cellule (i,-1,"B")(Intersection), par exemple cellule (j,"B")

    Si la valeur de la cellule (i,"A") est > à la valeur de la cellule (j,"B"), alors la valeur de la cellule (i,"C") prend la valeur de la cellule (j,"C") ET la cellule (j,"B") est éliminée de la plage de recherche. C'est à dire qu'au i suivant, elle ne sera pas prise en compte lors de la recherche de la plus petite des valeurs.

    Sinon la cellule (i,"C") prend la valeur de la cellule (i-1,"C") + 1.

    Dans l'idée, je voudrais faire quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maplage=Range(Cells(2,"B"),Cells(N,"B"))
    Et dans la boucle, redéfinir maplage à chaque fois que nécessaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maplage= maplage - Range (Cells(j,"B")
    Il n'est apparemment pas possible de faire de telles opérations sur les Range, mais si quelqu'un a une idée je suis preneur !

    Merci.

    CampaSC

  2. #2
    Membre chevronné
    Inscrit en
    Octobre 2008
    Messages
    273
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Octobre 2008
    Messages : 273
    Par défaut
    Bonjour,

    pour trouver la plus petite valeur dans une plage, je te propose ce bout de macro :
    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 RecherchePlusPetiteValeur()
    Dim Plage As Range
    Dim c As Range
    Dim N As Double
    Dim PlusPetiteValeur As Double
     
    N = Range("B65536").End(xlUp).Row
     
    Set Plage = Range(Cells(2, 2), Cells(N, 2))
    PlusPetiteValeur = 0
     
    For Each c In Plage
        If c.Value < PlusPetiteValeur Then PlusPetiteValeur = c.Value
    Next
     
    MsgBox PlusPetiteValeur
     
    End Sub
    Ensuite, dans for/next, tu peux toujours construire ta nouvelle plage en faisant une union de plage en excluant la ligne de la plus petite valeur (c.row) avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set r1 = Range(Cells(2, 1), Cells(c.Row - 1, 3))
    Set r2 = Range(Cells(c.Row + 1, 1), Cells(N, 3))
    Set Plage = Union(r1, r2)
    et reboucler dans cette nouvelle plage.

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2011
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 141
    Par défaut Excel VBA WorksheetFunction.Min(rngTime)
    Bonjour CampaSC,

    1. Min d'un Range

    Mine de rien, Excel propose en standard la fonction WorksheetFunction.Min() d'un Range.

    Cliquez dans le VBE menu "Insérer" > "Module".
    Dans la fenêtre d'édition du module, copier-coller et compléter avec des noms à vous et commentaires la définition des constantes suivantes :
    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
    Option Explicit
    Public Const rowTitle = 1
    Public Const rowTitle1 = rowTitle + 1
    Public Const rowTitleMax = 50
     
    Public Const colTime = 1 ' temps en seconde
    Public Const colSecSort = colTime + 1 ' temps en seconde trié
    Public Const colInt = colSecSort + 1 ' des entiers positifs. Qu'est-ce qu'ils représentent ?
     
    Function PlageMin(ByVal indRow As Integer) As Integer
    Dim rngTime As Range
     
        Set rngTime = Range(Cells(rowTitle1, colSecSort), Cells(indRow, colSecSort))
        PlageMin = WorksheetFunction.Min(rngTime)
    End Function
     
    Sub PlageInit()
    Dim indRow As Integer
     
        For indRow = rowTitle1 To rowTitleMax
            Cells(indRow, colSecSort) = CInt(Rnd(100) * 100) ' Valeur aléatoire
        Next
    End Sub
    Dans la fenêtre d'Exécution immédiate (Ctlr+G) du VBE, copier-coller et valider par ENTER :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ? PlageMin(rowTitleMax)
    2
    Si la plus petite valeur est 2 dans les lignes rowTitle1 à rowTitleMax, colonne colSecSort.

    Dans une feuille de calcul vide, on peut optionnellement initialiser la 2eme colonne avec :
    qui génère 50 valeurs aléatoire entre 0 et 100 dans les lignes rowTitle1 à rowTitleMax, colonne colSecSort.
    _____________

    2. Postez votre code VBA

    Entre les balises [CODE] et [/CODE] postez votre tentative de code VBA que vous pouvez bien évidemment commenté plutôt que de décrire du pseudo-code avec une syntaxe étrange telle que le tableau de cellule à trois ou quatre dimensions :
    Citation Envoyé par CampaSC Voir le message
    cellule (i,-1,"B")(Intersection),
    Car la 1ere série de trois indices entre parenthèse est collée avec l'ouverture d'une nouvelle parenthèse introduisant l'index Intersection.
    J'ai récemment utilisé la syntaxe d'Array d'Array dans 1. Initialisation d'une barre d'outils avec Excel VBA
    _____________

    3. Basculez en module de référence de colonne numérique

    Cliquez sur l'Excel menu "Outils" > "Options" onglet "Général"
    [x] R1C1 reference style
    Cette option vous permettra de convertir les lettres de colonne en position numérique dans l'alphabet. Vous pourrez ainsi réécrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maplage=Range(Cells(2,"B"),Cells(N,"B"))
    Par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     Dim rngTime As Range
     
        Set rngTime = Range(Cells(rowTitle1, colSecSort), Cells(rowTitleMax, colSecSort))
    Voir la Function PlageMin().
    _____________

    4. Opération sur les Range

    Remplacez la soustraction de Range :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     maplage= maplage - Range (Cells(j,"B"),...)
    par une opération arithmétique au niveau de leurs indices de rangée et de colonne ou une Union de Range comme suggéré par oOVaveOo.

Discussions similaires

  1. [XL-2007] range de colonne variable dans macros vba
    Par Lbn23 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 05/03/2012, 15h03
  2. Recherche variable dans champs d'une table
    Par kemiolek dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 21/05/2008, 10h09
  3. [vb.net]Recherche variable dans combobox
    Par skaraa dans le forum Windows Forms
    Réponses: 6
    Dernier message: 24/01/2008, 19h11
  4. Variable dans Requête Vba Access
    Par dorschner dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/08/2006, 21h52
  5. [VBA-E] Problème de tableau dans macro VBA
    Par Chouls dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 12/06/2006, 15h20

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