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 :

Tableau de variables


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Responsable des investissements
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des investissements
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Par défaut Tableau de variables
    Bonjour à tous,

    Je mets en place un outil de suivi des investissements et dans ce cadre j'ai besoin de vos lumières

    J'aimerai créer un tableau de variables (Tab_Cmde) en piochant dans le tableau Excel suivant :

    Nom : TableauEXCEL.PNG
Affichages : 187
Taille : 25,8 Ko

    Le tableau de variables est de dimension Tab_Cmde(5,9). Je souhaite qu'il soit composé comme suit :

    Tab_Cmde(0,0) = A5 (numéro de commande 21243) ; Tab_Cmde(0,1) = C5 (Mois 6) ; Tab_Cmde(0,2) = H5 (Prix 450 k€) ; etc.

    Pour cela j'ai créé le code qui suit (qui fonctionne bien mais qui est affreux !!!) :

    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
    ''Colonne 0 = n° des commandes
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 0) = Cells(i, 1)
    Next
     
    j = -1
    ''Colonne 1 = Mois_1
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 1) = Cells(i, 3)
    Next
     
    j = -1
    ''Colonne 2 = Montant_1
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 2) = Cells(i, 8)
    Next
     
    j = -1
    ''Colonne 3 = Mois_2
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 3) = Cells(i, 10)
    Next
     
    j = -1
    ''Colonne 4 = Montant_2
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 4) = Cells(i, 15)
    Next
     
    j = -1
    ''Colonne 5 = Mois_3
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 5) = Cells(i, 17)
    Next
     
    j = -1
    ''Colonne 6 = Montant_3
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 6) = Cells(i, 22)
    Next
     
    j = -1
    ''Colonne 7 = Mois_4
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 7) = Cells(i, 24)
    Next
     
    j = -1
    ''Colonne 8 = Montant_4
    For i = 5 To DernLigne
        j = j + 1
        Tab_Cmde(j, 8) = Cells(i, 29)
    Next
    Mon souci est que les cellules Cells(i, 1) ; Cells(i, 3) ; Cells(i, 8) ; ect. des boucles FOR ne s'incrémentent pas de 1 en 1 du coup je ne voyais pas comment faire autrement...


    Avez vous une idée pour rendre ce code plus "compact" ?


    D'avance je vous remercie


    Kévin

  2. #2
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour Kevinsa,
    Si tu essayais ceci :
    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
     
    j = -1
     
    For i = 5 To DernLigne
    j = j + 1
    Tab_Cmde(j, 0) = Cells(i, 1)
    Tab_Cmde(j, 1) = Cells(i, 3)
    Tab_Cmde(j, 2) = Cells(i, 8)
    Tab_Cmde(j, 3) = Cells(i, 10)
    Tab_Cmde(j, 4) = Cells(i, 15)
    Tab_Cmde(j, 5) = Cells(i, 17)
    Tab_Cmde(j, 6) = Cells(i, 22)
    Tab_Cmde(j, 7) = Cells(i, 24)
    Tab_Cmde(j, 8) = Cells(i, 29)
    Next

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    J'essaierais comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
        Dim I As Long, J As Long, DernLigne As Long
        Dim Tablo()
        Dim ArrColonnes
     
        DernLigne = Cells(Rows.Count, "A").End(xlUp).Row
        ArrColonnes = Array(1, 3, 8, 10, 15, 17, 22, 24, 29)
        ReDim Tablo(DernLigne, UBound(ArrColonnes))    
     
        For I = 5 To DernLigne
            For J = 0 To UBound(ArrColonnes)
                Tablo(I - 5, J) = Cells(I, ArrColonnes(J))
            Next
        Next

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Responsable des investissements
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des investissements
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Par défaut
    Merci messieurs !!

    Je vous joints le fichier XLSM si jamais vous avez l'envie de checker le code complet

    Pour info, l'idée est de stocker dans le tableau de variables Tab_Cmde certaines données du tableau Sheets(42314515) puis de les écrire dans un autre tableau (pour l'instant sur la même feuille en ligne 97).

    Encore merci

    SuiviInvests.xlsm

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Qu'est-ce que tu veux dans ton tableau, les valeurs des cellules ou les adresses de celles-ci ?

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !

    Citation Envoyé par kevinsa Voir le message
    Avez vous une idée pour rendre ce code plus "compact" ?
    Réalisable en 3 lignes de code avec le B-A-BA d'Excel : la fonction de feuille de calculs INDEX !
    Voir les exemples dans les discussions de ce forum …

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Responsable des investissements
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des investissements
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Par défaut
    Citation Envoyé par parmi Voir le message
    Qu'est-ce que tu veux dans ton tableau, les valeurs des cellules ou les adresses de celles-ci ?
    Bonjour parmi,

    Quelle est la différence ou l'avantage d'une des deux solutions ?

    Merci

    Citation Envoyé par Marc-L Voir le message
    Bonjour !

    Réalisable en 3 lignes de code avec le B-A-BA d'Excel : la fonction de feuille de calculs INDEX !

    Voir les exemples dans les discussions de ce forum …
    Je ne connaissais pas cette fonction ! Vraiment géniale

    En utilisant 2 boucles FOR, j'imagine que je peux remplire mon tableau de variables Tab_Cmde mais un problème ce pose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    For i=0 To (DernLign-5)
    
       For j=0 To NbJalon
    
            Tab_Cmde(i,j) = INDEX(A5:AC9 ; i ; ?)
    
       Next
    
    Next
    Je ne souhaite pas prendre toutes les valeurs du tableau excel, seulement certaines... Typiquement à la suite, pour chaque ligne les colonnes A;C;D;H;J;K;O;Q;R;V;X;Y;AC...

    Voyez-vous l'idée ?

    Kévin

  8. #8
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Non, les boucles sont inutiles ‼‼ Comme pourtant déjà illustré dans des discussions de ce forum,
    pour les colonnes A;C;D;H;J;K;O;Q;R;V;X;Y & AC et en 3 lignes de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        With ActiveSheet.UsedRange.Rows
            VA = Application.Index(.Value, Evaluate("ROW(5:" & .Count & ")"), [{1,3,4,8,10,11,15,17,18,22,24,25,29}])
        End With
    Comme quoi penser d'abord à Excel peut simplifier le code …

    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Responsable des investissements
    Inscrit en
    Août 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des investissements
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 4
    Par défaut
    Merci ! J'avoue ne pas tout comprendre, je vais étudier cette synthax.

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

Discussions similaires

  1. [Tableaux] tableau et variable
    Par tyarak dans le forum Langage
    Réponses: 5
    Dernier message: 18/12/2005, 23h55
  2. [VBA] Mettre un tableau de variable en paramètre
    Par loacast dans le forum Général VBA
    Réponses: 10
    Dernier message: 15/11/2005, 11h28
  3. [VB6] Déclaration d'un tableau avec variable en paramètre.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 23/10/2005, 12h21
  4. Comment obtenir un tableau à taille variable ?
    Par marsupilami34 dans le forum Langage
    Réponses: 6
    Dernier message: 27/06/2005, 15h03
  5. Fonction max d'un tableau de variables...
    Par Romalafrite dans le forum ASP
    Réponses: 7
    Dernier message: 20/07/2004, 10h38

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