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 :

Introduire une variable dans une variable


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Introduire une variable dans une variable
    Bonjour à tous et toutes,

    Ma question peut paraitre bizare, mais je vous explique:

    Je souhaiterais qu'une constante (par exemple a) soit rattachée à une variable (1 ou 2 ou 3...) et ceci égal à une plage de données variables:

    Je vous joins ci dessous la partie de mon programme que je n'arrive pas à programmer, ce sera plus facile à comprendre:


    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
     
    Sub extract_OTC()
     
     
    For j = Worksheets.Count To 1 Step -1
     
     
    With ActiveSheet
     
    If Cells(1, 1) = "OTC Derivatives Report - Equity Swap" Then
     
     
     
     "col"&j& = Cells(15, 100).End(xlToLeft).Column
     
    'C'est ici que ca ne marche pas, je voudrais en fait que le résultat 
    ' de ""Cells(15, 100).End(xlToLeft).Column"" soit col10 par exemple
    'et donc à la fin je supprime cet sheet et je voudrais que donc mon compteur
    'soit de 9 et donc que les données obtenues soient col9...
     
     
    "ligne"&j& = Cells(150, 1).End(xlUp).Row
     
    "plagededonnees"& j& = Range(Cells(15, 1), Cells(("ligne" & j&), "col" & j&))
     
    .Delete
    end if
    end with
     
    next j
     
     
    end sub
    Merci d'avance pour vos réponses!


    Benjamin

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Ce que tu veux faire n'est pas faisable (du moins à ma connaissance)
    Ce que tu peux faire c'est utiliser une variable tableau que tu déclarera en Public dans un module

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public Col(10) as integer
    et utilisera comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Col(j) = Cells(15, 100).End(xlToLeft).Column
    Jérôme

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour, et merci jfontaine pour ta réponse!

    J'ai essayé donc j'ai créé un nouveau module avec mes declarations publiques:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Public Col(10) As Integer
    Public Col(9) As Integer
    Public Col(8) As Integer
    Public Col(7) As Integer
    Public Col(6) As Integer
    Public Col(5) As Integer
    ............
    et donc dans mon module modifié les "col"&j& par col(j)

    cependant il me met toujours un message d'erreur:
    Ambiguous name detected : col

    Que faire?? :s

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    La déclaration de la variable comme stipulé plus haut fait qu'elle à déja 1 dimension de 11 "cases" (une variable tableau étant par défaut de base 0 et commence à 0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim col(10) As Integer
     
    Col(0) = 10
    Col(1) = 20
    ...
    On ne peut pas avoir 2 variables avec le même nom

    A noter que si tu veux que 10 cases de 1 à 10 tu peux soit déclarer comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim col(1 To 10) As Integer
    Soit spécifier que le tableau est de base 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Base 1
    Dim col(10) As Integer
    Jérôme

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Alors deja un grand merci car tout le debut est bon, il ne me reste plus qu'une ligne à comprendre et c'est le paradis^^

    L'erreur que m'indique VBA est object required (error 424)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plagededonnees(j) = Range(Cells(1, 2), Cells(ligne(j), col(j))).Value

    j'ai bien dimensionné plagededonnees(1 to 15) as range
    les lignes et col as integer

    Voila, si jfontaine ou quelqu'un d'autre me trouve la solution je serais le pllus heureux des programmeurs en herbe

    Bonne aprem!!

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Si tu souhaite mettre dans une variable une plage de donnée, alors fais comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MaPlage as Range
    Set MaPlage = Range(Cells(1, 2), Cells(ligne(j), col(j)))
    A noter q'une variable tableau ne peut recevoir q'une valeur ou objet dans chaque index. Dans ton exemple tu essais de mettre x valeur la ou n'y a de la place que pour une
    Jérôme

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Le truc c'est que je souhaiterais donner à Maplage le meme numéro qu'aux ligne et colonnes
    donc Maplage (j), mais avec cet exemple, ce n'est pas possible si? :s

    Merci de ton aide!!

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

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Quelle est la finalité? pour le moment, je ne vois pas ou tu veux aller
    Jérôme

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Le but est en fait de trouver la derniere ligne puis la derniere colonne d'une plage de données.
    Je veux ensuite que cette plage de données correspondent à un range allant de la cellule(1,2) par exemple et allant jusqu'a la derniere ligne et derniere colonne (selectionné ci avant)

    Cependant j'ai plus de 15 onglets de données.
    Donc dans chaque worksheet je veux extraire ces données et plutot que de definir (ce que je sais faire mais tres fastidieu pour 15 worksheets) chaque plage de données à la suite du genre ligne1=... plagededonnée1= ... et de faire copier coller et de changer 1 par 2.... Donc ce que je veux faire c'est une boucle pour que automatiquement le num de ligne, colonnne et de la plagededonnées selectionnée change au fur et à mesure des onglet. La solution que j'ai trouvé c'est de compter le nombre d'onglets du workbook et de faire un step -1 jusqu'a 1 et ainsi nommer mes plages de données avec le numéro du worksheet en gros (si il reste 4 worksheet alors la plage de données de l'onglet selectionné sera 4)


    La finalité de tout ca c'est que je dois selectionner au hasard dans l'ensemble des données 5 lignes. (je sais tout ca pour ca^^)

    Donc la solution que j'avais trouvée c'était de tout recoller à la suite dans un nouveau workbook et apres de faire un random 5 fois sur la plage de donnée complete. (je sais que ce n'est pas necessaire de tout recoller, donc ici egalement si tu as une solution je suis preneur^^)

    J'espere que tu y vois plus clair dans mon projet de projet^^
    Pour le résumer c'est un compilateur de données.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 10
    Points : 5
    Points
    5
    Par défaut WINNER!!
    Ok c'est bon j'ai réussi comme ca:

    Merci beaucoup à toi jfontaine pour ton aide!!

    Bonne journée à tous!
    Code concerné ci dessous

    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
    For j = Worksheets.Count To 1 Step -1
     
     
     
    Workbooks(n).Activate
     
     
     
     
     col(j) = Cells(15, 100).End(xlToLeft).Column
     
     
    ligne(j) = Cells(150, 1).End(xlUp).Row
    a = 1
    ReDim selectiondudoc(1 To ligne(j), 1 To col(j)) As Variant
    For aa = 1 To col(j)
    For a = 1 To ligne(j)
    selectiondudoc(a, aa) = Cells(14 + a, aa)
    Next
    Next aa

  11. #11
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    A noter q'une variable tableau ne peut recevoir q'une valeur ou objet dans chaque index. Dans ton exemple tu essais de mettre x valeur la ou n'y a de la place que pour une
    Il est tout à fait possible de stocker plusieurs valeurs dans chaque dimension d'un tableau (des tableaux dans un tableau en fait) bien évidemment, l'accès devient un petit peu plus compliqué :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim Tbl(1 To 3) As Range
     
    Set Tbl(1) = Range("A1:B10")
    Set Tbl(2) = Range("C1:D10")
    Set Tbl(3) = Range("E1:F10")
     
    'retourne la valeur de la cinquième cellule du range
    '(en partant de gauche à droite et de haut en bas) de
    'la dimension 2 du tableau
    MsgBox Tbl(2)(5)
    Hervé.

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

Discussions similaires

  1. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  2. portée d'une variable dans une fonction dans une méthode
    Par laurentg2003 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/06/2009, 19h05
  3. [POO] dans une classe, appeler une fonction dans une méthode
    Par arnaudperfect dans le forum Langage
    Réponses: 3
    Dernier message: 26/08/2007, 23h04
  4. Envoyer une formulaire dans une page dans une Frame
    Par zooffy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 29/06/2007, 10h13
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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