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 :

appel de tableau dynamique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Par défaut appel de tableau dynamique
    Bonjour,
    je fais l'appel dans mon code d'un tableau crée dans une autre partie du code..
    l'appel ne fonctionne pas. quelqu'un serait il m'aider?
    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
    Sub testdetail()
     
     
    Dim oDb As DAO.Database
    Dim  i, DerCelC, DerCelL As Variant
    Dim StrSQL As String
    Dim oRst As DAO.Recordset
    .
    .   
    .
     
         DerCelL = DerCelL()
         DerCelC = DerCelC()
        For i = 1 To DerCelL
    MsgBox MonPremierTableau(i)
     
    Next
    ...
    End With
     
    'Libération des objets
    oRst.Close
    oDb.Close
     
    Set oRst = Nothing
    Set oDb = Nothing
     
     
    End Sub
    Sub MonPremierTableau()
        'Définit la taille du tableau et le type de données.
        Dim i As Integer
        Dim MonPremierTableau() As Variant
        ReDim MonPremierTableau(DerCelL())
     
        For i = 1 To DerCelL()
     
        MonPremierTableau(i) = ThisWorkbook.Worksheets(3).Cells(i + 1, 2)
        MsgBox MonPremierTableau(i)
     
        Next i
     
    End Sub
     
     
    Function DerCelL() As Long
     
        DerCelL = Worksheets(3).Range("B65536").End(xlUp).Row - 1
     
    End Function
     
    Function DerCelC() As Long
     
        DerCelC = Worksheets(3).Range("A400").End(xlLeft).Column + 1
     
    End Function

    merci par avance ,


    Will

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Je ne comprends pas bien ce que tu veux faire, mais 2 remarques :
    • Tu devrais éviter de donner le même non à la procédure et au tableau.
    • Comme le tableau est déclaré à l'intérieur de la procédure, sa portée est limité à cette procédure.

    Cordialement,

    PGZ

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    D'accord avec PGZ,

    Tu ne l'appelles pas ton tableau, donc il ne peut pas se déclencher. J'aurai tenté un au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    msgbox MonPremierTableau
    .

    Essaye, on ne sait jamais....

    A+

  4. #4
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Par défaut
    ce que je souhaite faire c'est appeler les éléments du tableau de cette procédure externe dans la procédure testdetail.
    Je pensais le faire sous la forme d'une fonction si possible.

    ==>en fait dans le programme, certains éléments du tableau sont les paramètres d'une autre fonctions que j'appel plusieurs fois avec une boucle for.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 855
    Par défaut
    Je pense que c'est dans l'appel de ta fonction qu'il y a un problème. Tu devrais essayer de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Function sub Monpremiertableau(ByRef ... As Variant, ByRef ... As Integer) As Boolean
    , et/ou un truc dans ce genre....

    J'avais galéré un moment jusqu'à ce que je trouve l'illumination dans la FAQ.

    Ne voyant pas trop ce que tu cherches à faire (et surtout n'étant pas un super pro...), je te conseille de voir les excellents tuto de Silkyroad.

    En tout cas, si tu veux inclure une fonction dans ton code, style "Gosub" dans l'ancêtre 'Basic', c'est avec la fonction que je viens de te donner que tu résoudras ton pb.

    Désolé, je ne suis pas très expérimenté, mais j'essaye juste de te donner quelques idées et/ou pistes pour résoudre ton cas....

    A+

  6. #6
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Par défaut
    Bonjour,
    j'ai effectivement changer la procédure en fonction ce qui est surement judicieux. j'ai mis l'intégralité du code afin que vous comprenez ce que j'essai de faire.


    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
    Sub testdetail()
    
        'La procédure
        '
        
        'Permet de sortir de la procédure et évite la gestion d'erreur (errorHandler), si la macro
        's'est déroulée sans encombre.
    
    Dim oDb As DAO.Database
    Dim LngNouvelleValeur, i, DerCelC, DerCelL As Variant
    Dim StrSQL As String
    Dim oRst As DAO.Recordset
    
        
    
    LngNouvelleValeur = 0
         DerCelL = DerCelL()
     
    With ThisWorkbook.Worksheets(3)
    
    Set oDb = CurrentDb 'DBEngine.Workspaces(0).Databases(0)'DAO.OpenDatabase("C:\Users\Raphaël Saclé\Documents\Base de données1.accdb", False, False)
        DerCelC = DerCelC()
        For i = 1 To DerCelL
    MsgBox MonPremierTableau(i)
    StrSQL = "SELECT node.title FROM Node WHERE (((node.title)=" & MonPremierTableau(i) & "))"
    // j'essaie donc d'avoir cette requete executer pour un nombr eprécis de valeur stocke dans mon tableau
    
    Set oRst = oDb.OpenRecordset(StrSQL, dbOpenSnapshot)
    While Not oRst.EOF
        .Cells(i + 1, DerCelL) = oRst.Fields("title").Value
    oRst.MoveNext
    Wend
    
    Next
    
    End With
     
    'Libération des objets
    oRst.Close
    oDb.Close
    
    Set oRst = Nothing
    Set oDb = Nothing
    
    
    End Sub
    
    Function MonPremierTableau() As String
        'Définit la taille du tableau et le type de données.
        Dim i As Integer
        Dim MonTableau() As String
        ReDim MonTableau(DerCelL())
        
        For i = 1 To DerCelL()
        
        MonTableau(i) = ThisWorkbook.Worksheets(3).Cells(i + 1, 2)
            
        Next i
        MonPremierTableau() = MonTableau()
    End Function

  7. #7
    Expert confirmé
    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
    Par défaut
    Bonsoir tout le monde,

    J'ai un peu de peine à comprendre ce que tu souhaites faire mais voici une idée à creuser avec une fonction qui retourne un tableau (j'ai pas testé ) :
    Il n'est pas nécessaire de préciser "As Variant" car c'est le type par défaut.

    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
     
     
    Sub testdetail()
     
     
        Dim oDb As DAO.Database
        Dim i, DerCelC, DerCelL As Variant
        Dim StrSQL As String
        Dim oRst As DAO.Recordset
        Dim Tbl()
     
        'à mon sens ces fonctions ne servent à rien
        'car les rauges sont codés en "dur"
        'et une fonction doit être plus souple
     
        'DerCelL = DerCelL()
        'DerCelC = DerCelC()
     
        'donc, autant écrire :
        DerCelL = Worksheets(3).Range("B65536").End(xlUp).Row - 1
        DerCelC = Worksheets(3).Range("A400").End(xlLeft).Column + 1
        'mais bon, à voir
     
        'appelle une fonction qui retourne un tableau
        Tbl = MonPremierTableau(DerCelL)
     
        For i = 1 To UBound(Tbl)
     
            MsgBox Tbl(i)
     
        Next i
        ...
        End With
     
        'Libération des objets
        oRst.Close
        oDb.Close
     
        Set oRst = Nothing
        Set oDb = Nothing
     
     
    End Sub
     
    Function MonPremierTableau(Cel As Long) As Variant()
     
        Dim T()
        Dim i As Integer
     
        'je ne cherche pas plus loin car manque d'information
        'mais ça peut donner une idée
     
        For i = 1 To Cel
     
            ReDim Preserve T(1 To i)
            T(i) = ThisWorkbook.Worksheets(3).Cells(i + 1, 2)
     
        Next i
     
        MonPremierTableau = T()
     
    End Function
    Hervé.

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2015, 18h31
  2. Réponses: 1
    Dernier message: 07/05/2014, 14h26
  3. AFFICHER UN TABLEAU DYNAMIQUE
    Par ghassenus dans le forum Langage
    Réponses: 2
    Dernier message: 28/12/2002, 14h19
  4. [Kylix] tableau dynamique
    Par sdoura2 dans le forum EDI
    Réponses: 1
    Dernier message: 31/10/2002, 08h57
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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