Instruction comme paramètres pour une Sub
Résolu/Fermé
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
-
Modifié par Orbital38 le 5/08/2015 à 22:31
Orbital38 Messages postés 68 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 31 octobre 2020 - 6 août 2015 à 16:52
Orbital38 Messages postés 68 Date d'inscription dimanche 4 janvier 2015 Statut Membre Dernière intervention 31 octobre 2020 - 6 août 2015 à 16:52
A voir également:
- Instruction comme paramètres pour une Sub
- Ouvrir paramètres - Guide
- Paramètres de confidentialité - Guide
- Paramètres dns - Guide
- Les paramètres d'affichage nvidia ne sont pas disponibles ✓ - Forum Carte graphique
2 réponses
NHenry
Messages postés
15163
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
1 novembre 2024
345
5 août 2015 à 22:39
5 août 2015 à 22:39
Tu code en quoi ? VB6, VBA, VB.NET ?
Il me semble que quel VB.NET permet l'appel de code via paramètre (délégué).
Il me semble que quel VB.NET permet l'appel de code via paramètre (délégué).
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
6 août 2015 à 08:56
6 août 2015 à 08:56
Bonjour,
Plusieurs petites choses...
1- ta déclaration de variable :
ainsi faite, déclare fichier, groupe_bouton, underscore, nom_macro As Variant.
Il faut, en VBA, typer chaque variable :
2- Si tu veux passer "blablabla" dans la variable fichier, tu peux utiliser une Sub paramétrée. Mais, à ce moment là, il ne faut pas déclarer de variable fichier par Dim. En effet, c'est déjà fait par le passage en paramètre.
Exemple :
3-Pour l'instruction, si tu n'as que des BackColor, il convient de passer les valeurs comme ceci :
Par contre, si tu ne modifies pas que tes backColor, il n'est pas possible de "passer" en paramètre des "lignes de code"...
Donc, décris bien ton problème afin que l'on puisse t'orienter.
Plusieurs petites choses...
1- ta déclaration de variable :
Dim fichier, groupe_bouton, underscore, nom_macro, test_fichier As String
ainsi faite, déclare fichier, groupe_bouton, underscore, nom_macro As Variant.
Il faut, en VBA, typer chaque variable :
Dim fichier As String, groupe_bouton As String, underscore As String, nom_macro As String, test_fichier As String
2- Si tu veux passer "blablabla" dans la variable fichier, tu peux utiliser une Sub paramétrée. Mais, à ce moment là, il ne faut pas déclarer de variable fichier par Dim. En effet, c'est déjà fait par le passage en paramètre.
Exemple :
Sub Code_Appelant() Dim NomFic As String NomFic = "blablabla" Call Transform(NomFic) MsgBox NomFic End Sub Sub Transform(ByRef Fichier As String) Fichier = Fichier & "blibli" End Sub
3-Pour l'instruction, si tu n'as que des BackColor, il convient de passer les valeurs comme ceci :
Sub Code_Appelant() Dim NomFic As String NomFic = "blablabla" Call Transform(NomFic, 255, 0) MsgBox NomFic End Sub Sub Transform(ByRef Fichier As String, Coul_1 As Long, Coul_2 As Long) Fichier = Fichier & "blibli" MsgBox "La couleur 1 est : " & Coul_1 & ", la couleur 2 est : " & Coul_2 End Sub
Par contre, si tu ne modifies pas que tes backColor, il n'est pas possible de "passer" en paramètre des "lignes de code"...
Donc, décris bien ton problème afin que l'on puisse t'orienter.
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
Modifié par Orbital38 le 6/08/2015 à 15:20
Modifié par Orbital38 le 6/08/2015 à 15:20
1- Merci je ne savais pas. Je savais qu'on pouvait en déclarer plusieurs à la chaine sans refaire un Dim mais quand on m'a appris ça c'était il y a 3 ans (et pour des études de mécanique... oui oui XD).
2- Je connais le paramétrage des Sub. ^^ Mais c'est vrai que j'ai mal exposé mon problème. Là j'ai fais un simple copier/coller du code que j'ai actuellement. Je suis conscient que si une modif' est faite pour le "paramètre 1" qu'il faudra changer la désignation de ma variable fichier. ^^
3- Le soucis était plus ici. J'ai mis
Quoi qu'il en soit, vu ton dernier paragraphe j'en déduis que c'est impossible. Je verrais si je peux pas rajouter un truc en amont pour simplifier tout ce bordel. x)
Merci en tout cas pour la première info. C'est un truc qui m'étais complètement sorti de la tête.
Je mets quand même en résolu du coup.
2- Je connais le paramétrage des Sub. ^^ Mais c'est vrai que j'ai mal exposé mon problème. Là j'ai fais un simple copier/coller du code que j'ai actuellement. Je suis conscient que si une modif' est faite pour le "paramètre 1" qu'il faudra changer la désignation de ma variable fichier. ^^
3- Le soucis était plus ici. J'ai mis
Outils.BackColor = vbRed, mais ça aurait pu être n'importe quoi. Dans le 1er code j'ai mis ' instruction 1 c'est vraiment pour une instruction, peu importe laquelle (même si ça restera simpliste). Mais j'aurais pu mettre un LoadPicture, ou MsgBox ou quelque chose du genre.
Quoi qu'il en soit, vu ton dernier paragraphe j'en déduis que c'est impossible. Je verrais si je peux pas rajouter un truc en amont pour simplifier tout ce bordel. x)
Merci en tout cas pour la première info. C'est un truc qui m'étais complètement sorti de la tête.
Je mets quand même en résolu du coup.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
6 août 2015 à 15:40
6 août 2015 à 15:40
si je peux pas rajouter un truc en amont pour simplifier tout ce bordel
Le truc, en programmation, pour remplacer une instruction comme tu souhaites le faire, c'est... la Sub ou la fonction.
Ce qui donnerait, avec le passage de paramètres en String (plus simple)
Le truc, en programmation, pour remplacer une instruction comme tu souhaites le faire, c'est... la Sub ou la fonction.
If underscore = Chr(95) And Not (nom_macro Like "C:\*" Or nom_macro Like "D:\*") Then Call Ma_Sub_1 ElseIf test_fichier Like "C:\*" Or test_fichier Like "D:\*" Then Call Ma_Sub_2 End If
Ce qui donnerait, avec le passage de paramètres en String (plus simple)
Sub Code_Appelant() Dim NomFic As String, UnParametre As String UnParametre = "Pourquoi" NomFic = "blablabla" Call Transform(NomFic, UnParametre) MsgBox NomFic & " - " & UnParametre End Sub Sub Transform(ByRef Fichier As String, Param As String) Fichier = Fichier & "blibli" If Left(Fichier, 3) = "bla" Then Call Ma_Sub_1(Param) ElseIf Left(Fichier, 4) = "blab" Then Call Ma_Sub_2(Param) End If End Sub Sub Ma_Sub_1(monParam As String) Select Case monParam Case "Bonjour": monParam = "1-1" Case "Comment": monParam = "1-2" Case "Pourquoi": monParam = "1-3" End Select End Sub Sub Ma_Sub_2(monParam As String) Select Case monParam Case "Bonjour": monParam = "2-1" Case "Comment": monParam = "2-2" Case "Pourquoi": monParam = "2-3" End Select End Sub
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
Modifié par Orbital38 le 6/08/2015 à 16:24
Modifié par Orbital38 le 6/08/2015 à 16:24
Ah oui, ou bien lier une variable string ou integer à une instruction. Je connais pas trop les Case donc je vais faire avec If :
J'appelle ensuite :
Bon, ça doit paraitre complètement faux comme code, mais est-ce que l'idée peut marcher ? En gros lié une variable (qui peut donc être un paramètre de Sub) à une instruction que l'on appelle avec la Sub ? Ou alors c'est ce que tu as tenté de me dire avec les Case et je n'ai juste pas compris le code ? (ce qui est complétement possible XD)
PS : oui je suis vraiment débutant. J'apprends un peu tout sur le tas comme ça, même si j'ai eu une dizaine d'heure de cours en VBA et C++, c'est pas vraiment suffisant (utilisation API Solidworks notamment pour automatiser la création d'un arbre à came, d'une nervure d'aile d'avion).
Sub Ma_sub(param as string, Optional Obj as object) If param = "modif_backcolor" Then Obj.Backcolor = vbRed ElseIf param = "message" Then MsgBox "Afficher message" ElseIf param = "lancer_macro" Then Call macro_au_pif Else MsgBox "Ça a merdé" End If End Sub
J'appelle ensuite :
If underscore = Chr(95) And Not (nom_macro Like "C:\*" Or nom_macro Like "D:\*") Then Call Ma_Sub(modif_backcolor, Image1) ElseIf test_fichier Like "C:\*" Or test_fichier Like "D:\*" Then Call Ma_Sub(message) End If
Bon, ça doit paraitre complètement faux comme code, mais est-ce que l'idée peut marcher ? En gros lié une variable (qui peut donc être un paramètre de Sub) à une instruction que l'on appelle avec la Sub ? Ou alors c'est ce que tu as tenté de me dire avec les Case et je n'ai juste pas compris le code ? (ce qui est complétement possible XD)
PS : oui je suis vraiment débutant. J'apprends un peu tout sur le tas comme ça, même si j'ai eu une dizaine d'heure de cours en VBA et C++, c'est pas vraiment suffisant (utilisation API Solidworks notamment pour automatiser la création d'un arbre à came, d'une nervure d'aile d'avion).
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
6 août 2015 à 16:29
6 août 2015 à 16:29
Bon, ça doit paraitre complètement faux comme code, mais est-ce que l'idée peut marcher ?
C'est tout à fait l'idée.
Une fonction ou une sub, en programmation c'est ni plus ni moins qu'une série d'instructions.
Tu peux donc, facilement, remplacer une instruction par une Sub ou une fonction. Ta variable de type String n'est là que pour différencier les différents cas. CEla tu l'as bien fait dans ton If ElseIf ...
J'ai utilisé Select Case car cela me semble moins "lourd" visuellement. If ElseIf fonctionnera aussi bien, voire même plus vite..
C'est tout à fait l'idée.
Une fonction ou une sub, en programmation c'est ni plus ni moins qu'une série d'instructions.
Tu peux donc, facilement, remplacer une instruction par une Sub ou une fonction. Ta variable de type String n'est là que pour différencier les différents cas. CEla tu l'as bien fait dans ton If ElseIf ...
J'ai utilisé Select Case car cela me semble moins "lourd" visuellement. If ElseIf fonctionnera aussi bien, voire même plus vite..
Orbital38
Messages postés
68
Date d'inscription
dimanche 4 janvier 2015
Statut
Membre
Dernière intervention
31 octobre 2020
Modifié par Orbital38 le 6/08/2015 à 16:45
Modifié par Orbital38 le 6/08/2015 à 16:45
D'acc'. Merci beaucoup. =)
Dernière petite question : le Select Case, comparé au If ElseIf, n'existe que pour rendre plus clair le code (si jamais on a déjà 5/6 ElseIf) ? Ou bien est-ce qu'il permet des choses en plus (ou en moins, comme par exemple des tests sur des paramètres d'Objets du style Image.BackColor, Label.Caption) ?
Dernière petite question : le Select Case, comparé au If ElseIf, n'existe que pour rendre plus clair le code (si jamais on a déjà 5/6 ElseIf) ? Ou bien est-ce qu'il permet des choses en plus (ou en moins, comme par exemple des tests sur des paramètres d'Objets du style Image.BackColor, Label.Caption) ?
Modifié par Orbital38 le 5/08/2015 à 22:49
Là je fais ça en VBA car j'ai que ça sous la main. Je passerai en VB6 (avec Visual studio community) après je pense. Là en fait j'utilise VBA avec excel mais je ne fais que lancer un userform sans utiliser la bibli d'excel.
Enfin bref. On va dire VBA, en espérant que ça soit compatible VB6.
Et si seulement VB.NET le permet j'irai poser ma question là-bas, j'apprendrai sur le tas à transformer mon code VBA en VB .NET. ^^
Modifié par NHenry le 5/08/2015 à 23:12
Envisages plutôt un passage sur VB.NET ou C#.NET.
Pour ouvrir un UserForm, c'est pas :
MonUserForm.Show
? (Remplacer "MonUserForm" par le nom réel du UserForm)
6 août 2015 à 15:12
Pour appeler un UserForm oui c'est bien ça.