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 :

Quelle est la limite d'une variable tableau


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut Quelle est la limite d'une variable tableau
    Bonjour,

    Je souhaite intégrer une fichier CSV dans une variable tableau afin de pouvoir pointer rapidement sur l'enregistrement voulu.

    Exemple :
    NO CLI NOM PRENOM CPSTL VILLE
    Fichier CSV chaque enregistrement est comme ceci 12345678;DURAND;ALEXANDRE;75000;PARIS
    je déclare 4 variables tableau nom, prenom, cpstl et ville
    l'index du tableau est le numéro de client.

    le problème est la taille du tableau

    Par la suite lors d'une demande d'information d'un numéro de client la réponse est immédiate.

    pour info aussi dans le fichier CSV il y a 204.342 enregistrements.

    Dans l'attente de lecture

    Lionel COUVRAT

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    fais ce test et tu le sauras des que ça bug place le curseur de la sourie sur t et tu liras sa valeur!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    dim tb()
    t=0
    do
    redim tb(t)
    t=t+1
    loop

  3. #3
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Re bonjour,

    je viens de faire le test avec ton code
    au lieu de commencer à 0 j'ai commencer plus loin
    alors résultats :

    50000000 trop grand (erreur exécution 7, mémoire insuffisante)
    40000000 ca passe

    je ne peux donc pas utiliser un tableau car j'ai des no client supérieur à la limite

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tu peux utiliser un dictionnaire complémentaire qui contient :

    - en item : l'indice du client dans ton tableau client
    - en clé : le numéro de client

    ainsi, tu n'as plus besoin d'avoir un tableau de client qui contient autant d'éléments que le numéro de client maximal

    un exemple réalisé sur excel :

    - les colonnes vont de A à E
    - j'ai crée 1 millions de clients fictifs
    - la création du dictionnaire à 1 millions d'entrées prend environ 1 minutes
    - ensuite, son interrogation est instantanée


    pour générer le dictionnaire, il faut lancer la procédure CreaDictionnaire
    ensuite, on peut utiliser la procédure Cherche pour récupérer les informations voulues

    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
    Public MonDico
    Public TabClient
     
    Sub CreaDictionnaire()
     
    ' dictionnaire
    Set MonDico = CreateObject("Scripting.dictionary")
     
    ' tableau avec les clients
    TabClient = Range(Cells(2, 1), Cells(Rows.Count, 5).End(xlUp))
     
    ' pour chaque ligne du tableau (= chaque client)
    For i = LBound(TabClient, 1) To UBound(TabClient, 1)
        ' on crée une entrée dans le dictionnaire
        ' clé = numéro du client
        ' item = index du tableau client
        MonDico.Add TabClient(i, 1), i
    Next i
     
    MsgBox "Dictionnaire crée"
     
    End Sub
     
    Sub Cherche()
     
    ' interrogation de la troisième colonne de mon client 294420
    ' (= son prénom)
    MsgBox TabClient(MonDico(294420), 3)
     
    End Sub
    Ps : pour utiliser un dictionnaire, il faut cocher la référence "Microsoft Scripting Runtime" dans ton VBE si ce n'est pas déjà fait

  5. #5
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
    serveur = "C:\MyTest\"
    GenereCSTRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & serveur & ";Extended Properties=""TEXT;HDR=YES;FMT=Delimited(;)"""
     Set cnx = CreateObject("adodb.connection")
     cnx.Open GenereCSTRING
     Set RS = CreateObject("adodb.recordset")
     RS.Open "select * from [Classeur1.csv];", cnx
     ActiveCell.CopyFromRecordset RS
     RS.Close
     cnx.Close
    End Sub

  6. #6
    Membre très actif Avatar de lionel86500
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

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

    Informations forums :
    Inscription : Juin 2013
    Messages : 144
    Par défaut
    Bonjour joe.levrai

    Quelle idée excellente de créer un dictionnaire.
    chose que je ne connais pas, il va falloir que je me penche sur le sujet
    car en fait je dois mémoriser 5 fichiers CSV avec beaucoup d'enregistrement
    qui on en commun un numéro de client.

    Merci



    Bonjour rdurupt

    Je vois l'idée général de ton code, c'est une connexion au fichier CSV qui me plait assez
    mais est ce que je peut faire une recherche et ressortir des infos.
    Comme je l'ai dis a joe.levrai j'ai 5 fichiers CSV à mémoriser.
    cette idée est pas mal car elle travaille directement sur le fichier CSV

    Dans l'attente de te lire

    Lionel COUVRAT

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

Discussions similaires

  1. Quelle est la portée d'une variable dans une page ASP ?
    Par sauceaupistou dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2007, 18h16
  2. [Requete][Where] Quelle est l'utilité d'une clause: 1=1 ?
    Par alpachico dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/12/2005, 18h40
  3. Réponses: 2
    Dernier message: 25/05/2005, 21h34
  4. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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