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 :

Parcours d'une plage (une colone sélectionnée dans excel)


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut Parcours d'une plage (une colone sélectionnée dans excel)
    Salut!

    Je fais un peu de prog mais jamais fait de VBA.... J'ai besoin de créer une macro pour parcourir une plage de valeurs et sélectionner la derniere case valorisée de la plage en paramètre ....
    Quel est l'objet VBA qui représente une plage de valeurs ?

    J'ai commencé comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function IdEmprunteurActuel(Plage1 As Areas) As String
     
    End Function
    Ca vous semble bien parti ?

  2. #2
    Expert confirmé
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Par défaut
    Range pour une plage de cellule

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    Merci beaucoup
    Je vais essayer avec ca....

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Un ptit coup de pouce...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function IdEmprunteurActuel(Plage1 As Range) As String
    dim Cel as range
        'Parcourir toute les cellules de la plage
        For Each cel In Plage1 
            cel.Value = "UnTexte" 'ou autre chose
        Next cel
     
    End Function
    A+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    372
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 372
    Par défaut
    C'est parfait merci, c'est exactement ce que je cherchais

    Ca marche Nickel :
    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
    Function IdEmprunteurActuel(plage1 As Range) As String
        Dim Cel As Range
        IdEmprunteurActuel = ""
        Dim index As Integer
        index = 0
        Dim trouve As Boolean
        trouve = False
        'Parcourir toute les cellules de la plage
        For Each Cel In plage1
            If trouve = False Then
     
                If Not Cel.Value = "" Then
                    index = index + 1
                End If
                If Cel.Value = "" Then
                    trouve = True
                End If
     
            End If
        Next Cel
        If trouve = False Then
            IdEmprunteurActuel = ""
        End If
        If trouve = True Then
            If Not index = 0 Then
                IdEmprunteurActuel = plage1(index, 1)
            End If
            If index = 0 Then
                IdEmprunteurActuel = ""
            End If
        End If
    ... si ca peut aider quelqu'un....

  6. #6
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par LeForestier Voir le message
    Bonjour,
    Un ptit coup de pouce...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Function IdEmprunteurActuel(Plage1 As Range) As String
    dim Cel as range
        'Parcourir toute les cellules de la plage
        For Each cel In Plage1 
            cel.Value = "UnTexte" 'ou autre chose
        Next cel
     
    End Function
    A+
    Parcourir cellule par cellule une plage est la pire des méthodes
    (encore que, le pire serait d'écrire cellule par cellule lol)
    Petite démonstration plus bas.

    Citation Envoyé par AnneB Voir le message
    C'est parfait merci, c'est exactement ce que je cherchais

    Ca marche Nickel :
    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
    Function IdEmprunteurActuel(plage1 As Range) As String
        Dim Cel As Range
        IdEmprunteurActuel = ""
        Dim index As Integer
        index = 0
        Dim trouve As Boolean
        trouve = False
        'Parcourir toute les cellules de la plage
        For Each Cel In plage1
            If trouve = False Then
     
                If Not Cel.Value = "" Then
                    index = index + 1
                End If
                If Cel.Value = "" Then
                    trouve = True
                End If
     
            End If
        Next Cel
        If trouve = False Then
            IdEmprunteurActuel = ""
        End If
        If trouve = True Then
            If Not index = 0 Then
                IdEmprunteurActuel = plage1(index, 1)
            End If
            If index = 0 Then
                IdEmprunteurActuel = ""
            End If
        End If
    ... si ca peut aider quelqu'un....
    Quelques régles:
    1°) La déclaration des variables initialise ces variables en fonctions du type :
    numériques => 0, booléenne => false, string=> ""
    il est donc inutile d'initialiser celles-ci

    2°) Une valeur booléenne ne peut prendre que 2 valeurs (vraie ou fausse)
    les tests if ...=false s'il est vrai ne permet pas d'exécuter if ... =true
    il faut donc utiliser if ...=false then ... else

    3°) Enfin et surtout, on parcourt un tableau de valeurs et jamais les cellules d'une feuille
    car il est beaucoup plus rapide d'affecter une plage à un tableau puis de travailler dessus (et inversement d'ailleurs)
    voir le code suivant (à copier dans un module puis lancer la procédure test dans la fenêtre de débogguage)
    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Declare Function GetTickCount Lib "kernel32" () As Long
     
    Function IdEmprunteurActuel(plage1 As Range) As String
        Dim Cel As Range
        IdEmprunteurActuel = ""
        Dim index As Integer
        index = 0
        Dim trouve As Boolean
        trouve = False
        'Parcourir toute les cellules de la plage
        For Each Cel In plage1
            If trouve = False Then
     
                If Not Cel.Value = "" Then
                    index = index + 1
                End If
                If Cel.Value = "" Then
                    trouve = True
                End If
     
            End If
        Next Cel
        If trouve = False Then
            IdEmprunteurActuel = ""
        End If
        If trouve = True Then
            If Not index = 0 Then
                IdEmprunteurActuel = plage1(index, 1)
            End If
            If index = 0 Then
                IdEmprunteurActuel = ""
            End If
        End If
    End Function
    Function IdEmprunteurActuelBis(plage1 As Range) As String
        Dim Cel As Range, index As Integer, trouve As Boolean, a As Long, b As Long
     
        Dim arrayPlage(), x As Long, y As Long
        arrayPlage() = plage1
     
        'Parcourir toute les cellules de la plage
        For x = LBound(arrayPlage) To UBound(arrayPlage)
            For y = LBound(arrayPlage, 2) To UBound(arrayPlage, 2)
     
                If trouve = False Then
     
                    If Not arrayPlage(x, y) = "" Then
                        a = x: b = y
                        trouve = True
                    End If
     
                End If
     
            Next
        Next
        If trouve = False Then
            IdEmprunteurActuelBis = ""
        Else
            IdEmprunteurActuelBis = arrayPlage(a, b)
        End If
     
    End Function
     
    Sub test()
        Dim t0 As Long, t1 As Long, t2 As Long, msg As String, x As Long, k As Long, plage As Range
        k = 100
        Set plage = [Feuil1!A1:G10000]
     
        t0 = GetTickCount()
            For x = 1 To k
                IdEmprunteurActuel plage
            Next
        t1 = GetTickCount()
            For x = 1 To k
                IdEmprunteurActuelBis plage
            Next
        t2 = GetTickCount()
        msg = "Durée de la procédure originale : " + CStr(t1 - t0) + vbCrLf
        msg = msg + "Durée de la procédure originale : " + CStr(t2 - t1) + vbCrLf
        msg = msg + "la procédure modifiée est donc " + Format((t1 - t0) / (t2 - t1), "0.0") + " fois plus rapide que la procédure originale"
     
        MsgBox msg
    End Sub
    Le test est d'autant plus flagrant que la plage est importante

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 27/02/2021, 16h57
  2. Sélectionner une plage puis la mettre dans une formule excel
    Par hkp314 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 24/09/2013, 11h19
  3. Réponses: 10
    Dernier message: 12/06/2007, 10h32
  4. Réponses: 1
    Dernier message: 16/05/2007, 12h51
  5. [VBA-E]Instancier une plage de cellules prises dans plusieurs feuilles
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/03/2007, 12h08

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