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 :

Explication ligne de code Lastlig [XL-2007]


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
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut Explication ligne de code Lastlig
    Bonjour à toutes et à tous,

    J'ai à nouveau un problème. En effet je ne comprend pas une ligne de code.
    Je m'explique: Je fais un filtre à l'aide de combobox, j'alimente mes combobox avec le code suivant :

    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
    Private Sub UserForm_Initialize() 'Récupération des données sur la BDD et tri dans l'ordre alphabetique
    Dim LastLig As Long
    Dim j As Long
    Dim i As Byte
    Dim n As Long
    Dim ColCrit
     
    ColCrit = Array(4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23) ' n° de colonnes choisies pour le filtrage
     
    With Sheets("bras")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row 
        For i = 1 To UBound(ColCrit) 
            For j = 4 To LastLig 
                Me.Controls("ComboBox" & i).Value = .Cells(j, ColCrit(i)).Value 
                If Me.Controls("ComboBox" & i).ListIndex = -1 Then Me.Controls("ComboBox" & i).AddItem .Cells(j, ColCrit(i)).Value
                Me.Controls("ComboBox" & i).ListIndex = -1
            Next j 
     
        'fonction pour tri dans l'ordre alphabetique
            With Me.Controls("ComboBox" & i) 
            For x = 0 To .ListCount - 1
                 For y = 0 To .ListCount - 1
                   If .List(x) < .List(y) Then
                        strTemp = .List(x) 
                            .List(x) = .List(y)
                                .List(y) = strTemp
                                    End If
        Next y
        Next x
      End With
    Next i
    End With
    End Sub
    Mais le problème, c'est la ligne ou je décris LastLig

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row
    Elle ne prend en compte que la colonne 4, mais j'aimerais qu'elle prend en compte la dernière ligne de toutes les colonnes.

    Donc si je me suis bien comprendre, enfin j'espère, il faut en fait que quand j'ajoute des données à la suite dans les colonnes (sans cellules vides), la combobox soit alimenté correctement.

    Je remercie par avance à celui ou celle qui m'indiquera la marche à suivre.

    Pour finir, j'aimerais souligner la gentillesse, la rapidité et la patience de chaque membre qui m'ont aidé à me perfectionner.

    Je sais que je le dis souvent, mais je tiens encore à le dire à toute la communauté:

    MERCI

  2. #2
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Bonjour,
    tu peux essayer ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig = .Cells.Find("*", , , , , xlPrevious).Row
    te donneras la dernière ligne utilisée de ta feuille

  3. #3
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut
    Merci, mais peux-tu m'expliquer le code pour que je comprenne ?

    Pourquoi "*" et seulement les virgules ?

    Parce que ça fonctionne très bien, mais comme je commence l'introduction de mes données à la ligne 5, il me laisse au début de ma combobox un espace vide
    Il faut que j'utilise la scrollbar pour aller jusqu'à en bas de la liste pour trouver mes informations.

    Merci

  4. #4
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    F1 avec le mot find te donnes les explications:
    voici les options de la fonctions find :
    expression.Find(Quoi, Après, RechercherDans, Regarder, OrdreRecherche, SensRecherche, RespecterCasse, RespecterNbreOctets, FormatRecherche)
    donc:
    -.cells.find : je veux rechercher dans toutes les cellules de la feuille
    -find(quoi, = find("*", = les celulles qui contiennent une donnée, n'importe laquelle
    ensuite les différentes "," correspondent aux options que je n'utilise pas sauf "sens recherche" = xlPrevious. encore une fois F1 nous dit :
    xlPrevious :Recherche la valeur correspondante précédente dans la plage.
    j'aurais pu l'écrire comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLig = .Cells.Find(what:="*", SearchDirection:=xlPrevious).Row

  5. #5
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 26
    Par défaut
    Ok merci , mais pourquoi j'ai un grand espace dans mes combobox. Parce que j'aimerais commencer l'alimentation des combobox à partir de la ligne 4.

    Merci

  6. #6
    Membre Expert Avatar de rvtoulon
    Homme Profil pro
    Agent Technique
    Inscrit en
    Mars 2009
    Messages
    1 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Agent Technique
    Secteur : Santé

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 042
    Par défaut
    Je comprend ce que tu souhaites faire, enfin je pense.
    en fait lastlign n'est pas placé au bon endroit, à mon avis tu devrais le mettre sous la première boucle for. (Ne tiens pas compte du code avec Find).
    si je comprend l'array colcrit correspond aux colonnes sur lesquelles tu veux trouver la dernière ligne c'est çà?
    donc je ferais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Sheets("bras")
        .AutoFilterMode = False
     
        For i = 0 To UBound(ColCrit) 
         LastLig = .Cells(.Rows.Count, colcrit(i)).End(xlUp).Row 
            For j = 4 To LastLig
    Note que j'ai mis i=0 et pas i=1 car le premier index d'un array = 0

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

Discussions similaires

  1. Explication ligne de code
    Par alonet dans le forum Excel
    Réponses: 10
    Dernier message: 18/07/2014, 15h02
  2. explication ligne de code
    Par arni63 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/08/2010, 16h00
  3. Explication d'une ligne de code
    Par Deejoh dans le forum Langage
    Réponses: 2
    Dernier message: 02/02/2007, 12h31
  4. [TAPI]Explication d'une ligne de code
    Par Pmatt dans le forum C
    Réponses: 7
    Dernier message: 15/01/2007, 19h57
  5. [Tableaux] Explication d'une ligne de code
    Par eXiaNazaire dans le forum Langage
    Réponses: 3
    Dernier message: 30/03/2006, 13h09

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