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 :

Passage d'un tableau à 2 Dimensions Byref


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Par défaut Passage d'un tableau à 2 Dimensions Byref
    "Bonsoir"
    Je suis en train de développer une application dans laquelle je modifie les données d'un tableau dans une fonction. Mais au retour dans la fonction appelante les modifications faites dans la fonction appelée sont perdues. Or je passe bien le tableau par Ref. Est ce que quelque chose pourrait m'échapper? Conversion de donnée implicite ou autre??? Merci de votre Aide. Si quelqu'un a un exemple concret??

  2. #2
    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
    Bonjour,

    Si tu veux modifier un tableau passé en argument (ByRef est la valeur par défaut dans VB, il n'est donc pas la peine de le préciser), utilise une Sub à la place d'une fonction :
    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 Tableau()
     
        Dim Tablo(1 To 3) As String
     
        Tablo(1) = "Valeur 1"
        Tablo(2) = "Valeur 2"
        Tablo(3) = "Valeur 3"
     
        ModifTableau Tablo, "Valeur 2 modifiée en Valeur 4", 2
     
        MsgBox Tablo(2)
     
    End Sub
     
    Sub ModifTableau(Tbl, Changer, Indice)
     
        Tbl(Indice) = Changer
     
    End Sub
    Hervé.

  3. #3
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    Fonction ou Sub aucune raison que tes modifs ne soient pas prises en compte si le tableau est passé par référence (ByRef). Peut on voir le code incriminé?

    Cordialement.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Par défaut Voila le code.
    Sub appelante (VBAOutlook)
    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
    Sub Creationdeplacement()
    '---------------------------------------------------------------------------------------
    ' Procédure : CreationDeplacement
    ' Auteur    : Renaudm
    ' Date      : 17/12/2012
    '--------------------------------------------------------------------------------------
        Const LigneMois = 2
        Dim StrTab() As String
        Dim StrDepl As String
        Dim StrAnnée As String
        StrMois As String
        Dim StrJour As String
        Dim DateDepl As Date
        'Déclaration des objets
        Dim MonCalendrier As Outlook.AppointmentItem
        Dim MonApply As Outlook.Application
        Dim FeuilleCourante As Worksheet
        'Instance des Objets
        Set MonApply = Outlook.Application    'Instance de l'application
        Set MonCalendrier = MonApply.CreateItem(olAppointmentItem)  'Instance de la nouvelle entrée du calendrier
        ReDim StrTab(366, 2) As String
        searchdate (StrTab)
        StrAnnée = "/2013"
        StrJour = StrTab(0, 0)
        Debug.Print StrTab(0, 0)
        StrDepl = StrJour & "/" & "janvier" & StrAnnée
        Debug.Print StrDepl
        DateDepl = CDate(StrDepl)
        MonCalendrier.Start = DateDepl
        MonCalendrier.AllDayEvent = True
        MonCalendrier.Subject = "Déplacement confirmé"
        MonCalendrier.ReminderSet = False
        MonCalendrier.Categories = "Déplacement confirmé"
        'Affichage de l'entrée du calendrier
        MonCalendrier.Display
        'Sauve le calendrier
    '    MonCalendrier.Save
     
        'Vide des instances
        Set MonCalendrier = Nothing
        Set MonApply = Nothing
     
     
    End Sub
    Et la SUB appelée (VBA Excel)
    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
    'Option Explicit
    Public Sub searchdate(StrTab)
    'Déclarations des variable
    'Déclaration des objets
    Dim ClasseurSource As Workbook
    Dim FeuilleCourante As Worksheet
    Dim MonApply As excel.Application
    'Instancie les objets
    Set MonApply = excel.Application
    'Set ClasseurSource = MonApply.Workbooks.Open("P:\Listes\L7100-3-Planning INT.xls", , True, , "verviers")
     Set ClasseurSource = MonApply.Workbooks.Open("C:\Documents and Settings\renaudm\Mes documents\INT.xls", , True, , "verviers")
     Set FeuilleCourante = ClasseurSource.Worksheets("Jan13-Juin13")
    'Code
    If (FeuilleCourante.Cells(14, 11).Value = 1) Then
        StrTab(0, 0) = FeuilleCourante.Cells(4, 11).Text
        Debug.Print (StrTab(0, 0))
    End If
     Set ClasseurSource = Nothing
     Set FeuilleCourante = Nothing
     
     
     
    End Sub
    Lors du debug.print de StrTab(0,0) de la Sub appelée j'ai 9 qui est la valeur correcte et dans la Sub appelante je n'ai plus rien.

    Autre petite question: comment faire lorsque les cellules sont fusionnées pour prendre la valeur de la cellule fusionnée? je m'explique dans le fichier excell j'aimerai prendre l'information du mois qui est une cellule fusionnée j'aimerai par facilité vu que je vais utiliser une boucle que peut importe la cellule que je choisi dans la zone fusionnée pouvoir recuperer mon information comment dois je faire?? Exemple: Janvier est une cellule fusionnée qui va De B2 à Z2 J'aimerai lorsque je vais lire le texte avoir janvier comme réponse avec comme adresse F2 par exemple hors pour le moment la seule adresse qui fonctionne est B2.
    J'espère avoir été plus ou moins clair.
    Merci beaucoup en tout cas.

  5. #5
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Comme ceci, ça passe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
     
        Dim strTab(366, 2) As String
        MaSub strTab
        Debug.Print strTab(0, 0)    'affiche bien toto
     
    End Sub
     
    Sub MaSub(ByRef strTab() As String)
     
        strTab(0, 0) = "toto"
     
    End Sub

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Décembre 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Décembre 2012
    Messages : 5
    Par défaut
    En effet cela fonctionne.
    Merci bcp.

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

Discussions similaires

  1. Passer tableau multi-dimension ByRef
    Par Chris@Xerox dans le forum VBA Access
    Réponses: 6
    Dernier message: 10/03/2011, 16h07
  2. Réponses: 6
    Dernier message: 06/08/2010, 09h27
  3. [JNI] passage d'un tableau à 2 dimensions à une méthod nativ
    Par mmathieu dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 09/02/2007, 19h52
  4. Passage de tableau à deux dimensions dans une session
    Par keumlebarbare dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 28/11/2006, 19h42
  5. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 15h50

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