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 :

Nommer tableaux avec des variables [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut Nommer tableaux avec des variables
    Bonjour à tous,
    Si je sollicite votre aide aujourd'hui c'est pour savoir s'il été possible de créer des tableaux à partir d'une boucle ?
    J'arrive à avoir Ubound du dernier tableau crée via la variable, mais si je veux avoir la même chose avec le deuxième j'ai une erreur 13 incompatibilité de type, comme si le tableau été vide...
    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
    Sub tabl()
    Dim p As Integer
     
    For p = 1 To 5
    Dim tablo_p() As Integer
    max = Range("a65536").End(xlUp).Row
    val_cherche = Range("c5")
    ReDim tablo_p(1 To max)
     
    For i = 1 To max
        tablo_p(i) = Range("a" & i)
    Next i
    Range("a" & max).Offset(1, 0).Value = "10"
     
    Next p
    MsgBox UBound(tablo_p) 'ok
    MsgBox UBound(tablo_2) 'échec
     
     
    End Sub
    Ou alors j'ai mal fait quelque chose...
    En espérant avoir été assez clair.
    Merci pour votre attention et vos futures réponses

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    D'ou sort ce tablo_2 ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Bonjour jfontaine,
    le tablo_2 c'est le deuxième tableau crée par la boucle.

  4. #4
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Regardes bien ton code, tu verras qu'il n'y a que "tablo_p" comme tableau
    Je pense qu'il te manque une dimension dans ton tableau "tablo_p" pour faire ce que tu souhaites

    Evites de créer une variable dans une boucle

  5. #5
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Oui vu l'erreur qu'il me met, je pense aussi qu'il n'y a que tablo_p de créer,
    mais je pensais que le fait d'avoir mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    For p = 1 To 5
    Dim tablo_p() As Integer
    il aurait créer 5 tableaux.
    J'avais penser à utiliser les dimensions mais dans mon projet je risque d'en avoir trop...

    Pour tu dis qu'il faut éviter de créer une variable dans une boucle ?
    Merci de ton aide

  6. #6
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Les variables se déclarent en début de procedure (pas d'utilité en VBA car le systeme la créera au début de l'execution

    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 tabl()
    Dim p As Integer
    Dim tablo_p() As Integer
     
    For p = 1 To 5
    max = Range("a65536").End(xlUp).Row
    val_cherche = Range("c5")
    ReDim tablo_p(1 To max)
     
    For i = 1 To max
        tablo_p(i) = Range("a" & i)
    Next i
    Range("a" & max).Offset(1, 0).Value = "10"
     
    Next p
    MsgBox UBound(tablo_p) 'ok
    MsgBox UBound(tablo_2) 'échec
     
    End Sub

  7. #7
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Oui ok les variables se mettent au début, mais si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub tabl()
    Dim p As Integer
    Dim tablo_p() As Integer
    il va créer uniquement le tablo_p
    alors que si je le déclare dans la boucle il va faire
    tablo_1
    tablo_2
    tablo_3...
    Sachant que p va prendre successivement ces valeurs non ?
    Enfin du moins c'est ce que je pensais.
    Ou alors il y a une autre solution pour créer un nombre de tableau à partir d'une variable ?

  8. #8
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 137
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tablo_P est une variable à part entière et P fait partie du mot.
    Tu pourrais utiliser une variable tableau Tablo(P)Tablo() est une variable dimensionnée et P est une variable dont la valeur ton cas est incrémentée par la boucle.
    Je te conseille la lecture des tutoriaux Utiliser les variables en VBA Excel, Utiliser les variables tableaux en VBA Excel et surtout Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel
    [EDIT]
    A la relecture de ton post, je constate qu'il te faut une variable tableau à deux dimensions Tablo_P(P ,I) alimentée par les variable de boucles P et I ou plus simple Tablo(P, I)
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  9. #9
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Bonjour Philippe,
    J'ai déjà lu les tutos qui sont très bien fait d'ailleurs, mais je n'ai pas trouvé ce que je souhaite.
    Je vais essayer de reformuler.
    J'aimerais créer 5 tableaux sans avoir à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    dim tablo_1() as integer
    dim tablo_2() as integer
    dim tablo_3() as integer
    dim tablo_4() as integer
    dim tablo_5() as integer
    D'ou le passage par une boucles.

    Peut-être qu'il n'y a pas de solutions...

  10. #10
    Membre Expert
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Par défaut nommer tableaux avec des variables
    bonjour,

    peut-être ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim truc As Variant
    For c = 1 To 5
      truc = "dim tablo_" & c & "()"
      Cells(c, 1) = truc ' uniquement pour vérifier si le résultat attendu est bon
    Next c
    cordialement

  11. #11
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    J'aimerais créer 5 tableaux sans avoir à écrire
    C'est pour faire cela que l'on utilise des tableaux à 2 dimensions

    Pour info, si tu veux mettre tout une plage de cellules dans un tableau sans passer par des boucles imbriquées

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim str() As Variant
    str = Range("A1:B8")

    nibledispo : Faire une déclaration de variable en passant par une variable string !!
    Tu as déjà réussis à faire fonctionner ça ?

  12. #12
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Merci à vous pour vos réponses je suis passé avec un tableau à deux dimensions.
    Mais j'ai une autre question : Comment je peux savoir le ubound de cette dimensions exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ReDim tablo_2(1 To max, 1 To max)
            For p = 1 To max
                For i = p To max
                tablo_2(p, i) = tablo_1(i)
     
                Next i
     
            Next p
    Comment obtient-on C'est à dire le ubound de tablo_2(3,x) ? Parce que la il mets le ubound de la 3ème dimensions qui n'existe pas.

    J'avoue que c'est pas hyper clair, si besoin je peux vous mettre un dossier en pièce jointes.

    Merci en tout cas de m'aider

  13. #13
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Ton tableau ne comporte que 2 dimensions, c'est normal qu'il plante à la 3 eme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim tablo_2(1 To max, 1 To max)
    pour 3 dimensions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim tablo_2(1 To max, 1 To max, 1 To Max)

  14. #14
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Oui bien entendu que je n'ai que 2 dimensions.
    Si on se représente le tableaux avec le graphique de Didier Gonard
    On à des lignes pour la dimension 1 et des colonnes pour la dimension 2
    Ma question est pour la colonne 4 quelle est la ligne la plus grande ?

  15. #15
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Un tableau à 2 dimensiosn se modélise par un rectangle avec des cases.
    Toutes les colonnes ont la même taille.
    Si tu veux chercher la dernière valeur, il te faut boucler et chercher la première valeur vide

    n'aurais tu pas intérêt a utiliser une variable Range pour faire tes traitements?

  16. #16
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Ok d'accord.
    Pour être honnete avec toi, je ne sais pas trop quelle chemin prendre, je connais juste la destination :
    Je dois faire l'équivalence d'un lettrage comptable, mais sans passer par le logiciel de compta, car j'ai des comptes clients différents.
    Ex: Un centre de paiement nous règles les factures de 4 agences, donc j'extrait le grand livre des clients du groupe et après je cherche quelles factures peuvent correspondre aux virements...

    Donc j'essaye plusieurs techniques mais c'est pas trop concluant pour le moment.
    Si tu as une idée je suis prenneur
    Merci

  17. #17
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Tu devrais faire la recherche directement dans la feuille.
    Regardes l'instruction Find de l'objet Range

  18. #18
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Le problème c'est que c'est la somme de plusieurs factures et avoir donc le find ne marche pas.
    Je ne pense pas être trop loin de la solution mais je n'y suis pas encore.
    Merci en tout cas de ton aide

  19. #19
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 137
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 137
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Tu dois faire quoi exactement ?
    Faire la somme des payements par clients dont les codes se trouvent sur une feuille Excel ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  20. #20
    Membre confirmé
    Homme Profil pro
    Comptable
    Inscrit en
    Décembre 2012
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Comptable
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2012
    Messages : 57
    Par défaut
    Si tu veux j'ai un centre de paiement qui me fait un virement de 14 352€ pour le groupe Toto.
    Dans ce groupe j'ai l'agence de Quimper qui à 2 factures non payés (1200 et 500€), l'agence de Brest 3 factures non payés (352 , 12000, 500€) et Lorient une facture de 800€.
    Comment trouver rapidement quelle facture ont été payés par ce virement ?
    Sachant que je peux également avoir des avoirs pour ces clients.
    L'idéal serait d'avoir les cellules selectionner en couleur.

    Sachant également que le virement ne correspond pas forcement à la somme identique des factures (écart des quelques centimes)

    Voila exactement la problématique.
    Et voila ou j'en suis rendu :
    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
    Sub grt()
    Dim tablo_1() As Double
    Dim tablo_2() As Double
    Dim tablo_3() As String
     
    max = Range("a65536").End(xlUp).Row
     
    val_cherche = Range("c5")
    ReDim tablo_1(1 To max)
    ReDim tablo_3(1 To max, 1 To max)
    For i = 1 To max
        tablo_1(i) = Range("a" & i)
    Next i
    'choisis toutes les valeurs de tablo_1 les unes après les autres
    For Index = 1 To UBound(tablo_1)
            v = Index
     
            ReDim tablo_2(1 To max, 1 To max)
            For p = 1 To max
                For i = p To max
                tablo_2(p, i) = tablo_1(i)
     
                Next i
     
            Next p
            For i = 1 To max
           Cells(i, 11) = tablo_2(5, i)
           Next i
        l = 0
        'MsgBox tablo_2(5, 5)
       ' MsgBox UBound(tablo_2, 5)
        'MsgBox tablo_2(5, 2)
       For niveau = 2 To max
            For i = 1 To UBound(tablo_2, 2)
                tablo_3(1, i) = tablo_1(i) + tablo_2(niveau, i)
                tablo_3(2, i) = "tablo_1 " & i & " tablo_2 " & niveau
            Next i
        Next niveau
     MsgBox tablo_3(2, 2) '& " - " & tablo_3(2, 2)
    Next Index
    Cells(25, 2) = tablo_3
    End Sub
    Si quelqu'un à une idée...
    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/11/2005, 12h03
  2. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  3. paramétrer ADOConnection avec des variables
    Par ouckileou dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/04/2004, 08h11
  4. UPDATE avec des variables Delphi ...
    Par Kokito dans le forum Bases de données
    Réponses: 3
    Dernier message: 08/03/2004, 22h35
  5. Réponses: 6
    Dernier message: 04/04/2003, 15h28

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