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 :

VBA Excel - Création d'une procédure simple


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut VBA Excel - Création d'une procédure simple
    Bonjour à tous,

    Je suis assez novice dans le code VBA Excel et j'aimerais profiter de vous connaisances pour créer un procédure d'automatisation dans un fichier Excel
    Est-ce que quelqu'un aurait un peu de temps pour créer cette procédure, j'ai essayé de le faire mais j'arrive pas à faire les boucles au bon endroit
    Je joins un ficher avec les commentaires pour la finalité souhaité
    D'avance un grand merci pour votre temps et bonne journée.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur Méthodes Industrialisation
    Inscrit en
    Octobre 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Méthodes Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2020
    Messages : 39
    Par défaut
    Bonjour ram256,

    Je te proposes le code suivant :

    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
     
    Sub Data_compte_CC()
     
    LigneColonneA = 3       'Première ligne de la colonne A à remplir
     
    With Sheets("Traitement DATA")
        If .Cells(3, 4) = "" Then       'Test pour vérifier si des données présentes avant End(xldown)
            Msg = MsgBox("Aucun compte à contrôler", "Erreur")
            Exit Sub
        End If
     
        For i = 3 To .Cells(2, 4).End(xlDown).Row       'Boucle sur l'ensemble des comptes
            x = 5                                       'Variable pour commencer sur le premier CC de la ligne
            While .Cells(i, x) <> ""                    'Boucles sur les CC
                .Cells(LigneColonneA, 1) = .Cells(i, 4) 'Copie du compte
                .Cells(LigneColonneA, 1) = .Cells(i, x) 'Copie du CC
                x = x + 1                               'On passe au CC suivant
                LigneColonneA = LigneColonneA + 1       'On va à la ligne suivante pour les colonne A et B
            Wend
        Next i
    End With
     
    End Sub
    Je te conseilles juste de supprimer les doublons avec la fonction d'excel et l'enregistrement de macro.


    Cordialement,
    Zeabon

  3. #3
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour et bienvenue sur ce Forum,

    Il n'est pas généralement dans nos habitudes d'ouvrir de fichier joint, du moins dans les premiers post d'une discussion.

    Aussi, pourrais-tu
    1 - Reporter la procédure qui pose problème
    2 - En soulignant la ligne de code qui pose problème
    3 - Retourner une ou plusieurs captures d'écran afin d'illustrer les échanges éventuels de données

    Au plaisir.

  4. #4
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut Zeabon,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 3 To .Cells(2, 4).End(xlDown).Row       'Boucle sur l'ensemble des comptes
            x = 5                                       'Variable pour commencer sur le premier CC de la ligne
            While .Cells(i, x) <> ""
    Il est plus actuel, mais aussi - beaucoup - plus performant, d'utiliser les tables de données (tableaux structurés).
    Et ainsi d'oublier les End(xlDown) et les While ... <> "".

  5. #5
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    à tester
    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
    Sub testt()
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Dim F1 As Worksheet
    Set F1 = Sheets("Traitement DATA")
    F1.Range("A3:B" & F1.Range("A" & Rows.Count).End(xlUp).Row).ClearContents
    Dim i As Long
    Dim C As Long
    Set d = CreateObject("Scripting.Dictionary")
        '**********************************************************
        TblBD = F1.Range("D1:FZ" & F1.Range("D" & Rows.Count).End(xlUp).Row)
        For i = 3 To UBound(TblBD)
         dercol = F1.Cells(i, F1.Cells.Columns.Count).End(xlToLeft).Column
         For C = 5 To dercol
             If TblBD(i, 1) <> "" And TblBD(i, C) <> "" Then
             clé = TblBD(i, 1) & "|" & TblBD(i, C)
             d(clé) = TblBD(i, 1) & "|" & TblBD(i, C)
             End If
          Next C
        Next i
     
        F1.Range("A3").Resize(d.Count) = Application.Transpose(d.keys)
        F1.Range("A3").Resize(d.Count).TextToColumns Other:=1, DataType:=xlDelimited, OtherChar:="|"
     Application.DisplayAlerts = True
     Application.ScreenUpdating = True
    End Sub
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur Méthodes Industrialisation
    Inscrit en
    Octobre 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Méthodes Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2020
    Messages : 39
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Salut Zeabon,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 3 To .Cells(2, 4).End(xlDown).Row       'Boucle sur l'ensemble des comptes
            x = 5                                       'Variable pour commencer sur le premier CC de la ligne
            While .Cells(i, x) <> ""
    Il est plus actuel, mais aussi - beaucoup - plus performant, d'utiliser les tables de données (tableaux structurés).
    Et ainsi d'oublier les End(xlDown) et les While ... <> "".
    Bonjour MarcelG,

    Je suis d'accord avec toi, l'utilisation des tableaux structurés sont plus efficace mais 2 raisons m'ont pousser à lui donner ce code :
    - Pas de version de Excel donnée : Je ne sais pas si le tableau structurel est fonctionnel sur ça version
    - Je penses que si il bloque sur les boucles alors il doit débuter, et commencer sur les tableaux structurés ce n'est pas le plus évident.

    Après si tu as un lien vers un post explicatif du tableau structurés, je suis preneur aussi.

    Bonjour BENNASR,

    J'avoue ne pas comprendre une ligne de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dercol = F1.Cells(i, F1.Cells.Columns.Count).End(xlToLeft).Column
    Lorsque tu es sur la ligne avec toutes les colonnes, cela ne va-t-il pas te donner dercol =5 et donc pas de valeur ?

    Cordialement,
    Zeabon

  7. #7
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut,

    Je penses que si il bloque sur les boucles alors il doit débuter, et commencer sur les tableaux structurés ce n'est pas le plus évident.
    Si, justement, appliquer les tables de données au plus tôt revient à une bonne pratique qui servira de base tout au long des développements à venir.

    2 tutoriels de base
    les tableaux structurés
    les tableaux structurés par VBA

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Bonjour MarcelG,

    Je comprends votre message de pas poster un fichier Excel mais uniquement le code ou cela pose problème, mais comme a si bien dit par Zeabon, je débute et je code que rarement, alors j'avais pas de code à proposer....
    Merci a Zeabon pour sa porposition, je vais tester et reviens avec des nouvelles ...

  9. #9
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Salut ram,

    Justement, il te faut t'investir dans l'écriture d'un code, et ce même s'il tome en échec.

    Voir cette humble position

  10. #10
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    Bonjour BENNASR,
    J'avoue ne pas comprendre une ligne de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dercol = F1.Cells(i, F1.Cells.Columns.Count).End(xlToLeft).Column
    pour gagner du temps et ne pas parcourir toujours plus de 180 colonne , j'ai chercher la dernière colonne non vide pour chaque ligne pour gagner en temps d'exécution

    je ne suis qu'un autodidacte

  11. #11
    Membre confirmé
    Homme Profil pro
    Ingénieur Méthodes Industrialisation
    Inscrit en
    Octobre 2020
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Méthodes Industrialisation
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2020
    Messages : 39
    Par défaut
    Citation Envoyé par MarcelG Voir le message
    Salut ram,

    Justement, il te faut t'investir dans l'écriture d'un code, et ce même s'il tome en échec.

    Voir cette humble position
    Je suis tout à fait d'accord avec MarcelG : VBA a une très grande communauté et énormément de chose/solution sont postés sur les forums.

    Si on fait un simple copier/coller sans comprendre, alors on ne progresse pas.

    Donc si ton objectif est de rester débutant et tu fais une macro juste pour cette fois mais tu ne vas plus y retoucher, alors une solution comme celle que j'ai proposé va t'aider.

    Maintenant si c'est pour en fairte couramment, je te conseille de regarder les liens de MarcelG sur les tableaux structurés et de l'adapté à ton cas.

    On sera ravi de t'aider si tu as des problèmes à l'appliquer.



    Citation Envoyé par BENNASR Voir le message
    je ne suis qu'un autodidacte
    Je pense qu'on l'est un peu tous et certains beaucoup
    Cordialement,
    Zeabon

  12. #12
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 171
    Billets dans le blog
    53
    Par défaut
    Bonjour Zeabon,
    Je suis d'accord avec toi, l'utilisation des tableaux structurés sont plus efficace mais 2 raisons m'ont pousser à lui donner ce code :
    - Pas de version de Excel donnée : Je ne sais pas si le tableau structurel est fonctionnel sur ça version
    Les tableaux structurés existent depuis la version 2007 soit presque 15 ans et les fichiers suffixés xlsm sont arrivés avec cette version.
    Comme le fichier joint à la discussion est un fichier de ce type on peut en déduire qu'il peut utiliser ces tableaux
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  13. #13
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Hé, Salut Philippe

    Merci pour cette précision.

    Depuis 2007! Je ne croyais pas la naissance des tableaux structurés à cette date.
    (Je viens de retrouver d'anciens développements contenant des "End(x" à tout va et des modifications de noms utilisés dans des formules, et que j'ai réalisés après...2009 (Shame on you, Marcello)

    A ta connaissance, avaient-ils alors les mêmes fonctionnalités tant sur tableur qu'en VBA?

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Citation Envoyé par Zeabon Voir le message
    Je suis tout à fait d'accord avec MarcelG : VBA a une très grande communauté et énormément de chose/solution sont postés sur les forums.

    Si on fait un simple copier/coller sans comprendre, alors on ne progresse pas.

    Donc si ton objectif est de rester débutant et tu fais une macro juste pour cette fois mais tu ne vas plus y retoucher, alors une solution comme celle que j'ai proposé va t'aider.

    Maintenant si c'est pour en fairte couramment, je te conseille de regarder les liens de MarcelG sur les tableaux structurés et de l'adapté à ton cas.

    On sera ravi de t'aider si tu as des problèmes à l'appliquer.

    Je pense qu'on l'est un peu tous et certains beaucoup
    Cordialement,
    Zeabon
    Bonjour Zeabon,
    Merci pour ton aide ! Effectivement tu as encore vu juste, je suis de profession responsable comptable et financier (tout comme BENNASR ) et mon but n'est pas de devenir un programmateur, mais dans le monde de la finance où ont travaille beaucoup avec des tableaux Excel, créer des petits macros qui nous simplifie la vie et le traitement est super efficace ! Raison pour laquelle je m'intéresse au code VBA !
    Malheureusement j'ai pas le temps que je souhaiterais pour investir dans l'apprentissage poussé et souvent le traitement est spécifique à un fichier, certes utilisé très souvent, mais cela reste le même traitement.

    J'ai testé ta proposition de code, cela ne faite pas exactement ce que j'attends, les données copiés du compte sont écrasés pas celles du CC, mais j'aimerais moi-même (maintenant que j'ai le code) essayer d'apporter les corrections (afin de m'améliorer par la suite).

    Je reviens avec la solution (si je la trouve) ou je te demanderais de l'aide (cela risque de prends un petit moment, car je fais cela à temps perdu... le soir)

    Merci également à BENNASR pour sa proposition, j'aimerais d'abord tester/corriger celle proposé de Zeabon et par la suite voir tester également celle de BENNASR !
    Merci les gars ! Encore une fois, le but est de faire travailler la machine à ma place pour le travail répétitif et gagner du temps pour mes autres tâches d'analyse
    Bon dimanche

  15. #15
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Bonsoir Zeabon,

    Merci pour ta proposition de code, comme mentionné, il y avait un petit erreur dans le code dont j'aimerais moi-même trouver la solution, et c'est FAIT !
    Je viens de trouver l'erreur et cela se trouve dans la ligne de code Nom : Code VBA.png
Affichages : 103
Taille : 35,9 Ko

    Cela fonctionne à merveille !
    Merci beaucoup pour ton coup de main.

    Je vais marqué comme terminé/résolu cette discussion !
    Excellent soirée.

  16. #16
    Expert confirmé
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    J'insiste.

    Je fais suite à ma précédente intervention.
    Si, justement, le développement VBA t'est annexe, pourquoi ne pas adopter les bonnes pratiques dès maintenant?

    J'ai indiqué une piste, à adapter bien entendu, dans ce post.

    (Je pars en congés et serai de retour lundi 29 novembre)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA Excel] - création d'une listbox des jours ouvrés
    Par ancel17 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/04/2008, 16h42
  2. [VBA]Création d'une procédure de recherche
    Par Thegad dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/04/2007, 18h16
  3. [VBA-Excel] Création d'une boîte de dialogue interactive
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 28/07/2006, 11h55
  4. [DB2]Eurreur lors de la création d'une procédure
    Par uaspecitmoon dans le forum DB2
    Réponses: 1
    Dernier message: 25/05/2005, 19h23
  5. [VBA Excel] Effacer rapidement une feuille
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/10/2002, 13h12

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