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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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

  6. #6
    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

  7. #7
    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 ...

  8. #8
    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

  9. #9
    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

+ 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