IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

question d'un debutant en VBA (decoupage de code en VBA)


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut question d'un debutant en VBA (decoupage de code en VBA)
    Bonjour,

    J'ai un traitement a faire dans excel. je me suis donc tourné vers l'éditeur visual basic intégré au excel.
    Je souhaiterais faire quelque chose de propre. Je me demandais si il était possible (et si oui comment) de découper le code VBA en plusieurs "feuille" comme on le ferais en C ou d'autre langage.

    J'ai appris par moi même plusieurs language en lisant des sites et dans des livres. Je n'ai jamais pu vraiment échanger avec un "vrai programmeur". j'aimerais pouvoir discuter avec quelqu'un qui a de bonne connaissance dans la matière. notamment sur "comment structurer son code". Si possible par skype. c'est tellement plus facile de ce faire comprendre par la voix.

    Pour ce qui est de mon projet,

    Je reçois une feuille excel d'un client avec tout un tas de donnée.
    Je dois les vérifie (erreur de saisie), ajouter des colonnes, et mettre le tout en forme pour pouvoir importer ces données dans un autre logiciel.

    Si vous pensez avoir un peu de temps pour discuter. je vous en serais reconnaissant.

    merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Par défaut
    Bonjour,

    Le but du forum est de partager ici afin que les personnes pouvant être intéressées puisse en profiter.
    J'ai appris par moi même plusieurs language en lisant des sites et dans des livres.
    Comme beaucoup d'entre nous
    Je reçois une feuille excel d'un client avec tout un tas de donnée.
    Je dois les vérifie (erreur de saisie), ajouter des colonnes, et mettre le tout en forme pour pouvoir importer ces données dans un autre logiciel.
    Je souhaiterais faire quelque chose de propre. Je me demandais si il était possible (et si oui comment) de découper le code VBA en plusieurs "feuille" comme on le ferais en C ou d'autre langage.
    Je ne connais pas le langage C mais tu peux structurer ton programme en différents morceaux comme par exemple une procédure ou fonction de contrôle de saisie pour les valeurs texte en passant par exemple une plage en argument si tu as une ou des colonnes avec du texte, de même pour les dates et les nombres etc...
    Tu peux faire une procédure de création de colonnes, une procédure de mise en forme et une procédure d'export et toutes ces procédures et fonctions appelées par une procédure principale.

    Hervé.

  3. #3
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Thomas_C_Moi Voir le message
    Bonjour,
    ... Je me demandais si il était possible (et si oui comment) de découper le code VBA en plusieurs "feuille" comme on le ferais en C ou d'autre langage
    Bien sûr que c'est possible d'avoir plusieurs feuilles <module> de code. Il suffit d'ajouter un module, lui donner le nom que tu veux dans le volet de propriétés en respectant les conventions de nom.

    Pour l'autre souhait, je ne suis pas fan des discussions à vive voix.

  4. #4

  5. #5
    Membre émérite
    Avatar de eric4459
    Homme Profil pro
    Ingénieur Gestion de Projets
    Inscrit en
    Avril 2014
    Messages
    605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Gestion de Projets
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2014
    Messages : 605
    Par défaut
    Bonjour Thomas,
    Difficile pour Skype, la journée c'est boulot et le soir famille et puis je ne suis pas assez expert

    Sinon quelques infos:

    Tu peux créer plusieurs "feuilles" en Vba, on les appelle Modules
    Dans chaque module tu peux créer plusieurs procédures qui seront appelées depuis une autre procédure ou depuis une "interface" tels que les boutons, une saisie particulières dans une zone de liste ou autre éléments de la boite à outils.
    Tu peux également créer des fenêtres personnalisées qui apparaîtront sur commande, dans l'exemple ci-dessous j'ai créé un UserForm nommé "Equipment_Edit" sur lequel j'ai ajouté une zone de liste "ComboBox" et un bouton.

    Nom : Elément VBA.jpg
