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 :

Liste dans l'ordre inverse


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Liste dans l'ordre inverse
    Bonjour !
    J'ai le code ci-dessous, Il s'agit d'une liste qui affiche les fichiers.pdf présent dans un dossier:

    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
    For j = 1 To ActiveSheet.Range("K65000").End(xlUp).Row
        If Cells(j, 11) <> "" Then     'Si colonne K est rempli
        Dim tabl() 'Créer une liste déroulante
           Dim t As Byte
     
            t = 1
            ReDim tabl(t)
            repertoire = ThisWorkbook.Path & "\" & ActiveSheet.Name & "\" & Range("K" & j).Value 'entrez le nom du repertoire ou trouver les fichiers
           nf = Dir(repertoire & "\*.pdf*")
     
            Do While nf <> ""
                tabl(t) = nf
                t = t + 1
                ReDim Preserve tabl(t)
                nf = Dir ' suivant
           Loop
     
            With Sheets(ActiveSheet.Name).Cells(j, 23).Validation 'Entrez le numero de la feuille ainsi que la cellule correspondante
            .Delete
             .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(tabl, ",")
            End With
        End If
     
        Next j
        End Sub


    Est-il possible d'afficher les valeur de la liste dans l'ordre inverse ? J'ai vu sur internet des .Reverse mais pas moyen que cela fonctionne j'ai des erreurs à chaque fois.
    Merci

  2. #2
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour Pierre, bonjour le forum,

    Peut-être comme ça (non testé) :

    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
    Dim tabl() 'Créer une liste déroulante
    Dim TabInv() As Variant
    Dim t As Byte
    Dim I As Integer
    Dim J As Integer
     
    For J = 1 To ActiveSheet.Range("K65000").End(xlUp).Row
        If Cells(J, 11) <> "" Then     'Si colonne K est rempli
            t = 1
            ReDim tabl(t)
            repertoire = ThisWorkbook.Path & "\" & ActiveSheet.Name & "\" & Range("K" & J).Value 'entrez le nom du repertoire ou trouver les fichiers
            nf = Dir(repertoire & "\*.pdf*")
            Do While nf <> ""
                tabl(t) = nf
                t = t + 1
                ReDim Preserve tabl(t)
                nf = Dir ' suivant
            Loop
            J = 0
            ReDim TabInv(UBound(tabl, 1))
            For I = UBound(tabl, 1) To LBound(tabl, 1) Step -1
                TabInv(J) = tabl(I)
                J = J + 1
            Next I
            With Sheets(ActiveSheet.Name).Cells(J, 23).Validation 'Entrez le numero de la feuille ainsi que la cellule correspondante
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(TabInv, ",")
            End With
        End If
    Next J
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  3. #3
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Bonjour !
    Merci d'avoir pris le temps de trouver une solution à mon problème ! Mais le programme ne marche pas, j'ai l'impression que la macro ne s'arrete jamais et cela à fait planter mon classeur ^^

  4. #4
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, regarde Liste des fichiers d'un dossier ( Win 32/64 Bits ) et adapte à ton contexte.

  5. #5
    Invité
    Invité(e)
    Par défaut
    bonjour,
    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
    Sub test()
    Dim T()
    T = Array("a", "b", "c", "d", "e")
    Tier T
    End Sub
     
    Sub Tier(tabl)
    For i = 1 To UBound(tabl)
       If tabl(i) > tabl(i - 1) Then
        T = tabl(i)
         tabl(i) = tabl(i - 1)
          tabl(i - 1) = T
          i = i - 2
          If i < 0 Then i = 0
       End If
    Next i
    End Sub

  6. #6
    Membre émérite Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Points : 2 594
    Points
    2 594
    Par défaut
    Bonjour le fil, bonjour le forum

    Citation Envoyé par Pierre69200 Voir le message
    Bonjour !
    Merci d'avoir pris le temps de trouver une solution à mon problème ! Mais le programme ne marche pas, j'ai l'impression que la macro ne s'arrete jamais et cela à fait planter mon classeur ^^

    Pas étonnant ! j'ai utilisé la même variable J pour deux boucles différentes... Désolé. Le code rectifié :

    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
    Sub Macro1()
    Dim tabl() 'Créer une liste déroulante
    Dim TabInv() As Variant
    Dim t As Byte
    Dim I As Integer
    Dim J As Integer
    Dim K As Integer
     
    For J = 1 To ActiveSheet.Range("K65000").End(xlUp).Row
        If Cells(J, 11) <> "" Then     'Si colonne K est rempli
            t = 1
            ReDim tabl(t)
            repertoire = ThisWorkbook.Path & "\" & ActiveSheet.Name & "\" & Range("K" & J).Value 'entrez le nom du repertoire ou trouver les fichiers
            nf = Dir(repertoire & "\*.pdf*")
            Do While nf <> ""
                tabl(t) = nf
                t = t + 1
                ReDim Preserve tabl(t)
                nf = Dir ' suivant
            Loop
            ReDim TabInv(UBound(tabl, 1))
            For I = UBound(tabl, 1) To LBound(tabl, 1) Step -1
                TabInv(K) = tabl(I)
                K = K + 1
            Next I
            With Sheets(ActiveSheet.Name).Cells(J, 23).Validation 'Entrez le numero de la feuille ainsi que la cellule correspondante
            .Delete
            .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=Join(TabInv, ",")
            End With
        End If
    Next J
    End Sub
    À plus,

    Thauthème

    Je suis Charlie

  7. #7
    Invité
    Invité(e)
    Par défaut
    Effectivement Thauthème,
    Dans ce cas de figure ton traitement est plus efficace que le mien!

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mai 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Mai 2015
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Je vous remercie vraiment de m'avoir aidé !

    Je me suis finalement servi de la fonction Reversarray ! Mais je vais voir vos codes et essayer de les comprendre.
    Merci encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         tabl=reversarray(tabl)
     
     
    Function reversarray(tabl)
    Dim rtabl()
    ReDim rtabl(LBound(tabl, 1) To UBound(tabl, 1))
         For i = LBound(tabl) To UBound(tabl) + IIf(LBound(tabl) = 1, 1, 0)
         rtabl(UBound(tabl) - i) = tabl(i)
         Next i
         reversarray = rtabl
    End Function

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

Discussions similaires

  1. Liste dans un ordre aléatoire
    Par gigalia dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/03/2015, 14h42
  2. Réponses: 5
    Dernier message: 01/02/2010, 10h25
  3. requete avec un resultat dans l'ordre inverse de la table
    Par hellalaboy dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/09/2009, 12h27
  4. Réponses: 3
    Dernier message: 24/02/2007, 15h21
  5. parcourir un fichier dans l'ordre inverse
    Par franc82 dans le forum C++
    Réponses: 11
    Dernier message: 09/02/2007, 13h56

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