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 :

Optimiser le code VBA (gestion de liste) [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2004
    Messages : 50
    Points : 56
    Points
    56
    Par défaut Optimiser le code VBA (gestion de liste)
    Bonjour Forum,
    Pour effectuer le traitement pour toutes les autres familles existantes un tableau constitué de plusieurs variables du même type est crée. Il est composé de 4 éléments : Bois, Jardin, Décoration et Bricolage.
    Ma question : dans le cas où le nombre de familles d'article dépasse 50 ou plus, comment éviter la saisie des noms en forçant une recherche dans une liste prédfinie. Il se peut que je soit dans l'erreur.

    Merci par avance.

    Cordialement


    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
    Sub PrcVentilation()
        Dim ZCpt As Long
        Dim ZFamille As String
     
        Dim ZListeFam(4) As String
        ZListeFam(1) = "Bois"
        ZListeFam(2) = "Jardin"
        ZListeFam(3) = "Décoration"
        ZListeFam(4) = "Bricolage"
     
        Range("A4").Select
        Selection.AutoFilter
     
        If Dir("C:\Articles", vbDirectory) = "" Then MkDir ("C:\Articles")
     
        For ZCpt = 1 To UBound(ZListeFam)
     
            Z_Famille = UCase(ZListeFam(ZCpt))
            Selection.AutoFilter Field:=1, Criteria1:=ZFamille

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Une proposition si elle convient
    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
    Sub PrcVentilation()
    Dim ZCpt As Long, NbFam As Long
    Dim ZListeFam As New Collection
     
    Application.ScreenUpdating = False
     
    If Dir("C:\Articles", vbDirectory) = "" Then MkDir ("C:\Articles")
     
    With Sheets("Feuil1")   'à adapter
        NbFam = .Cells(Rows.Count, 1).End(xlUp).Row
     
        For ZCpt = 5 To NbFam       'Données commencent en 5ème ligne
            On Error Resume Next
                .Range("A" & ZCpt) = UCase(Trim(.Range("A" & ZCpt)))
                ZListeFam.Add .Range("A" & ZCpt), .Range("A" & ZCpt)
            On Error GoTo 0
        Next ZCpt
     
        With Range("A4")
            For ZCpt = 1 To ZListeFam.Count
                .AutoFilter
                .AutoFilter Field:=1, Criteria1:=ZListeFam(ZCpt)
                '...suite code et traitement à effectuer après filtrage
            Next ZCpt
              .AutoFilter
        End With
    End With
    End Sub
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  3. #3
    Membre du Club
    Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2004
    Messages : 50
    Points : 56
    Points
    56
    Par défaut La variable ZFAMILLE reste vide
    Bonsoir Mecatog et Forum.

    Merci pour ton code. Après test, la variable ZFamille reste vide. Elle doit prendre comme valeur la famille d'article de type "BRICOLAGE" pour eviter de réecrir le même fichier de nom "Articles". Le nom attendu est de type "Articles BRICOLAGE".
    le code est :

    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
    Sub PrcVentilation_Dev()
    Dim ZCpt As Long, NbFam As Long
    Dim ZListeFam As New Collection
    Dim ZFamille As String
     
     
    Application.ScreenUpdating = False
     
    If Dir("C:\Articles", vbDirectory) = "" Then MkDir ("C:\Articles")
     
    With Sheets("Base")   'à adapter
        NbFam = .Cells(Rows.Count, 1).End(xlUp).Row
     
        For ZCpt = 5 To NbFam       'Données commencent en 5ème ligne
            On Error Resume Next
                .Range("A" & ZCpt) = UCase(Trim(.Range("A" & ZCpt)))
                ZListeFam.Add .Range("A" & ZCpt), .Range("A" & ZCpt)
            On Error GoTo 0
        Next ZCpt
     
        With Range("A4")
            For ZCpt = 1 To ZListeFam.Count 
                .AutoFilter
                .AutoFilter Field:=1, Criteria1:=ZListeFam(ZCpt)
     
                Selection.CurrentRegion.Select
                Selection.Copy
                Workbooks.Add
                ActiveSheet.Paste
                ActiveWorkbook.SaveAs Filename:="C:\Articles\Articles" & ZFamille & ".xls"
                ActiveWorkbook.Close
                Application.CutCopyMode = False
     
            Next ZCpt
              .AutoFilter
        End With
    End With
    End Sub

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Dim ZCpt As Long, NbFam As Long
    Dim ZListeFam As New Collection
    Dim wbk As Workbook
     
     
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    If Dir("C:\Articles", vbDirectory) = "" Then MkDir ("C:\Articles")
     
    With Sheets("Base")   'à adapter
        NbFam = .Cells(Rows.Count, 1).End(xlUp).Row
     
        For ZCpt = 5 To NbFam       'Données commencent en 5ème ligne
            On Error Resume Next
                .Range("A" & ZCpt) = UCase(Trim(.Range("A" & ZCpt)))
                ZListeFam.Add .Range("A" & ZCpt), .Range("A" & ZCpt)
            On Error GoTo 0
        Next ZCpt
     
        With .Range("A4:X" & NbFam)
            For ZCpt = 1 To ZListeFam.Count
                .AutoFilter
                .AutoFilter Field:=1, Criteria1:=ZListeFam(ZCpt)
                Set wbk = Workbooks.Add(1)
                .SpecialCells(xlCellTypeVisible).Copy wbk.Sheets(1).Range("A1")
                wbk.SaveAs Filename:="C:\Articles\Articles\" & ZListeFam(ZCpt) & ".xls"
                wbk.Close
            Next ZCpt
              .AutoFilter
        End With
    End With
    Application.DisplayAlerts = True
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  5. #5
    Membre du Club
    Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2004
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2004
    Messages : 50
    Points : 56
    Points
    56
    Par défaut Code opmtimisé
    Bonsoir,

    Je vous remercie pour les solutions proposées et toutes mes excuses pour cette réponse tardive. Je viens de reprendre ce projet pour le clôturer.

    Cordialement

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

Discussions similaires

  1. [XL-2007] VBA - Gestion dynamique liste
    Par lamselle dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/12/2011, 18h49
  2. [XL-2007] optimisation du code vba excel
    Par Maxim0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/07/2011, 15h43
  3. [XL-2007] Optimiser un code VBA pour accélérer l'éxécution
    Par Rayanea dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/08/2010, 15h18
  4. Optimisation de code VBA
    Par MartinezGarcia dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/02/2008, 13h11
  5. Réponses: 13
    Dernier message: 20/04/2006, 15h37

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