Affichages : 468
Taille : 96,0 Ko

    Pour ce qui est du code en lui même, tous les experts du site te recommanderons d'ajouter en première ligne de chaque module la ligne suivante:

    Cette commande permettra de repérer très facilement toute erreur de syntaxe dans les variables que tu aura définies ou tout oubli lors de l’exécution du code, en pas à pas ou en auto.

    Par exemple si tu oublis de définir une variable ou si tu défini une variable comme suit:

    et que dans ton code tu écris:

    tu auras l'erreur suivante :
    Erreur de compilation : Variable non définie
    Cette ligne t'impose donc à définir toutes tes variables

    Dernier conseil, pour que ton code soit lisible et facilement "débuggable" il est recommandé d'indenter tes lignes comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    For i = 2 To NbLigne 'Pour chaque tronçon
        For j = 1 To 4
            If Tr.Offset(i, j) <> "" Then
                If Tr.Offset(0, j) Like "*km*" Then
                    Tr.Offset(i, 7) = Tr.Offset(i, 7) + (Tr.Offset(i, j) * Tr.Offset(1, j) / 1000) ' Calcul en minutes pour des données en km
                Else
                    Tr.Offset(i, 7) = Tr.Offset(i, 7) + (Tr.Offset(i, j) * Tr.Offset(1, j)) 'Calcul en minutes pour les Folios par exemple
                End If
            End If
        Next j
    Next i
    Voilà quelques infos, je ne doute pas que d'autres membres te contacteront pour d'autres astuces ou t'aiguiller vers des sites intéressants.

    Eric
    "Vous n’avez cessé d’essayer ? Vous n’avez cessé d’échouer ? Aucune importance !
    Réessayez, échouez encore, échouez mieux." Samuel Beckett
    Pensez aux balises et
    Visitez les FAQ Excel et allez faire un tour ici
    Tutoriels de SilkyRoad

  6. #6
    Invité
    Invité(e)
    Par défaut
    moi j'ais rien compris à la vie je suis sur fesse de bouc!


    Ceci dit l'analyse c'est pas du code,le code vient après, c'est un résonnent; c'est comme pour le langage c,tu fais ton analyse pareil.

    Le reste c'est de la syntaxe!
    Dernière modification par Invité ; 17/06/2015 à 19h24.

  7. #7
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut
    Merci a tous pour vos réponses.

    J'ai tout même encore une question.

    Y a t'il quelque chose a faire de particulier pour appeler une procédure qui serais dans un module1 depuis une procédure ce trouvant dans un module2 ?

    Ou cela ce passe t'il comme si tout était dans le même module ?

    Si j'ai bien compris, il serait conseillé de créer un module pour chaque partie de mon programme.
    j'aurais donc :
    un module "Main"
    un module "ouverture de fichier"
    un module "verification des erreurs"
    un module "je fais du café"
    ...

    dans chaque module j'aurais les différentes procédures nécessaire à la réalisation de chaque étape.

    dernier petit point (je pourrais le trouver par moi même mais j'en profite pour tout rassembler ici).
    Y a-t-il une porté spécifique pour des variables à un module ?

  8. #8
    Invité
    Invité(e)
    Par défaut
    Oui les variables public sont vue de partout dans la mesure oui il ne sont pas dans un classe, elle sont interdites dans une sub ou une function.

    Je te suggère de les définir dans un module séparément du est que tu appel VariablesPublics.

    Tu peux avoir besoin de procédures ou de fonctions util dans tout ton projet,pareil un module FonctionsGlobale

    La porté des variables, là où elles se trouvent, dans un d'un la portée de la sub etc...

  9. #9
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut
    euu je crois que tu as écris un peu vite tu as du oublié des mots je pige rien du tout ^^

  10. #10
    Invité
    Invité(e)
    Par défaut
    Je suis sur mon téléphone portable et dans le métro. Alors je spide désolé

  11. #11
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut
    c'est quoi une classe en VBA ? tu en as parlé j'ai rien lu la dessus en VBA

  12. #12
    Invité
    Invité(e)
    Par défaut
    Une classe est comme un modèle, elle dispose de variable et de méthodes, ce modèle permet de définir un variables qui contient en elle tout ce qui est décrit dans lae module de classe.

    C'est une variable intelligente! Sheet est une class par exemple sheets est un collection de classe de type sheet.

    Mais là on monte dans les hautes sphères!

    Revenons à la portée des variables.

    Par défaut elles sont globale, vues de partout dans la mesure ou elle sont en entête de module et pas dans un sub dans ce cas par défaut elles sont privés. Note que dans une sub elles ne peuvent pas être public.

    Elle peuvent être static dans une sub ça veut dire quelles ne sont visibles que dans la sub mais elles conservent leurs valeur même quand on sort de la sub; quand on revient dans la sub la valeur est toujours présente.

    Privée même dans in module elle est de ce fait visible que du module.

    Pour les méthodes c'est la même chose sauf qu'il n'est pas possible de définir un sub dans un autre sub !
    Dernière modification par Invité ; 17/06/2015 à 21h20.

  13. #13
    Membre averti
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Par défaut
    Merci vos réponse m'ont permis d'avancer un peu dans mon projet.

    J'ai un autre point qui me pause problème.

    Je vais commencé par présenté le sujet le plus clairement possible.

    Je reçois un fichier excel d'un client. Il comporte tout un tas de donnée.
    Mon travail va être une mise en forme de ces données pour pouvoir les importer dans un autre logiciel.

    Je souhaite faire une macro qui va réaliser cette mise en forme.

    Puisque c'est mon client qui crée et m'envoie les données, la macro ne peut bien sur pas ce trouver dans le fichier que m'envoie le client.
    Il me semble que je dois donc créer un autre fichier Excel, dans lequel j'aurais ma macro.

    Le premier point a l'ouverture de ma macro sera donc d'aller chercher le fichier client dans l'ordi.
    J'ai réussi a faire marcher un explorateur de fichier. voici le code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Option Explicit
     
    Function OpenCustomerFile() As Workbook
     
        Dim wbCustomerFile As Workbook
     
        With Application.FileDialog(msoFileDialogOpen)
            ' Sélection d'un seul dossier
            .AllowMultiSelect = False
            ' Sélection d'un dossier de base :
            .InitialFileName = ThisWorkbook.Path & "\Fichier Client\"
            ' Affichage d'un titre particulier dans la boite de dialogue :
            .Title = "Choix du fichier client"
     
            ' Affichage de la boîte de dialogue et test validation :
            If .Show = 0 Then
                ' show = 0 signifie que l'utilisateur a annuler le choix de fichier
                 Exit Function
            Else
                ' ouverture du fichier de client
               Set wbCustomerFile = Workbooks.Open(.SelectedItems(1))
            End If
        End With
     
        Set OpenCustomerFile = wbCustomerFile
    End Function

    Je ne souhaite pas modifier ce fichier Client, mais copier la feuille qui contient les données dans un autre fichier dans lequel je vais travailler.

    l'Etape suivante sera donc :
    -créer un nouveau dossier qui contiendra la nouveau fichier de travail.
    -créer le nouveau fichier de travail
    -copier la feuille du client dans le nouveau fichier excel.

    A ce point je me retrouve donc avec 3 fichier.
    Le fichier client
    Le fichier Macro
    Le fichier de travail

    remarque : le Fichier client n'est plus d'aucune utilité.

    Je souhaite maintenant vérifié si il y a des erreurs de saisie dans la copie du fichier client.
    En effet le logiciel qui va recevoir les données au final n'aime pas les caractères spéciaux dans les adresses, j'ai aussi d'autre vérification a effectuer.
    Je pensais donc parcourir la feuille et lorsque je trouve une cellule qui pose problème la mettre en rouge.
    A la fin de cette étape je me retrouve avec un feuille dont les cases en rouge sont à corriger.
    Je laisse le soins a l'utilisateur de les corriger a la main. (nécessite donc un arrêt de la macro a ce niveau )

    Je souhaiterais maintenant que l'utilisateur puisse relancer autant de fois qu'il le souhaite cette vérification.
    J'avais pensé à un bouton "vérification erreur". Mais la grande question c'est comment le faire...
    Je m'explique. Jusque ici c'était le fichier de Macro qui contrôlait tout.
    Il connaissait le fichier client puisque l'utilisateur l'a ouvert grâce a un explorateur dans la macro.
    Il connaissait aussi le fichier de travail puisque il a été créer par la macro.

    Mais si je met un bouton "vérification erreur" dans mon fichier de macro. Puisque la macro a pris fin comment va t'il savoir a quel fichier effectuer cette vérification ?
    j'avais pensé que la macro après avoir créer le fichier de travail et copier la feuille de client aurais pu (je ne sais pas si c'est possible) créer un bouton "verification erreur" directement sur une feuille du fichier de travail. qui lancerais la macro de vérification qui ce trouve dans le fichier de Macro.

    Tout ceci me parais un peu brouillon, pas très clair.
    Je ne sais pas si vous avez compris ou je veux en venir.
    j'attends vos commentaire avec impatience.

Discussions similaires

  1. recherche debut de ligne dans fichier texte en vba
    Par Mimosa777 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/07/2008, 18h27
  2. Question d un debutant en SQLEXP2005
    Par libremax dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/03/2008, 16h52
  3. [Slackware 12.0] Quelque questions d'un débutant
    Par olivierf66 dans le forum Autres
    Réponses: 15
    Dernier message: 15/12/2007, 16h06
  4. Question sur SDL_FreeSurface (debutant)
    Par coyotte507 dans le forum SDL
    Réponses: 1
    Dernier message: 13/12/2006, 15h31
  5. Nouveau, présentation et question pour bien débuter
    Par chichicratsok dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 19/03/2006, 18h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo