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 :

Ajouter des quantités et supprimer les lignes


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut Ajouter des quantités et supprimer les lignes
    Bonjour,

    Dans le cadre d'un projet d'étude, il me faut réaliser une macro dans laquelle je dois faire des extractions de certains fichier ( déja réalisé). Dans un deuxième temps mon classeur contient donc une colonne avec les référence : la A et une colonne avec les quantité : la C. Il se trouve que certaine ligne j'ai la même référence avec des quantités différentes. Cela est du a un code fournisseur différent. Il me faut donc a chaque fois qu'il repère la même référence ajouter les quantité et supprimer les lignes inutiles .... J'ai déja réaliser des macro simple de suppression des doublons cependant comme cela jamais ... Quelqu'un pourrait il m'aider ?

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Est-ce que tu peux donner un exemple concret ? Parce que, comme ça c'est un peu abstrait.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    test.xls

    Voici un exemple de fichier on a une référence commune pour les trois éléments. Et je voudrais me retrouvé avec une seule ligne avec la référence et les quantité ajoutées soit Ref : 3547865345 Qté : 11. J'espère que j'ai été assez clair, et j'ai le cas pour plusieurs références.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Les données de départ sont en colonne A et B de Feuil3. Les résultats sont en Feuil4 :

    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
    Sub test()
        Dim C As Range, Plage As Range, Dico As Object, Ligne As Long, Lig As Long
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Feuil3")
            Set Plage = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Sheets("Feuil4")
            For Each C In Plage
                If Not Dico.exists(C.Value) Then
                    Dico.Add C.Value, C.Value
                    Ligne = Ligne + 1
                    .Cells(Ligne, 1) = C.Value
                    .Cells(Ligne, 2) = C.Offset(, 1).Value
                Else
                    Lig = Application.Match(C.Value, .[A:A], 0)
                    .Cells(Lig, 2).Value = .Cells(Lig, 2).Value + C.Offset(, 1).Value
                End If
            Next C
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    Merci Daniel.C j'essaye d'adapter ta macro a mon problème mais j'aimerais en fait me refaire un tableau sur la meme feuille mais a côté. Il faudrait que je change quoi ??

  6. #6
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    C'est toi qui a demandé une macro. Regarde le classeur :

    https://www.dropbox.com/s/c26lgw2kwf...llll.xlsm?dl=0

    Tu as aussi une solution par formules sur Feuil3 en colonnes G et H.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    Oui oui c'est parfait j'ai réussi a me la mettre a ma sauce, donc mon problème maintenant c'est que en fait il y'a des référence qui n'ont pas de doublons.
    Avec cette macro je traite la recopie en Feuil 3 que des doublons. Il faudrait que je puisse recopier le reste des références en le laissant tel quel. Comment puis je faire ??

  8. #8
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Le mieux serait que tu mettes ton classeur en pièce jointe.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  9. #9
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    Classeur stock.xls

    Voici le type de tableau que j'ai. Il y'a certaine référence ou il y a plusieurs quantités, c'est celle la que je voudrais additionner. Cela me permettrait de connaitre le stock par référence. De plus il faudrait également que les autres références se recopient afin que je puisse faire une analyse fine du stock.

    Merci de ton aide

  10. #10
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Teste :

    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 test()
        Dim C As Range, Plage As Range, Dico As Object, Ligne As Long, Lig As Long
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Stock")
            Set Plage = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Sheets("Feuil2")
            For Each C In Plage
                If Not Dico.exists(C.Value) Then
                    Dico.Add C.Value, C.Value
                    Ligne = Ligne + 1
                    If IsNumeric(C.Value) Then
                        .Cells(Ligne, 1).NumberFormat = "@"
                    End If
                    .Cells(Ligne, 1) = C.Value
                    .Cells(Ligne, 2) = C.Offset(, 1).Value
                Else
                    Lig = Application.Match(C.Value, .[A:A], 0)
                    .Cells(Lig, 2).Value = .Cells(Lig, 2).Value + C.Offset(, 1).Value
                End If
            Next C
        End With
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  11. #11
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    Beh écoute c'est parfait chapeau !!!!

    Merci beaucoup, j'aurais surement d'autres questions existentielles sur VBA ^^

  12. #12
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Pas de problème.

    Bonne soirée.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  13. #13
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    Sur mon premier tableau la macro a super bien tourné, cependant je voulais faire deux autres sub pour deux autres onglets et j ai une erreur juste après le else ! Es ce que tu sais de où ça peut venir ??

  14. #14
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Quel est le message d'erreur ?
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  15. #15
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    Bonjour, donc en fait quand je le lance pour onglet ca passe mais quand je veux l'appliquer aux deux autres impossible.
    Le message d'erreur est le suivant : Erreur d'éxecution '13' :Incompatibilité de type.
    Et dans le débogage il me surligne cette ligne : Lig = Application.Match(C.Value, .[A:A], 0)Voici le code que j'ai rentré, il y'a 3 sub associé a 3 boutons :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    Sub stock()
     
        Dim C As Range, Plage As Range, Dico As Object, Ligne As Long, Lig As Long
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("stock S")
            Set Plage = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Sheets("stocks S1")
            For Each C In Plage
                If Not Dico.exists(C.Value) Then
                    Dico.Add C.Value, C.Value
                    Ligne = Ligne + 1
                    If IsNumeric(C.Value) Then
                        .Cells(Ligne, 1).NumberFormat = "@"
                    End If
                    .Cells(Ligne, 1) = C.Value
                    .Cells(Ligne, 2) = C.Offset(, 1).Value
                Else
                    Lig = Application.Match(C.Value, .[A:A], 0)
                    .Cells(Lig, 2).Value = .Cells(Lig, 2).Value + C.Offset(, 1).Value
                End If
            Next C
        End With
    End Sub
    Sub Entrées()
    Dim C As Range, Plage As Range, Dico As Object, Ligne As Long, Lig As Long
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Entrées S")
            Set Plage = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Sheets("Entrées S1")
            For Each C In Plage
                If Not Dico.exists(C.Value) Then
                    Dico.Add C.Value, C.Value
                    Ligne = Ligne + 1
                    If IsNumeric(C.Value) Then
                        .Cells(Ligne, 1).NumberFormat = "@"
                    End If
                    .Cells(Ligne, 1) = C.Value
                    .Cells(Ligne, 2) = C.Offset(, 1).Value
                Else
                    Lig = Application.Match(C.Value, .[A:A], 0)
                    .Cells(Lig, 2).Value = .Cells(Lig, 2).Value + C.Offset(, 1).Value
                End If
            Next C
        End With
        End Sub
        Sub Sorties()
     
     
        Dim C As Range, Plage As Range, Dico As Object, Ligne As Long, Lig As Long
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Sorties S")
            Set Plage = .Range("A1", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Sheets("Sorties S1")
            For Each C In Plage
                If Not Dico.exists(C.Value) Then
                    Dico.Add C.Value, C.Value
                    Ligne = Ligne + 1
                    If IsNumeric(C.Value) Then
                        .Cells(Ligne, 1).NumberFormat = "@"
                    End If
                    .Cells(Ligne, 1) = C.Value
                    .Cells(Ligne, 2) = C.Offset(, 1).Value
                Else
                    Lig = Application.Match(C.Value, .[A:A], 0)
                    .Cells(Lig, 2).Value = .Cells(Lig, 2).Value + C.Offset(, 1).Value
                End If
            Next C
        End With
     
        End Sub
    As tu une idée de comment je pourrais m'en sortir ?

  16. #16
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjoour,

    Ca vient de tes données. Est-ce que tu peux mettre un lien sur le classeur ? Je m'absente et serai de retoour en fin d'après-midi.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  17. #17
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Janvier 2016
    Messages
    112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2016
    Messages : 112
    Points : 67
    Points
    67
    Par défaut
    Voici le classeur avec les trois Feuil a savoir : stock, entrées et sorties.
    Tu verras dans le classeur j'ai réussi a lancé la macro sur le stock et les entrées mais aux niveaux des sorties ca marche pas !
    Merci de ton aide !Classeur1-données stock.xls

  18. #18
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Macro Stock, il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    With Sheets("Feuil1")
    par :

    Il faut changer également le nom de la feuille pour les macros Entréees et Sorties. Pour cette dernière, dont les données d'entrée commencent en ligne 3, il faut modifier ainsi :

    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 Sorties()
     
     
        Dim C As Range, plage As Range, Dico As Object, Ligne As Long, Lig As Long
        Set Dico = CreateObject("Scripting.Dictionary")
        With Sheets("Sorties")
            Set plage = .Range("A3", .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Sheets("Feuil6")
            For Each C In plage
                If Not Dico.exists(C.Value) Then
                    Dico.Add C.Value, C.Value
                    Ligne = Ligne + 1
                    If IsNumeric(C.Value) Then
                        .Cells(Ligne, 1).NumberFormat = "@"
                    End If
                    .Cells(Ligne, 1) = C.Value
                    .Cells(Ligne, 2) = C.Offset(, 1).Value
                Else
                    Lig = Application.Match(C.Value, .[A:A], 0)
                    .Cells(Lig, 2).Value = .Cells(Lig, 2).Value + C.Offset(, 1).Value
                End If
            Next C
        End With
     
        End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  19. #19
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2021
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2021
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Ajouter des quantités
    Bonjour,
    j'ai un fichier avec une macro pour insérer des lignes de produits avec prix et quantités.
    Je voudrais avoir un bouton qui ajoute une quantité à la ligne. Est-ce possible ?
    Merci pour votre aide.
    Fichiers attachés Fichiers attachés

  20. #20
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Tu es optimiste de poster dans discussion dont le dernier message date de 5 ans, surtout par temps de covid
    Sinon, des boutons qui insèrent des ligne, il y en a déjà plein. il faudrait que tu précises ce que tu veux.
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/11/2014, 15h36
  2. Supprimer les lignes contenant que des 0
    Par Paul Pit dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/05/2014, 14h43
  3. [XL-2007] Supprimer les lignes vides des barres empilées
    Par Nuwanda dans le forum Excel
    Réponses: 3
    Dernier message: 04/08/2010, 08h57
  4. Réponses: 2
    Dernier message: 14/06/2007, 22h24
  5. Supprimer les lignes et en ajouter de nouvelles
    Par taisherg dans le forum VBA Access
    Réponses: 2
    Dernier message: 07/06/2007, 14h03

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