Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2011, 13h47   #1
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Par défaut fonction renvoyant un tableau

Bonjour,
Depuis une procédure (appelée "traitement"), j'aimerais appeler une fonction (appelée "Fiches_associees") pour récupérer un tableau de chaines de caractères.
Ceci bloque à la compilation, le problème étant dans la ligne :
fichesassociees = Fiches_associees()

Le message d'erreur est : impossible d'affecter à un tableau

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function Fiches_associees() As String
 
Fiches_associees = Array(1, 2)
 
End Function
 
 
 
 
Sub traitement(i As Integer)
Dim fiche As String
Dim fichesassociees() As String
 
fiche = Worksheets("tabsynth").Cells(i, 1).Value
 
fichesassociees = Fiches_associees()
 
End Sub
Quelqu'un aurait-il une solution ?
Merci d'avance,

Aurore
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2011, 13h59   #2
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 240
Points : 7 240
Bonjour,

Comme cela ca fonctionne
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Function Fiches_associees() As String()
 
Fiches_associees = Split("1,2", ",")
 
End Function
 
 
Sub traitement(i As Integer)
 
Dim fiche As String
Dim fichesassociees As Variant
 
i = 1
fiche = Worksheets("Feuil29").Cells(i, 1).Value
 
fichesassociees = Fiches_associees()
 
MsgBox fichesassociees(0)
 
End Sub
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2012, 10h04   #3
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Bonjour,

Je vous remercie de votre réponse.
Malheureusement, dans mon message précédent, j'avais simplifié mon code afin de mettre en évidence le problème, et je ne parviens à adapter votre réponse à ma macro.
Je me permets donc d'insérer plus bas le code entier




Code :
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
Option Explicit
 
Dim dejatraite() As String
Const colfichesassociees As Integer = 14
Const ltabsynth As Integer = 7
Dim lastligne As Integer
 
 
Function Fiches_associees(i As Integer) As String
'cette procédure va chercher les fiches associées dans une feuille : dans la colonne "colfichesassociees" se trouve des numéros,
'si le numéro "fiche" apparait dans cette colonne (dans la cellule (k, colfichesassociees)) alors j'écris le contenu de la cellule (k, 1) dans le tableau Fiches_associees
 
Dim fiche As String
Dim k As Integer
Dim nbfichesass As Integer
 
fiche = Worksheets("tabsynth").Cells(i, 1).Value
nbfichesass = 0
ReDim Fiches_associees(nbfichesass)
 
 
For k = ltabsynth To lastligne
'MsgBox "je suis dans la ligne " & k
'je cherche si la ligne courante est associée à fiche
 
If Worksheets("tabsynth").Cells(k, colfichesassociees) Like "(" & fiche & ")" Then
    MsgBox "la fiche " & fiche & " est associée à la ligne " & k
    nbfichesass = nbfichesass + 1
    ReDim Preserve Fiches_associees(nbfichesass)
    Fiches_associees(nbfichesass - 1) = Worksheets("tabsynth").Cells(k, 1).Value 'la dernière cellule reste vide
End If
Next
 
 
 
End Function
 
Sub traitement(i As Integer)
 
Dim fiche As String
Dim k As Integer
Dim fichesassociees As Variant
 
'fiche = Worksheets("tabsynth").Cells(i, 1).Value
'MsgBox "je traite la fiche " & fiche
 
fichesassociees = Fiches_associees(i)
MsgBox fichesassociees(0) & fichesassociees(1)
 
'MsgBox "les fiches associées à " & fiche & " sont " & fichesassociees(0) & "et autres..."
 
End Sub
Sub creation_scenarios()
 
 
Dim i As Integer, test As Integer, nbdejatraite As Integer, k As Integer, j As Integer
Dim fiche As String
Dim cel As Range
 
nbdejatraite = 0
ReDim dejatraite(nbdejatraite)
 
'je cherche de nombre de ligne de tabsynth
i = ltabsynth
Set cel = Worksheets("tabsynth").Cells(i, 1)
Do While Not (IsEmpty(cel))
    i = i + 1
    Set cel = Worksheets("tabsynth").Cells(i, 1)
Loop
lastligne = i - 1
 
'pour chaque ligne, je fais le traitement
For i = ltabsynth To lastligne
fiche = Worksheets("tabsynth").Cells(i, 1).Value
test = 0
'si la fiche est deja traitée, on fait rien, sinon, on la traite et on l'incrit dans le tabelau des elements traités
 
    For k = 0 To UBound(dejatraite)
        If dejatraite(k) = fiche Then test = 1
    Next
    If test = 0 Then Call traitement(i)
    'puis je dis que la fiche fiche vient d'être traitée
    nbdejatraite = nbdejatraite + 1
    ReDim Preserve dejatraite(nbdejatraite)
    dejatraite(nbdejatraite - 1) = fiche
Next
 
'MsgBox "j'affiche le tableau des fiches traitées"
'For j = 0 To UBound(dejatraite)
'        MsgBox dejatraite(j)
'Next j
 
 
End Sub

