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 :

Modification d'une fonction pour selectionner une plage de cellule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut Modification d'une fonction pour selectionner une plage de cellule
    Bonjour à tous,

    j'ai la fonction suivante "progression" qui me permet de m'alerter lorsque j'ai sept points croissants consécutifs. Lorsque l'on insère cette fonction, il faut selectionner manuellement une plage de cellule.
    Je voulais savoir comment modifier ce code afin que ceci ne se fasse plus manuellement mais en fonction d'une cellule.
    Je m'explique, j'ai une macro qui m'extrait des valeurs et ma fonction progression
    étudie les 7 dernières valeurs extraites.
    Je voudrais modifier le code de la fonction afin qu'elle sélectionne automatiquement les 7 dernières lignes. Mais je ne sais pas comment faire!

    PS: Dans mon classeur excel, j'ai une cellule qui a pour valeur le numéro de la dernière ligne extraite, je pensais donc l'utiliser pour sélectionner la plage de cellule.

    Merci d'avance

    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
    Function Progression(ParamArray x() As Variant) As Boolean
    Dim maxi As Variant
    Dim boucle As Variant
    Dim compose As Variant
    Dim Réponse_1 As Variant
    Dim Réponse_2 As Variant
     
    maxi = -10 ^ 308
    For Each boucle In x
        If VarType(boucle) > 8192 Then
            For Each compose In boucle
                If maxi >= compose Then
                    GoTo fin
                Else
                    maxi = compose
                End If
            Next compose
        Else
            If maxi >= boucle Then
                GoTo fin
              Else
                maxi = boucle
            End If
        End If
    Next boucle
    Beep
    Beep
    Beep
    Progression = True
    'Réponse_1 = MsgBox("Attention, il y a sept points consécutifs croissants. Vérifier qu'il n'y ait pas de dérive du Process")
     
    Exit Function
    fin:
    Progression = False
    End Function

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Quelques questions qui me viennent
    - Où apparaît ta plage de cellules dans ta fonction ?
    - Que représente le tableau x() ?
    - Où se trouve ta sélection de cellules ?
    - Quand connais-tu la plage à analyser ? A quel moment ? Une fois renseignée ?
    - Comment connais-tu la dernière ligne ? Où apparaît-elle dans ton code ?

  3. #3
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut
    La plage de cellule est à selectionner manuellement lorsque tu lances la fonction.
    C'est ParamArray qui définit ma plage de cellule et c'est Vartype qui en fait un tableau de valeurs.

    C'est tout du moins ce que je crois car cette fonction n'est pas de moi.

    Et dernière chose la dernière ligne ne fait pas partie de mon code ( pas encore)
    Le numéro de cette dernière ligne est notifié sur une feuille de mon classeur et je cherche à l'utiliser afin de rendre cette fonction un peu plus automatique.

    J'espere que c'est un peu plus clair pour toi.

  4. #4
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut
    Je voudrai juste qu'à chaque fois que j'insère une ligne, cette fonction selectionne automatiquement cette ligne ci.

    Peut etre que ça serait plus simple de faire un Sub et non une fonction mais je ne sais pas comment faire.

  5. #5
    Membre chevronné Avatar de mordrhim
    Inscrit en
    Avril 2007
    Messages
    270
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Avril 2007
    Messages : 270
    Par défaut
    Je modifie ta fonction en live donc à tester et à modifier selon ton désir !

    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
    Function Progression(ParamArray x() As Variant) As Range
    Dim maxi As Variant
    Dim boucle As Variant
    Dim compose As Variant
    Dim Réponse_1 As Variant
    Dim Réponse_2 As Variant
    Dim Selec as Range
    Dim SelectionVide as Boolean 
     
    maxi = -10 ^ 308
    SelectionVide = True
    For Each boucle In x
        If VarType(boucle) > 8192 Then
            For Each compose In boucle
                If maxi >= compose Then
                    GoTo fin
                Else
                    maxi = compose
                    If SelectionVide then
                        Selec = "La ligne ou est la valeur"
                    Else
                        Selec = Union(Selec,"La ligne ou est la valeur")
                        SelectionVide = False
                    Endif
                End If
            Next compose
        Else
            If maxi >= boucle Then
                GoTo fin
            Else
                maxi = boucle
                If SelectionVide then
                    Selec = "La ligne ou est la valeur"
                Else
                    Selec = Union(Selec,"La ligne ou est la valeur")
                    SelectionVide = False
                Endif
            End If
         End If
    Next boucle
    Beep
    Beep
    Beep
    Progression = Selec
    'Réponse_1 = MsgBox("Attention, il y a sept points consécutifs croissants. Vérifier qu'il n'y ait pas de dérive du Process")
     
    Exit Function
    fin:
    Progression = Empty
    End Function
    Je suis pas trop sur de ce que ca donnera mais je te donne une idée.
    Normalement, s'il y a une valeur supérieur, il créé ou incrémente la sélection, puis te renvoie la sélection ainsi crée.

    Tiens nous au courant si ca marche et sinon ce qui ne va pas

  6. #6
    Membre averti
    Inscrit en
    Mai 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 42
    Par défaut
    Tout d'abord merci de ton aide.

    J'ai essayé ta modification mais ça me dit "Erreur de compilation, incompatibilité de type".

    Dès que je selectionne mes valeurs, ça stoppe en m'affichant ce que j'ai ecrit au dessus et en me surlignant "La ligne ou est la valeur"
    Si tu veux essayer la fonction, il te suffit juste d'avoir quelques valeurs sur une feuille excel et de la tester.

    Par contre j'ai pas très bien compris ta modification, à quoi correspond ton
    selectionVide= True/False?

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/11/2010, 18h22
  2. Existe t il une fonction pour effacer une page
    Par teen6517 dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2007, 14h20
  3. Réponses: 12
    Dernier message: 25/07/2006, 18h36
  4. Réponses: 8
    Dernier message: 02/12/2005, 18h07
  5. Utiliser une touche pour appeller une fonction
    Par Hide dans le forum Langage
    Réponses: 2
    Dernier message: 13/10/2005, 16h59

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