Aceess/VBA : appel de procédures ByRef
Résolu/Fermé
Towers
-
16 juil. 2008 à 15:29
Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012 - 1 août 2008 à 10:13
Towers Messages postés 37 Date d'inscription samedi 2 février 2008 Statut Membre Dernière intervention 10 mai 2012 - 1 août 2008 à 10:13
A voir également:
- Aceess/VBA : appel de procédures ByRef
- Excel compter cellule couleur sans vba - Guide
- Mkdir vba ✓ - Forum VB / VBA
- L'indice n'appartient pas à la sélection vba ✓ - Forum Programmation
- Autofill vba ✓ - Forum Excel
- Vba range avec variable ✓ - Forum VB / VBA
2 réponses
Towers
Messages postés
37
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
10 mai 2012
3
1 août 2008 à 10:13
1 août 2008 à 10:13
En fait j'ai découvert quelque chose :
si j'ai deux procédures
Alors Test1 va réussir mais pas Test2 (elle ne va pas compiler), simplement parce que j'aurais déclaré str1 et str2 sur la même ligne !!
C'est un bug de VBA ?
si j'ai deux procédures
Public Sub Test1() Dim str1 As String Dim str2 As String Ecrire str1 Ecrire str2 MsgBox str1 & " ; " & str2 End Sub Public Sub Test2() Dim str1, str2 As String Ecrire str1 Ecrire str2 MsgBox str1 & " ; " str2 End Sub Public Sub Ecrire(ByRef str As String) str = "Ca marche" End Sub
Alors Test1 va réussir mais pas Test2 (elle ne va pas compiler), simplement parce que j'aurais déclaré str1 et str2 sur la même ligne !!
C'est un bug de VBA ?
Towers
Messages postés
37
Date d'inscription
samedi 2 février 2008
Statut
Membre
Dernière intervention
10 mai 2012
3
16 juil. 2008 à 15:59
16 juil. 2008 à 15:59
C'est ptêtre paske j'étais pas identifié...
En tous cas j'ai trouvé une solution donc je vous dit comment j'ai fait, mais ça me semble tellement moche que si quelqu'un d'autre à une solution à proposer, je veux bien savoir comment il fait.
En gros je n'ai rien changé à ma fonction principale :
En revanche j'ai modifié la deuxième fonction que j'appelle : je change les paramètres, au lieu d'appeller des Date, j'appelle des Variant et ensuite je les cast en Date.
Ca me semblait si horrible que même avec l'idée en tête, j'ai failli ne pas la tester...
Désormais les deux MsgBox affichent les mêmes valeurs donc ça c'est cool.
Je ne met pas le tag résolu encore paskil me semble qu'une solution sans les variant serait mieux et doit être possible.
En tous cas j'ai trouvé une solution donc je vous dit comment j'ai fait, mais ça me semble tellement moche que si quelqu'un d'autre à une solution à proposer, je veux bien savoir comment il fait.
En gros je n'ai rien changé à ma fonction principale :
Public Function CalculPrincipal(dateTravail As Date) As Double Dim heureDebut, heureFin As date Dim equipe As String Dim numero As Integer equipe = "A" numero = 1 If (Horaires ( dateTravail, equipe, numero, heureDebut, heureFin) = True Then MsgBox "<CalculPrincipal> : Actif : " & heureDebut & " ; " & heureFin Else MsgBox "<CalculPrincipal> : Inactif" End If End Function
En revanche j'ai modifié la deuxième fonction que j'appelle : je change les paramètres, au lieu d'appeller des Date, j'appelle des Variant et ensuite je les cast en Date.
Ca me semblait si horrible que même avec l'idée en tête, j'ai failli ne pas la tester...
Public Function Horaires(ByVal dateTravail As Date, _ ByVal equipe As String, ByVal numEquipes As Integer, _ ByRef hDebut As Variant, ByRef hFin As Variant) As Boolean Dim heureDebut, heureFin as Date heureDebut = (hDebut) heureFin = (hFin) // je récupère heureDebut et heureFin avec une requete SQL qui fonctionne MsgBox heureDebut & " ; " & heureFin End Function
Désormais les deux MsgBox affichent les mêmes valeurs donc ça c'est cool.
Je ne met pas le tag résolu encore paskil me semble qu'une solution sans les variant serait mieux et doit être possible.