Le problème apparait maintenant à la ligne 19 (le message étant "tableau attendu". Cela vient peut-être du paramètre i que je gère mal ?

En vous souhaitant mes meilleurs voeux, et vous remerciant à l'avance,

Aurore
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 11h45   #4
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 240
Points : 7 240
dans ton code, i est un paramètre d'entrée. (pas de lien avec le tableau de retour)
Par contre, tu déclares le retour d'un stringet non pas d'une tableau de type sting

Essais en modifiant ta déclaration comme cela
Code :
Function Fiches_associees(i As Integer) As String()
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 12h19   #5
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Merci de ta réponse, mais il y a encore un problème dans le code.
(A la ligne 30 : un appel de fonction dans la partie gauche de l'affectation doit renvoyer variant ou object)

J'ai pensé que ça pouvait venir du type d'éléments contenu dans le tableau : Variant dans fichesassociees et String dans Fiches_associees, mais rien n'y fait... Même en déclarant :
Code :
Function Fiches_associees(i As Integer) As Variant()
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/01/2012, 14h13   #6
Expert Confirmé Sénior
 
Avatar de jfontaine
 
Homme Jérôme FONTAINE
Contrôleur de Gestion
Inscription : juin 2006
Messages : 3 920
Détails du profil
Informations personnelles :
Nom : Homme Jérôme FONTAINE
Âge : 38
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Contrôleur de Gestion

Informations forums :
Inscription : juin 2006
Messages : 3 920
Points : 7 240
Points : 7 240
a essayer
Code :
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
Function Fiches_associees(i As Integer) As String()
 
'cette procédure va chercher les fiches associées dans une feuille : dans la colonne "colfichesassociees" se trouve des numéros,
'si le numéro "fiche" apparait dans cette colonne (dans la cellule (k, colfichesassociees)) alors j'écris le contenu de la cellule (k, 1) dans le tableau Fiches_associees
 
Dim fiche As String
Dim k As Integer
Dim nbfichesass As Integer
Dim Fiches() As String
 
fiche = Worksheets("tabsynth").Cells(i, 1).Value
nbfichesass = 0
 
 
For k = 1 To 5
If Worksheets("tabsynth").Cells(k, colfichesassociees) Like "(" & fiche & ")" Then
    MsgBox "la fiche " & fiche & " est associée à la ligne " & k
    nbfichesass = nbfichesass + 1
    ReDim Preserve Fiches(nbfichesass)
    Fiches(nbfichesass - 1) = Worksheets("tabsynth").Cells(k, 1).Value 'la dernière cellule reste vide
End if
Next
 
Fiches_associees = Fiches
 
End Function
__________________
Jérôme

Citation:
"Ils ne savaient pas que c'était impossible, alors ils l'ont fait" - Marc Twain
Si la réponse répond à votre besoin, votre vote nous encouragera.
Dans le cas ou la réponse mérite, à vos yeux, un , nous faire partager la raison de ce vote, pourrait nous permettre de nous améliorer.
jfontaine est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/01/2012, 15h05   #7
Invité régulier
 
Inscription : janvier 2011
Messages : 18
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 18
Points : 5
Points : 5
Merci, cela fonctionne (à l'exception que les tableaux vides sortent une erreur quand je veux les lire). J'ai donc légèrement modifier le code et cela donne :

Code :
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
Function Fiches_associees(i As Integer) As String()
 
'cette procédure va chercher les fiches associées dans une feuille : dans la colonne "colfichesassociees" se trouve des numéros,
'si le numéro "fiche" apparait dans cette colonne (dans la cellule (k, colfichesassociees)) alors j'écris le numero de fiche associée (contenu dans la cellule (k, 1)) dans le tableau Fiches_associees
 
Dim fiche As String
Dim k As Integer
Dim nbfichesass As Integer
Dim Fiches() As String
 
fiche = Worksheets("tabsynth").Cells(i, 1).Value
nbfichesass = 0
ReDim Preserve Fiches(nbfichesass)
 
For k = 7 To 17
If Worksheets("tabsynth").Cells(k, colfichesassociees) Like "(" & fiche & ")" Then
    nbfichesass = nbfichesass + 1
    ReDim Preserve Fiches(nbfichesass)
    Fiches(nbfichesass - 1) = Worksheets("tabsynth").Cells(k, 1).Value 'la dernière cellule reste vide
End If
Next
 
Fiches_associees = Fiches
 
End Function
 
Sub traitement(i As Integer)
 
Dim fiche As String
Dim k As Integer
Dim fichesassociees As Variant
Dim VerifTab As Variant
 
fiche = Worksheets("tabsynth").Cells(i, 1).Value
MsgBox "je traite la fiche " & fiche
 
fichesassociees = Fiches_associees(i)
 
VerifTab = UBound(fichesassociees)
If VerifTab = 0 Then
    MsgBox "La fiche " & fiche & " n'a pas de fiche associée"
Else
    MsgBox "La fiche " & fichesassociees(0) & " est associée à la fiche " & fiche
End If
 
End Sub
Merci beaucoup !

Aurore
Aurore24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h28.


 
 
 
 
Partenaires

Hébergement Web