Fonctionnement général d'un code VBA...
Résolu/Fermé
A voir également:
- Fonctionnement général d'un code VBA...
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
- Code activation windows 10 - Guide
- Code blocks - Télécharger - Langages
2 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 759
14 oct. 2015 à 13:25
14 oct. 2015 à 13:25
Bonjour,
Peux tu nous placer, ici même dans une réponse, le code complet de ton Module?
Peux tu nous placer, ici même dans une réponse, le code complet de ton Module?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 759
14 oct. 2015 à 14:55
14 oct. 2015 à 14:55
Bon.
Ce que tu nous donnes là est insuffisant pour t'expliquer clairement le déroulement de cette macro.
Ce que l'on peut en dire :
1- si tu es débutant, accroches toi, ça ne va pas être simple de mettre ça à jour,
2- 1700 lignes de code.... Pfiou! Bon courage!
3- La Sub DEB00 semble être ma procédure "principale", celle que l'on lance pour que la macro se "déroule" et donne le résultat escompté.
4- Petite explication sur les lignes de code ci-dessus :
4 a- Sous Option Explicit et au dessus de Declare Function blabla, tu as les variables globales (valides sur tout le projet (dans tous les modules), dans chcune des procédures et fonctions)
4 b-
Il s'agit ici d'appels de fonctions extérieures au fichier. Ces lignes font appel aux fonctions htonl et htons présentes dans la librairie ws2_32.dll
4 c- MkDir Chemin_Atr
Fait appel à la fonction VBA MkDir. Tu remarqueras qu'aucune des fonctions dans ton module ne s'appelle MkDir.
4 d- Kill FichRes : Idem que pour MkDir.
Il s'agit ici de fonctions présentes sur VBA.
4 e- rep = EcritIni("RESULTATS", "SerialNumber", Strings.Format$(div_val(NoBloc)), FichRes)
Ici, le code appelle la fonction EcritIni. Celle-ci doit être présente dans le module. Elle fait un traitement à partir des paramètres passés et renvoie une valeur, en l'occurence un entier (Integer).
4 f- info "traitement fichier Compo"
Ici, le code appelle une procédure, une Sub. Pas d'affectation à une variable comme ci-dessus avec rep. Donc, à ce moment de la procédure principale, on a besoin que soit fait un traitement, et donc on appelle ce que tu appelles une sous-routine.
4 g- Idem pour FichierCompo ou encore Histo_Fugas
N'hésite pas à poser des questions bien précises en cas de difficulté.
Ce que tu nous donnes là est insuffisant pour t'expliquer clairement le déroulement de cette macro.
Ce que l'on peut en dire :
1- si tu es débutant, accroches toi, ça ne va pas être simple de mettre ça à jour,
2- 1700 lignes de code.... Pfiou! Bon courage!
3- La Sub DEB00 semble être ma procédure "principale", celle que l'on lance pour que la macro se "déroule" et donne le résultat escompté.
4- Petite explication sur les lignes de code ci-dessus :
4 a- Sous Option Explicit et au dessus de Declare Function blabla, tu as les variables globales (valides sur tout le projet (dans tous les modules), dans chcune des procédures et fonctions)
4 b-
Declare Function htonl Lib "ws2_32.dll" (ByVal l As Long) As Long
Declare Function htons Lib "ws2_32.dll" (ByVal l As Integer) As Integer
Il s'agit ici d'appels de fonctions extérieures au fichier. Ces lignes font appel aux fonctions htonl et htons présentes dans la librairie ws2_32.dll
4 c- MkDir Chemin_Atr
Fait appel à la fonction VBA MkDir. Tu remarqueras qu'aucune des fonctions dans ton module ne s'appelle MkDir.
4 d- Kill FichRes : Idem que pour MkDir.
Il s'agit ici de fonctions présentes sur VBA.
4 e- rep = EcritIni("RESULTATS", "SerialNumber", Strings.Format$(div_val(NoBloc)), FichRes)
Ici, le code appelle la fonction EcritIni. Celle-ci doit être présente dans le module. Elle fait un traitement à partir des paramètres passés et renvoie une valeur, en l'occurence un entier (Integer).
4 f- info "traitement fichier Compo"
Ici, le code appelle une procédure, une Sub. Pas d'affectation à une variable comme ci-dessus avec rep. Donc, à ce moment de la procédure principale, on a besoin que soit fait un traitement, et donc on appelle ce que tu appelles une sous-routine.
4 g- Idem pour FichierCompo ou encore Histo_Fugas
N'hésite pas à poser des questions bien précises en cas de difficulté.
Oui en fait je me suis dit que j'ai pas besoin de tout mettre étant donné que je cherche juste à savoir si tout est lu ou non. J'ai saisi le fonctionnement de la macro (ce qu'elle fait) ce n'est pas vraiment mon plus gros problème même si j'ai mis du temps à la comprendre !
Il y a en réalité deux autres modules où sont déclarées ou implémentées d'autres fonctions... EcritIni est par exemple déclarée dans un de ces modules via un alias (WritePrivateProfileStringA) [je ne dois pas employer le bon vocabulaire mais ça doit rester compréhensible]
Bref ! En tout cas je crois que tu as répondu à ma question en me disant que la Sub "Deb00" semble être la procédure principale.
Une question demeure :
J'ai une routine "nomCellules" nommant donc des cellules, qui n'est jamais appelée dans "Deb00". Est ce que cette routine sera exécutée ? J'aurais tendance à dire non mais je ne sais pas vraiment...
Il y a en réalité deux autres modules où sont déclarées ou implémentées d'autres fonctions... EcritIni est par exemple déclarée dans un de ces modules via un alias (WritePrivateProfileStringA) [je ne dois pas employer le bon vocabulaire mais ça doit rester compréhensible]
Bref ! En tout cas je crois que tu as répondu à ma question en me disant que la Sub "Deb00" semble être la procédure principale.
Une question demeure :
J'ai une routine "nomCellules" nommant donc des cellules, qui n'est jamais appelée dans "Deb00". Est ce que cette routine sera exécutée ? J'aurais tendance à dire non mais je ne sais pas vraiment...
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 759
>
maniqk
14 oct. 2015 à 15:24
14 oct. 2015 à 15:24
La routine "nomCellules" sert à nommer les cellules concernées. En l'occurence, elle nomme les cellules de la 1ère ligne de ta feuille active en leur affectant, comme nom, leur contenu.
Cette "routine" ne doit être lancée qu'une seule fois. Si tes cellules sont nommées, une fois le classeur enregistré, et sans modification par un utilisateur, c'est définitif.
Donc, il se peut très bien qu'elle ne soit pas appelée depuis le code et que, par voie de conséquence, elle ne soit pas exécutée.
Cependant, comme la Sub Deb00 fait appelle à des cellules nommées (ex : Range("chemin").Value), il convient de vérifier que ces cellules sont bien nommées. Dans le cas contraire, il faut appeller la Sub nomCellules()
Pour qu'une fonction se déclenche, il faut, soit l'appeler depuis le code, soit qu'elle soit déclenchée par un événement.
Cette "routine" ne doit être lancée qu'une seule fois. Si tes cellules sont nommées, une fois le classeur enregistré, et sans modification par un utilisateur, c'est définitif.
Donc, il se peut très bien qu'elle ne soit pas appelée depuis le code et que, par voie de conséquence, elle ne soit pas exécutée.
Cependant, comme la Sub Deb00 fait appelle à des cellules nommées (ex : Range("chemin").Value), il convient de vérifier que ces cellules sont bien nommées. Dans le cas contraire, il faut appeller la Sub nomCellules()
Pour qu'une fonction se déclenche, il faut, soit l'appeler depuis le code, soit qu'elle soit déclenchée par un événement.
14 oct. 2015 à 13:40
Je pourrais le mettre mais il fait 1700 lignes... J'en mets juste une partie mais je ne pense pas que ça ait de l'importance pour ma question
et plus loin toutes les sous routines/fonctions :
et plein d'autres fonctions ensuite...