Equivalent des adresses et pointeurs en VBA
Dernière réponse : dans Programmation
Re-bonjour
Décidément j'ai du mal avec VBA ( habitué a developpé en C/C++ ne connaissant VBA que depuis hier), je voudrais en faites changer la valeur d'une variable via une methode. Pour se faire j'aurais besoin de connaitre les équivalents de * (pointeur) et &(adresse) (du C/C++) pour le VBA.Malgré des recherches googles... avec VBA , adresse et variable ..
Pour résumer ma fonction,
Jai une chaine de caractere fct comportant 24 caracteres.
Le but de la methode du module de classe est de reprendre fct, de comparer son contenu avec un tableau( initialiser dans la classe ) et de modifier le contenu de fct afin de pouvoir le reutiliser dans mon module
Voici la partie concerné, en local sans faire appel a une methode/objet , elle marche.
Décidément j'ai du mal avec VBA ( habitué a developpé en C/C++ ne connaissant VBA que depuis hier), je voudrais en faites changer la valeur d'une variable via une methode. Pour se faire j'aurais besoin de connaitre les équivalents de * (pointeur) et &(adresse) (du C/C++) pour le VBA.Malgré des recherches googles... avec VBA , adresse et variable ..
Pour résumer ma fonction,
Jai une chaine de caractere fct comportant 24 caracteres.
Le but de la methode du module de classe est de reprendre fct, de comparer son contenu avec un tableau( initialiser dans la classe ) et de modifier le contenu de fct afin de pouvoir le reutiliser dans mon module
Voici la partie concerné, en local sans faire appel a une methode/objet , elle marche.
Public Function check_fct(fct As String)
'methode permettant de donner le nom complet de la fonction
Dim j As Integer 'iterateur pour account_tab
Dim fct_comp As String 'chaine de caracteres a comparer avec fct
j = 0
fct_comp = ""
Do
fct_comp = Left(Account_tab(j), 24) 'On met les 24 premiers caracteres de la ligne du tableau dans fct_comp
If (fct = fct_comp) Then 'Si fct est equivalent a fct comp alors
fct = Account_tab(j) 'fct = a la chaine de caracteres contenu dans la ligne du tableau account_tab
j = 15 'on met directement j a 16 pour sortir de la boucle
End If
j = j + 1 'on incremente j de 1
Loop Until (j > 15) 'revient a do si j est strictement inferieur a 16
End Function
Autres pages sur : equivalent adresses pointeurs vba
Lassé par la pub ? Créez un compte
Probleme 1
Hmm apres un bref coup do'eil sur ces mots-clefs, si j'ai bien compris si je veux modifier une variable passer en parametres je dois lui mettre "by ref" et si je ne veux pas qu'elle soit modifier je dois lui mettre "byval". Cependant il est dit aussi que si rien n'est ecrit, alors le parametre est compté comme passé "by ref". Hors je veux tenir comtpe de sa valeur et le modifier.
Probleme2
Un peu a part mais ca m'evitera de recréer un topic:
J'ai comme tu me l'a fait remarquer dans le topic précédent que j'avais oublié de mettre new afin d'instancier mon objet ap.
Cependant je ne comprend pas pourquoio je ne puis utiliser ma méthode seul.
Il s'avere que je veuille passer en parametres ces variables ci ( corectement défini en theorie dans ma classe) afin d'en modifier certaines. Le pb etant que le debugger me dit la chose suivante :
"Erreur de compilation" Attendu: =
Tout début du code:
Hmm apres un bref coup do'eil sur ces mots-clefs, si j'ai bien compris si je veux modifier une variable passer en parametres je dois lui mettre "by ref" et si je ne veux pas qu'elle soit modifier je dois lui mettre "byval". Cependant il est dit aussi que si rien n'est ecrit, alors le parametre est compté comme passé "by ref". Hors je veux tenir comtpe de sa valeur et le modifier.
Probleme2
Un peu a part mais ca m'evitera de recréer un topic:
J'ai comme tu me l'a fait remarquer dans le topic précédent que j'avais oublié de mettre new afin d'instancier mon objet ap.
Cependant je ne comprend pas pourquoio je ne puis utiliser ma méthode seul.
Sub accounts_management()
'Variables et initialisation de celles-ci
Dim name As String 'variable contenant le nom de l'utilisateur
Dim code As String 'variable contenant le code
Dim fct As String 'variable contenant la fonction
Dim i As Integer 'variable servant pr la localisation des lignes
name = "NameNULL"
code = "CodeNULL"
fct = "fctNULL"
i = 1
''''''''''''''''''''''
'Ouverture du fichier'
''''''''''''''''''''''
'NB; Regardez si parametrable en debut de fichier comme C++
Workbooks.Open Filename:="C:\Documents and Settings\gauthig\My Documents\142G 14062007 SOD output.xls" ' Note , placer le fichier a traiter exactement a l'emplacement indiqué
''''''''''''''''''''''''''''
''Traitement du texte brut''
''''''''''''''''''''''''''''
' parcourir les lignes tant que pas atteint la fin du feuillet
Sheets(1).Select 'selection du feuillet 1
'While Not Range("A" & i).Value = ""
fct = Left(Range("A" & i), 3)
If (fct = "142") Then
fct = Mid(Range("A" & i), 14, 24)
MsgBox fct
'instance de l'objet account
Dim ap As New Account
Dim fct2 As String
fct2 = "bisounours"
'methode check_fct
ap.check_fct (fct) 'bug raison inconnu
'methode check_code
fct = "AAAAA"
ap.check_code(i,code,fct)
'methode check_tab
End If
i = i + 1
'Wend
''''''''''''''''''''''
' Fermeture fichier '
''''''''''''''''''''''
ActiveWindow.Close
End Sub
Il s'avere que je veuille passer en parametres ces variables ci ( corectement défini en theorie dans ma classe) afin d'en modifier certaines. Le pb etant que le debugger me dit la chose suivante :
"Erreur de compilation" Attendu: =
Tout début du code:
Public Function check_code(i As Integer, code As String, fct As String)
Premier point. Ben, oui, tu sais donc lire un manuel. C'est bien.
Moi ausi. Mais comme je n'ai confiance qu'en ce que je vois, je fais :
Et je le constate de mes yeux-vu !
Second point. Et pourquoi ne pas créer plusieurs topics !?
Sinon, pour en revenir au VB, Il ne me semble pas que ce langage connaisse la notion de méthode de classe.
Donc une méthode doit être exécutée relativement à un objet instancié.
Une procédure (sub) en VB n'utilise pas de parenthèses pour présenter ces paramètres.
Une fonction (function) en VB renvoie toujours un résultat. L'interpréteur exige une variable pour l'y stocker.
Moi ausi. Mais comme je n'ai confiance qu'en ce que je vois, je fais :
Sub plus_un(i As Integer)
i = i + 1
End Sub
Sub test()
Dim i As Integer
i = 0
MsgBox i
plus_un i
MsgBox i
End Sub
Et je le constate de mes yeux-vu !
Second point. Et pourquoi ne pas créer plusieurs topics !?
Sinon, pour en revenir au VB, Il ne me semble pas que ce langage connaisse la notion de méthode de classe.
Donc une méthode doit être exécutée relativement à un objet instancié.
Une procédure (sub) en VB n'utilise pas de parenthèses pour présenter ces paramètres.
Une fonction (function) en VB renvoie toujours un résultat. L'interpréteur exige une variable pour l'y stocker.
Alors le pb est résolut, le module de classe n'était tout simplement pas adapté a ce que je cherchais a faire et jai tout developpé comme dans ton exemple dans des modules ce qui m'a nettement facilité la vie.
Cad ( pr ceux qui tomberait sur le topic et cherchant une reponse )
( c'est juste un exemple sur la mise en forme)
Et dernier point pour ceux qui chercherait un equivalent d'adresse, on m'a dit via msn qu'il fallait utiliser un long pour employer une adresse.
Merci Zeb de m'avoir éclairer dans la pénombre du VBA =)
Cad ( pr ceux qui tomberait sur le topic et cherchant une reponse )
( c'est juste un exemple sur la mise en forme)
Public account_tab as string 'variable globale
Sub initialize(account_tab as string)
'initialisation du tableau
End sub
Sub check_fct( fct as string)
'code
End sub
sub main()
Dim fct as string
initialize(account_tab)
fct=""
check_fct(fct)
end sub
Et dernier point pour ceux qui chercherait un equivalent d'adresse, on m'a dit via msn qu'il fallait utiliser un long pour employer une adresse.
Merci Zeb de m'avoir éclairer dans la pénombre du VBA =)
NONONONONONON !
Lignes 13 et 14, tu mets des parenthèses autour des paramètres. Il ne faut pas. Sauf au sens mathématique, pour préciser la priorité entre deux opérations (arithmétique, booléenne, etc.)
Exemple :
On@MSN ne dit pas que des conneries, mais ne dit pas tout. Le passage par référence est implicite en VB comme vu plus haut.
Pour interfacer du VB avec des fonctions écrites en C (DLL, API) on utilise en général le type Long, c'est vrai, là où la fonction attend une adresse, puisqu'un Long fait 32 bits, comme une adresse.
Lignes 13 et 14, tu mets des parenthèses autour des paramètres. Il ne faut pas. Sauf au sens mathématique, pour préciser la priorité entre deux opérations (arithmétique, booléenne, etc.)
Exemple :
Sub addition(param1 As Integer, param2 As Integer)
MsgBox param1 + param2
End sub
Sub main()
addition (1, 2) ' // <-- Erreur
addition 1, 2 ' // <-- Ok, ça fait 3
addition (1+3), 2 ' // <-- Ok, ça fait 6
End Sub
On@MSN ne dit pas que des conneries, mais ne dit pas tout. Le passage par référence est implicite en VB comme vu plus haut.
Pour interfacer du VB avec des fonctions écrites en C (DLL, API) on utilise en général le type Long, c'est vrai, là où la fonction attend une adresse, puisqu'un Long fait 32 bits, comme une adresse.
Lassé par la pub ? Créez un compte
- Contenus similaires :