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 :

Boucle VB Excel


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    Par défaut Boucle VB Excel
    Bonjour tout le monde,

    J'ai un tableau Excel avec 2 champs :

    Elément Nombre
    30000 10
    30000 15
    30000 20
    25000 5
    25000 2
    12000 3
    51000 1
    51000 1

    Je suis nul en VB :/ J'aimerais une macro qui effectue l'opération suivante :

    Supprimer les lignes en doublon (champs "Elément") et additionner les cellules (champ "Nombre") correspondant. Exemple:

    Pour le "30000", supprimer 2 lignes en garder une seule et faire 10+15+20, ce qui se traduit par le tableau :

    Elément Nombre
    30000 45
    25000 7
    12000 3
    51000 2

    Merci de votre aide.

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    en suivant ton exemple, essayes ce code sur une feuille d'essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim x, y, lg, total
    lg = Range("a" & Rows.Count).End(xlUp).Row
    For x = lg To 3 Step -1
    For y = x - 1 To 2 Step -1
    If Range("a" & y) = Range("a" & x) Then
    total = Range("b" & x) + Range("b" & y)
    Range("b" & x) = total
    Range("a" & y, "b" & y).Delete Shift:=xlUp
    End If
    Next y
    total = 0
    Next x
    End Sub
    bonne journée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Membre émérite Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Points : 2 662
    Points
    2 662
    Par défaut
    Salut,
    Avec le principe des boucles il te faut un For x To y Step-1
    On fait la boucle à l'envers pour ne pas oublier de ligne car:
    On est à la ligne 2, elle est supprimée, la boucle passe alors au suivant à savoir 3 MAIS la ligne 3 est devenue la 2 lors de la suppression, elle ne sera donc pas vérifiée par la boucle N°3, c'est en fait l'ancienne 4 qui est devenue 3 qui est ciblée (en espérant avoir été clair ...)
    Donc 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
    Sub SumData()
    Dim Ws As Worksheet
    Dim DerLig As Long, r As Long, MonTot As Long
     
    Set Ws = Sheets("TaFeuille")
    DerLig = Ws.Cells(Rows.Count, 1).End(xlUp).Row 'Récupère le N° de la dernière ligne remplie
     
    For r = DerLig To 2 Step -1 'Boucle de la dernière ligne à la 2ème car titre
        If Ws.Cells(r, 1) = Ws.Cells(r - 1, 1) Then 'Si la cellule est = à la cellule du "dessus"
            MonTot = MonTot + Ws.Cells(r, 2) 'Incrémente le total via la variable MonTot
            Rows(r).Delete 'Supprime la ligne
        Else 'Si la cellule est <> de celle du "dessus"
            MonTot = MonTot + Ws.Cells(r, 2) 'Incrémente le total
            Ws.Cells(r, 2) = MonTot 'Renseigne le total dans la ligne équivalente à la cellule colonne B
            MonTot = 0 'Réinitialise la variable pour le total
        End If
    Next r
    End Sub

    A+

    Edit: désolé pour le doublon (enfin presque) pas rafraichi...
    N'oubliez pas le si votre problème est solutionné.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    Par défaut
    Merci de ton aide

    Cordialement

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

Discussions similaires

  1. Boucle sous Excel
    Par GeomR dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 15/04/2008, 09h58
  2. Boucles vba Excel
    Par viscere dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2007, 07h07
  3. imprimer en boucle fichier excel
    Par digger dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/12/2005, 16h38
  4. boucle vb excel
    Par julien.63 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/12/2005, 01h41

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