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 :

Variable Tableau pour Expert [XL-2010]


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
    Août 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 115
    Par défaut Variable Tableau pour Expert
    Bonjour à tous,
    Chèrs Experts de Array, Je demande votre aide grandement appréciée!
    d'abord j'aimerais dire au débutants qui commencerait à me suggérer des fonctions Excel du genre RechercheV, de garder leurs suggestions .
    Ensuite J'ai déjà fait ce même (à peu près avec des boucles un peu boiteuses) mais celà a rendu le travail trop lourd.
    J'aimerais aussi dire que ceci est seulement un exemple. Mon vrai travail contient des milliers de données (pas loin de 650 000 lignes) c'est ce qui a rendu l'exécution des boucles super longues.

    J'ai scruté ce lien, mais je crois que c'est trop avancé pour mon niveau débutant VBA.

    http://didier-gonard.developpez.com/...s-tableau-vba/

    Voici ce que j'aimerais faire:

    1) dans mon onglet Données, Je parcours mes cellules de la cellules 2 à la fin de la colonne A.

    1.1) ma première cellule a la valeur "A1-A3"
    1.2) je vais dans la mon tableau d'instruction qui se trouve dans l'onglet "Instruction".
    1.3) Je cherche la ligne qui correspond à mon "A1-A3" dans mon Range (Cells(3,1),cells(26,5))
    1.4) c'est la ligne 8 qui correspond à mon "A1-A3" (en Conactenant A et 1 et - et A et 3)
    1.5) je parcours la ligne 8 (qui correspond à la ligne du "A1-A3"),
    1,6) Je prend la valeur de la première cellule qui n'est pas vide (J'en ai 3 dans la ligne 8, la première "3" à la cellule H5, la deuxième "-2" à la cellule N5, et la troisième "-1" à la cellule R5)

    1.6.1) J’additionne ma première valeur que j'ai trouvé (3) à la cellule qui s'appelle Toto dans chacune des feuil1-2-3-4, Le "toto" je l'ai pris à la valeur de la cellule de la ligne 2 correspondante dans mon tableau d,Instruction à la première valeur trouvée dans la ligne 8.
    1.6.2) J’additionne ma deuxième valeur que je trouve (-2) à la cellule qui s'appelle "SASO" dans chacune des feuil1-2-3-4, le "SASO" je l'ai pris à la valeur de la cellule de la ligne 2 correspondante à la deuxième valeur trouvé sur ma ligne 8.
    ...
    ...Etc.

    2.1) ma deuxième cellule a la valeur "A1-B2"
    ...
    ...ETC.

    D'ou ma conclusion, je pense que la meilleure façon de le faire est avec Array!
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert
    Avatar de Igloobel
    Homme Profil pro
    Développeur ERP - VBA et Formateur bureautique
    Inscrit en
    Septembre 2005
    Messages
    1 871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur ERP - VBA et Formateur bureautique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 871
    Billets dans le blog
    1
    Par défaut tableau
    Salut

    j'ai prit le temps de regarder ton fichier joint et j'avoue ne pas tout avoir tout compris. Tu dis
    1.3) Je cherche la ligne qui correspond à mon "A1-A3" dans mon Range (Cells(3,1),cells(26,5))
    1.4) c'est la ligne 8 qui correspond à mon "A1-A2" (en Conactenant A et 1 et - et A et 3)
    à mon avis tu t'es melanger avec ton A1-A3 et A1-A2 se qui nous aide pas à comprendre.

    ceci dis tu n'es pas obliger de passer par array car tu peux utiliser des variables de type tableau
    Exemple 1 tableau a 1 dimention de 7 cases
    Dim (ou public) Tablo1( 1 to 7) ou Tablo1(6) <- là l'indice 0 compte

    1 tableau à 2 dimentions
    Dim " " Tablo2 (1 to 7, 1 to 10)

    Mais je pense que malgres ton travail en memoire pour aller plus vite tes 650 000 c'est trop lourd pour Excel perseonnellement je passerais en access surtout si ta combinaison A1-A3 est unique ton gain de temps sera énorme

    A plus

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 115
    Par défaut
    Tout à fait c'est A1-A3.
    J'aurais aimé essayer Access, le problème c'est que je n'ai y jamais touché donc le temps d'apprendre et de le faire ne rentre pas dans les délais de temps.
    Merci.

  4. #4
    Expert éminent 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
    Par défaut
    J'ai 2 questions par rapport à ton fichier exemple
    1. Est ce que dans ta Feuille Instruction, les colonnes de données sont fixes (de H à S) ou peuvent varier au delà ou en deça de la colonne S?
    2. Est ce que tu as seulement les quatre feuilles Feuil2..Feuil5 ou tu peux avoir plusieurs autres feuilles et si les données de ces feuilles sont toujours en colonnes G-H?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2011
    Messages
    115
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2011
    Messages : 115
    Par défaut
    1. OUi les colonne des données sont fixes.

    2. Je peux en avoir de 1 à n feuilles (donc variables) mais les données dans ces feuilles sont fixes (toujours G-H).

    Merci.

  6. #6
    Expert éminent 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
    Par défaut
    Essaies ce code (testé sur le fichier exemple que tu as joint)
    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
    Option Explicit
    Const Donnees As String = "Données"
    Const Instruction As String = "Instruction"
     
    Sub Traitement()
    Dim NTrai As Long, NData As Long, i As Long, j As Long
    Dim Tmp() As String, Code As String
    Dim Res, Rech, Data, LesDonnees
    Dim Cpt As Double
    Dim n As Integer
     
    Application.ScreenUpdating = False
    With Worksheets(Donnees)
        NTrai = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range("B2:B" & NTrai).ClearContents
        Res = .Range("A2:B" & NTrai)
    End With
     
    With Worksheets(Instruction)
        NData = .Cells(.Rows.Count, 1).End(xlUp).Row
        Rech = .Range("A2:E" & NData)
        Data = .Range("H2:S" & NData)
    End With
     
    ReDim Tmp(1 To NData - 1)
    For i = 1 To NData - 1
        Tmp(i) = Rech(i, 1) & Rech(i, 2) & Rech(i, 3) & Rech(i, 4) & Rech(i, 5)
    Next i
     
    LesDonnees = RempliData(Data)
     
    For j = 1 To NTrai - 1
        Code = Res(j, 1)
        For i = 1 To NData - 1
            If Code = Tmp(i) Then
                For n = 1 To UBound(Data, 2)
                    If Trim(Data(i, n)) <> "" Then Cpt = Cpt + Val(Data(i, n)) + LesDonnees(n, 2)
                Next n
                Exit For
            End If
        Next i
        Res(j, 2) = Cpt
        Cpt = 0
    Next j
    Worksheets(Donnees).Range("A2:B" & NTrai) = Res
    End Sub
     
    '---------------------------------------
    Private Function RempliData(ByVal Tmp)
    Dim i As Integer, j As Integer, LastLig As Integer
    Dim Tb(), Tablo
    Dim Ws As Worksheet
    Dim Pers As String
     
    Application.ScreenUpdating = False
    ReDim Tb(1 To UBound(Tmp, 2), 1 To 2)
    For i = 1 To UBound(Tmp, 2)
        Tb(i, 1) = Tmp(1, i)
    Next i
     
    For Each Ws In ThisWorkbook.Worksheets
        With Ws
            If .Name <> Donnees And .Name <> Instruction Then
                LastLig = .Cells(.Rows.Count, "G").End(xlUp).Row
                If LastLig > 1 Then
                    Tablo = .Range("G2:H" & LastLig)
                    For i = 1 To UBound(Tmp, 2)
                        Pers = Tb(i, 1)
                        For j = 1 To LastLig - 1
                            If Tablo(j, 1) = Pers Then
                                Tb(i, 2) = Tb(i, 2) + Val(Tablo(j, 2))
                                Exit For
                            End If
                        Next j
                    Next i
                End If
            End If
        End With
    Next Ws
    RempliData = Tb
    End Function

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

Discussions similaires

  1. [V6] Variable créée pour filtre sur tableau
    Par kheduch dans le forum Deski
    Réponses: 1
    Dernier message: 04/08/2012, 14h05
  2. [XL-2007] Select obligatoire pour remplir feuille avec variable tableau ?
    Par Carambar dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/03/2011, 15h18
  3. [MySQL] Requête SQL pour récupérer variable tableau
    Par Baka59 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 16/10/2008, 20h06
  4. [VB.NET] Quel objet tableau pour une recherche indexée ???
    Par Kitano dans le forum Windows Forms
    Réponses: 7
    Dernier message: 02/09/2004, 10h38
  5. Feuille de style avec XML (pour expert !)
    Par jer_the_one dans le forum Composants VCL
    Réponses: 8
    Dernier message: 11/08/2004, 09h48

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