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 :

Select case imbriqué


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut Select case imbriqué
    Bonjour,

    Mon projet consiste à importer dans le fichier excel "Reporting marché2009" contenant 12 pages (une par mois de l'année), les données correspondant aux ventes d'installations dans différents secteurs d'activités. En tout j'ai 27 secteurs d'activité.

    Il faut également différencier les ventes par sociétés au nombre de 3.

    Pour faire cela, j'ai pensé utilisé les tableaux ainsi que la fonction (s'agit-il d'une fonction ?) "Select case".

    Le premier "Select Case" permet de déterminer la société qui a vendu l'installation et détermine ainsi la colonne de destination de la valeur dans le tableau ainsi que dans le fichier excel

    J'ai imbriqué à chaque cas du premier Select case, une second Select case qui permet de déterminer l'activité et ainsi la ligne de destination de la valeur dans le tableau ainsi que dans le fichier excel.

    Ayant déterminé la colonne et la ligne j'ai l'emplacement de destination de la valeur.

    Je passe ensuite à la ligne suivante jusqu'à la dernière ligne de mon fichier txt.


    Je n'aime pas trop mon code car il est moche, pas rapide et je suis sur que l'on peut faire beaucoup mieux.

    Avez-vous des idées à me soumettre?

    Salutations

    Joachim
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 88
    Par défaut
    salut
    penses à utiliser la balise "code" (#). Beaucoup de gens n'aiment pas télécharger des fichiers qui peuvent contenir des virus.

    ton code est moche ? ben, tu sais, les gouts et les couleurs...
    il est surtout important qu'il soit lisible et facile à modifier dans 6 mois ou 6 ans
    tu n'es pas obligé d'imbriquer les select Case
    le premier te permet de fixer a et n. ca c'est fait
    puis referme le 1er et exécutes le 2eme à la suite, qui fixe b et m. Si j'ai bien compris c'est toujours les mêmes valeurs, quelque soit le résultat du 1er Select case

    ton code est lent ? ce n'est sans doute pas Select Case, qui est rapide
    c'est plutot les successions de "activate", qui sont inutiles. Voir correction ci-dessous

    et à quoi sert Tableau2(a, b) ?

    à plus

    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
    84
    85
    86
    87
    88
    89
    90
    VERSION 1.0 CLASS
    BEGIN
      MultiUse = -1  'True
    END
    Attribute VB_Name = "ThisWorkbook"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = True
    Public i As Integer 'numÈro de la ligne
    Public mois As String
    Dim nomfichier As String 'nom du fichier d'export de Qb ‡ ouvrir
    Dim partienom As String  'partie du nom de ce fichier
     
     
     
    Sub lectureligne()
    'cette macro parcoure le document jusqu'‡ la derniËre ligne
    'et met dans le tableau Taninput 3 valeurs de la ligne
    ' ‡ savoir : Groupe, MÈtier, CA
     
    Dim Tabinput(2) As Variant
    Dim a As Integer ' colonne de la variable Tableau2
    Dim b As Integer ' ligne de la variable Tableau2
    Dim Tableau2(2, 26) As Variant 'tableau ‡ 2 dimensions: 3 en absisse, 10 en ordonnÈe
    Dim m As Integer ' ligne de la cellule de destination
    Dim n As Integer ' colonne de la cellule de destination
     
    OuvertureFichier_mois
     
    i = 2
        Do Until Cells(i, 1).Value = ""
     
            Tabinput(0) = Workbooks(partienom).Sheets(1).Cells(i, 1).Value 'Groupe
            Tabinput(1) = Workbooks(partienom).Sheets(1).Cells(i, 2).Value 'MÈtier
            Tabinput(2) = Workbooks(partienom).Sheets(1).Cells(i, 6).Value 'CA
     
            Select Case Tabinput(0)
                Case "CVC" 
                    a = 0
                    n = 14
                Case "LPM"           
                    a = 1
                    n = 23               
                Case "LSR"          
                    a = 2
                    n = 32
    	End Select
     
            Select Case Tabinput(1)
            	Case "Brique"
                            b = 0
                            m = 7
                    Case "Tuile"
                            b = 1
                            m = 8
                    Case "Carreaux"
                            b = 2
                            m = 11
       		' etc                    
           End Select
     
           Tableau2(a, b) = Tabinput(2)
           with Workbooks("Reporting marchÈ2009.xls").Sheets(mois)
    		.Cells(m, n).Value = .Cells(m, n).Value + Tableau2(a, b) 
            end with
            i = i + 1
       Loop
     
    Workbooks(partienom).Close savechanges:=False
    End Sub
     
     
    Sub OuvertureFichier_mois()
    '
    ' Macro1 Macro
    ' Macro enregistrÈe le 19/06/2009 par JoacMenager
    '
    '
        mois = InputBox("Indiquez le mois sous la forme ##")
        nomfichier = "C:\Documents and Settings\joachim.menager\Mes documents\PRO\Mon activitÈ\Mes outils\Logiciels\Yellowstone\Fusion processus\Reporting\Nouveau reporting\Reporting finaux\export_qb\po_" & mois & "09_test.TXT"
        partienom = "po_" & mois & "09_test.TXT"
     
        Workbooks.OpenText Filename:=nomfichier _
            , Origin:=xlWindows, StartRow:=1, DataType:=xlDelimited, TextQualifier _
            :=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:= _
            False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(Array _
            (1, 1), Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), _
            TrailingMinusNumbers:=True
    End Sub

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Mars 2007
    Messages : 32
    Par défaut Modification de mon code
    Merci "Le Petit NIcolas",

    J'ai modifié mon code en suivant tes remarques. J'ai séparé les 2 "Select Case" ce qui fait que je ne répète pas le second.

    J'ai aussi supprimé le Tableau(2) qui ne sert effectivement à rien.

    Par contre, j'ai dû ajouter dans l'affectation de la case Cells(m,n) son classeur et sa feuille car en exécution pas à pas l'ajout de la valeur à la valeur précédente fonctionne mais en exécution réelle seule la dernière valeur était conservée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            With Workbooks("Reporting marché2009.xls").Sheets(mois)
                .Cells(m, n).Value = Workbooks("Reporting marché2009.xls").Sheets(mois).Cells(m, n).Value + Tabinput(2)
            End With
    Je n'ai cependant pas compris ce que tu as rajouté au-dessus de la déclaration des variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    VERSION 1.0 CLASS
    BEGIN
      MultiUse = -1  'True
    END
    Attribute VB_Name = "ThisWorkbook"
    ...
    Merci pour tes conseils aussi sur la suppression de 'Activate": l'exécution est en effet beaucoup plus rapide.

    Slts.

    Joachim

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2007
    Messages : 88
    Par défaut
    salut

    content de voir que ca t'a servi. pour le VERSION 1 CLASS - BEGIN - etc..., je ne sais pas du tout ce que c'est, c'était au début du fichier .txt que tu as attaché dans ton 1er post

    à +

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

Discussions similaires

  1. Problème SELECT, CASE et Group by
    Par Royd938 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2014, 07h41
  2. [XL-2007] USF label visible : Peut-on imbriquer un select case dans un If
    Par mouftie dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/03/2014, 11h07
  3. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 4
    Dernier message: 15/05/2006, 14h40
  4. erreur select case
    Par maximedrouet dans le forum ASP
    Réponses: 12
    Dernier message: 06/01/2005, 15h33
  5. vérification de passage dans un select case
    Par arsgunner dans le forum ASP
    Réponses: 5
    Dernier message: 14/06/2004, 10h05

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