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 :

Explications pour un code [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 139
    Par défaut Explications pour un code
    Bonjour,
    je voudrai avoir des explications pour comprendre le code ci-dessous,

    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
    Private Sub T1_Change()
        Dim i&, aa, a&, bb, y&, sh, cc
        If T1 = "" Then L1.Clear: Label2 = "": Exit Sub
        y = 1
        ReDim bb(4, y)
        For Each sh In Worksheets
            With sh
                aa = .Range("A2:E" & .Range("A" & Rows.Count).End(xlUp).Row)
                For i = 1 To UBound(aa)
                    If aa(i, 1) Like T1 & "*" Then
                        ReDim Preserve bb(4, y)
                        bb(1, y) = aa(i, 1): bb(2, y) = aa(i, 2): bb(3, y) = aa(i, 4): y = y + 1
                    End If
                Next i
            End With
        Next sh
        If y = 1 Then Exit Sub
        If y = 2 Then
        ReDim cc(1, 3)
        cc(1, 1) = bb(1, 1): cc(1, 2) = bb(2, 1): cc(1, 3) = bb(3, 1)
            L1.List = cc
        Else
            L1.List = Application.Transpose(bb)
        End If
        If y = 2 Then
            Label2 = "Vous avez trouvé " & y - 1 & "  ligne avec la recherche " & T1
        Else
            Label2 = "Vous avez trouvé " & y - 1 & "  lignes avec la recherche " & T1
        End If
        L1.ColumnCount = 3
        L1.ColumnWidths = "280;280;80"
    End Sub
    Merci d'avance pour votre attention
    Bob

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 161
    Par défaut
    Bonjour Bob ,
    D’après moi , mais rien n’est jamais sur !!
    Si T1 est un contrôle Textbox
    Si L1 est un contrôle Listtbox
    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
        ‘lorque qu’un changement ce produit sur T1 
    Private Sub T1_Change()
        ‘ici déclaration des variables    
    Dim i&, aa, a&, bb, y&, sh, cc
        ‘si T1 = rien(vide) alors on vide L1 et le Label2 (étiquette)  
    ‘et on sort de la procédure  
    If T1 = "" Then L1.Clear: Label2 = "": Exit Sub
        ‘ici on donne la valeur 1 à (y)   
     y = 1
        ‘sinon création d’un tableau en mémoire   
    ReDim bb(4, y)
        ‘début d’une boucle sur toutes les feuilles du classeur     
    For Each sh In Worksheets
        ‘avec les données de la feuille en court dans la boucle 
    With sh
        ‘création d’un tableau (aa) avec pour valeurs 
    ‘la plage  de cellules ci dessous  
    ‘de la feuille en court dans la boucle        
     aa = .Range("A2:E" & .Range("A" & Rows.Count).End(xlUp).Row)
        ‘boucle sur les valeurs du tableau (aa)             
    For i = 1 To UBound(aa)
        ‘comparaison des valeur du tableau(aa) avec la valeur de(T1)
    ‘si une des valeurs du tableau (aa) correspond 
    ‘de près ou de loin 
    ‘a la valeur contenu dans la textbox (T1) alors              
    If aa(i, 1) Like T1 & "*" Then
        ‘on crée et on modifie les dimensions du tableau (bb) 
    ‘tout en conservant les données déjà présentes dans ce tableau                   
    ReDim Preserve bb(4, y)
        ‘on inscrit dans le tableau (bb) les valeurs du tableau(aa) 
    ‘selon les index (i et y)
    ‘et on incrémentes ( y ) avec sa valeur + 1                
     bb(1, y) = aa(i, 1): bb(2, y) = aa(i, 2): bb(3, y) = aa(i, 4): y = y + 1
     End If
        ‘on passe à la valeur suivante du tableau (aa) avec la boucle (i)           
     Next i
     End With
        ‘on passé à la feuille suivante du classeur avec la boucle « For Each « 
     Next sh
        ‘une fois les boucles terminées
    ‘si ‘y) est resté à 1 on sort de la procédure  
    If y = 1 Then Exit Sub
        ‘si (y) vaut 2    
    If y = 2 Then
        ‘On dimensionne le tableau (cc)   
     ReDim cc(1, 3)
        ‘et on lui inscrit les valeurs du tableau (bb)
    ‘selon les index fournis entre les parenthèses   
    cc(1, 1) = bb(1, 1): cc(1, 2) = bb(2, 1): cc(1, 3) = bb(3, 1)
        ‘on inscrit les valeurs de (cc) dans la listbox        
    L1.List = cc
        ‘sinon 
    Else        
        ‘si (y) est différent de 2 on inscrit les valeurs de (bb) dans la listbox 
    en changeant le sens d’affichage  (lignes en colonnes ou colonnes en lignes)         
    L1.List = Application.Transpose(bb)
        End If
        ‘si (y) est = à 2 
        If y = 2 Then
        ‘on renseigne le control « label » avec le texte , les valeurs de (y-1(donc 1)) et la valeur de la textbox     
     Label2 = "Vous avez trouvé " & y - 1 & "  ligne avec la recherche " & T1   
        ‘sinon 
     Else
        ‘on renseigne le control « label » avec le texte , les valeurs de (y-1)et la valeur de la textbox            
    Label2 = "Vous avez trouvé " & y - 1 & "  lignes avec la recherche " & T1
        End If
        ‘Ensuite on cree 3 colonnes dans la listbox      
    L1.ColumnCount = 3
        ‘Et on détermine les largeurs des colonnes  
    L1.ColumnWidths = "280;280;80"
        ‘fin de l’histoire 
    End Sub
    voila en souhaitant que je ne me sois pas trop trompé et que cela puisse
    t'aidé.

  3. #3
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,
    et d'après moi :
    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
    Private Sub T1_Change() 'ça peut-être une listbox, combobox, textbox, etc. ? _
      donc quand ce controle change
        Dim i&, aa, a&, bb, y&, sh, cc 'très mal déclaré
        'déclaration explicite, ok pour "i&", y& (& remplace as long), "a&" ne sert à rien (non utilisé)
        'bb => bb(), sh => sh as Worksheet, cc => cc()
        If T1 = "" Then L1.Clear: Label2 = "": Exit Sub 'T1 ,j'imagine un TextBox qu'on initialise, L1, j'imagine une ListBox qu'on remet à zéro _
            et Label2, un label qu'on vide
        y = 1 ' je le mettrai à zéro (Y = 0)
        ReDim bb(4, y) 'ne sert à rien
        For Each sh In Worksheets ' on parcoure les feuilles
            With sh
                aa = .Range("A2:E" & .Range("A" & Rows.Count).End(xlUp).Row) 'on met de A2 à E & fin dans un tabeau
                For i = 1 To UBound(aa) 'boucle de 1 à la fin de la première dimension du tableau, j'ecrirais Ubound(aa,1)
                    If aa(i, 1) Like T1 & "*" Then
                      'ici, j'ajouterais y =y + 1
                        ReDim Preserve bb(4, y) 'mais ça ne marchera pas sur un tableau à 2 dimensions
                        'j'imagine qu'il s'agit de ReDim Preserve bb(y)
                        bb(1, y) = aa(i, 1): bb(2, y) = aa(i, 2): bb(3, y) = aa(i, 4) 'à enlever (: y = y + 1)
                    End If
                Next i
            End With
        Next sh
        'inutile d'aller plus loin sans comprendre le but, ni voir le fichier
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Dominique,
    ReDim Preserve bb(4, y) 'mais ça ne marchera pas sur un tableau à 2 dimensions
    Ce n'est pas exact. On peut redimensionner en le préservant la dernière dimension d'une variable tableau. Voir Le chapitre Le mot clé Preserve
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     Dim myTable(), r As Long, c As Integer
     For r = 1 To 10
      ReDim Preserve myTable(4, r)
      For c = 1 To 4
       myTable(c, r) = Feuil1.Cells(r, c)
      Next c
     Next r
     Debug.Print myTable(4, 2)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour Philippe,
    Ce n'est pas exact. On peut redimensionner en le préservant la dernière dimension d'une variable tableau
    Je me suis emmélé les pinceaux, tu as raison, je suis confu.

    Mais pour le reste, demander des explications sur rien, c'est difficile de répondre, et je suppute, quand j'écris " 'j'imagine qu'il s'agit de ReDim Preserve bb(y)" qu'il doit y avoir un chouilla de vrai.

    Bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Dominique,
    Mais pour le reste, demander des explications sur rien, c'est difficile de répondre
    100% d'accord avec toi, c'est la raison pour laquelle je ne suis pas intervenu.
    De plus en faisant une recherche sur le net, je constate qu'il a posé la même question sur un autre forum où d'ailleurs il s'est fait remonté les bretelles parce-qu'il n'a pas cité sa source.
    'j'imagine qu'il s'agit de ReDim Preserve bb(y)" qu'il doit y avoir un chouillat de vrai.
    Je n'ai pas analysé le code donc je ne peux répondre.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

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

Discussions similaires

  1. Demande d'explications pour un code JavaScript
    Par raphael75015 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 26/05/2015, 14h05
  2. besoin petite explication pour comprendre ce code
    Par beta1204 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/06/2009, 19h47
  3. demande d'explication pour un code css
    Par gaya102 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 03/03/2009, 22h39
  4. Besoin d'explication pour ce code
    Par fd_caramba dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/12/2008, 07h03
  5. Explication sur un code pour un compteur
    Par Tiny Buster dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 03/05/2008, 18h46

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