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 :

Aide macro excel débutant


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut Aide macro excel débutant
    Salut a Tous, voila j'ai un souci au niveau du développement d'une macro,je ne sais pas cmt faire.Un peu d'aide serait la bien venue.

    Voici ce que je voulais faire dans un premier temps:


    Petit topo du sujet:

    J'ai 1 feuille excel.


    Feuill1:
    -------A---------B----------------C----------------D-----------E
    1--VOIT_NOM--VOIT_FLUX---VOIT_tRANSPORT---VOIT_DIV---VOIT_USINE
    2 ---1234--------1-------------UPS----------------bleu--------Paris
    3 ---1234--------2--------------TnT--------------Rose----------
    4----5678--------1-------------TnT----------------Noir---------Rome
    5----4321--------1------------TnT-----------------Noir----------Venise
    5----4321--------2------------UPS----------------Jaune-----------
    6----4321--------2------------UPS----------------Jaune-----------

    Ce tableau traite d'envois de voitures.

    Petites explications:
    En A La référence de flux concernant la meme voiture.
    En B ,1 si l'envoi de la voiture est de l'usine vers client,2 l'inverse.En E, le nom de l'usine,
    mais seulement lors des flux de Usine vers Client.

    C'est un tableau raccourci,il y a sinon d'autres colonnes et des milliers de lignes.
    Ce que j'aimerais faire,c'est:
    Que la macro check le tableau d'abord en VOIT_USINE, si il y a quelque chose(donc par exemple pour la premiere ligne : Paris)
    il va se reporter a VOIT_NOM(donc pour la premiere ligne 1234) et ensuite va parcourir le tableau et récuperer toutes les lignes avec le meme VOIT_NOM)
    puis ensuite va copier ces lignes dans une nouvelle feuille.

    Voila je seche un peu, je pense qu'il faut utiliser pas mal de boucles.Mais étant débutant ,de l'aide pourrait m'etre précieuse.

    Je vous remercie.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Salut,

    Pourquoi ne pas faire un tri avec comme critères:
    1- VOIT_USINE
    2- VOIT_NOM

    et hop ... les lignes qui t'intéressent se suivent .

    A+
    PPz

  3. #3
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    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
    Dim LastLig As Long, i As Long
    Dim LastCol As Integer, j As Integer
     
    Application.ScreenUpdating = False
    'adapter les noms des feuilles, Data et resultat à ton classeur
    'le but est de copier chaque référence de flux comportant renvoi usine client
    With Sheets("Data")
        If AutoFilterMode Then .Range("A1").AutoFilter
        LastLig = .Range("A1").End(xlDown).Row
        LastCol = .Range("A1").End(xlToRight).Column
        .Cells(2, LastCol + 1).Formula = "=if(mod(sumif(" & .Range("A2:A" & LastLig).Address & "," & .Range("A2").Address(0, 0) & "," & .Range("B2:B" & LastLig).Address & "),2)=0,0,1)"
        .Cells(2, LastCol + 1).AutoFill .Range(.Cells(2, LastCol + 1), .Cells(LastLig, LastCol + 1))
        .Range("A1").AutoFilter field:=LastCol + 1, Criteria1:="1"
        .Range(.Cells(1, 1), .Cells(LastLig, LastCol)).SpecialCells(xlCellTypeVisible).Copy Sheets("Resultat").Range("A1")
        .Range("A1").AutoFilter
        .Columns(LastCol + 1).ClearContents
    End With
    dans ton exemple, la totalité des lignes ou j'ai mal compris

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    En fait ce n'est qu'une étape car je vais comparer ces groupes de données apres.

    Donc imaginons que toutes les lignes ne sont pas classés.Les VOIT_NOM ne sont pas en groupes.J'aimerai qu'en partant de la VOIT_USINE,on retrouve sa VOIT_NOM et puis les lignes qui contiennent aussi cette VOIT_NOM et les copier ensemble dans une nouvelle feuille excel.

    Par exemple si g ca:

    -------A---------B----------------C----------------D-----------E
    1--VOIT_NOM--VOIT_FLUX---VOIT_tRANSPORT---VOIT_DIV---VOIT_USINE
    2 ---1234--------1-------------UPS----------------bleu--------Paris
    3----4321--------1------------TnT-----------------Noir----------Venise
    4----4321--------2------------UPS----------------Jaune-----------
    5----5678--------1-------------TnT----------------Noir---------Rome
    6----4321--------2------------UPS----------------Jaune-----------
    7 ---1234--------2--------------TnT--------------Rose----------

    je devrais avoir ca/pas forcément exactement,mais quelque chose de classé:

    -------A---------B----------------C----------------D-----------E
    1--VOIT_NOM--VOIT_FLUX---VOIT_tRANSPORT---VOIT_DIV---VOIT_USINE
    2 ---1234--------1-------------UPS----------------bleu--------Paris
    3 ---1234--------2--------------TnT--------------Rose----------
    4----5678--------1-------------TnT----------------Noir---------Rome
    5----4321--------1------------TnT-----------------Noir----------Venise
    6----4321--------2------------UPS----------------Jaune-----------
    7----4321--------2------------UPS----------------Jaune-----------

    Pour faire ca ,il faut donc partir de la VOIT_USINE,car c'est la clé pour le regroupement.Puis checker la VOIT_NOM correspondant a cette VOIT_USINE et regrouper toutes les lignes ayant cette VOIT_NOM.


    J'ai essayé ton code, et quand j'ai mis les lignes dans le désordre comme ci dessus, ca recopier les lignes.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Au vu de ton exemple, j'ai l'impression que tu fais le contraire:
    1- les lignes du même véhicule (VOIT_NOM) sont rassemblées
    2- puis on ordonne suivant VOIT_USINE

    pour être certain il faudrait que tu ajoutes des enregistrements :
    4321--------1------------TnT-----------------Noir----------Paris
    4321--------1------------TnT-----------------Noir----------Rome
    5678--------1------------TnT-----------------Noir----------Paris
    5678--------1------------TnT-----------------Noir----------Venise
    1234--------1------------UPS----------------bleu----------Rome
    1234--------1------------UPS----------------bleu----------Venise

    A+
    PPz

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    Les lignes en VOIT_FLUX 1 sont des flux de usine vers client donc elles auront une VOIT_USINE(la ville de l'usine) mais les VOIT_FLUX 2 ,du client vers l'usine(s'il renvoie la voiture par exemple) aura la meme VOIT_NOM parceque c'est la meme voiture mais n'aura pas de VOIT_USINE.Donc pour regrouper les lignes correspondant a la meme VOIT_NOM, il faudra partir d'une ligne de flux 1 et regarder sa VOIT_USINE.Puis a partir de la VOIT_NOM correspondant a cette VOIT_USINE, regrouper les données ayant la meme VOIT_NOM.Il faut savoir qu'il n'y aura pas 2 fois le meme VOIT_USINE dans le tableau.Seulement une fois.

    Je ne sais pas si c'est clair.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    si j'ai bien compris, une voiture va de l'usine à un client dans ce cas :
    - VOIT_NOM : est l'identifiant unique de la voiture (numéro de série par exemple)
    - VOIT_FLUX : est égal à 1
    - VOIT_USINE : est l'usine de départ
    - le reste est moins important.

    Dans certain cas la voiture est renvoyée par le client, dans ce cas :
    - VOIT_NOM : est l'identifiant unique de la voiture (numéro de série par exemple)
    - VOIT_FLUX : est égal à 2
    - VOIT_USINE : est vide
    - le reste est moins important.

    Donc :
    - un numéro de VOIT_NOM apparaît au plus deux fois
    - il ne peut pas y avoir de flux 2 sans flux 1
    Ce n'est pas ce que je vois dans ton exemple, il y a 2 lignes
    4321--------2------------UPS----------------Jaune-----------

    Donc je n'ai pas encore compris ton problème.
    A suivre

    PPz

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    Oui parcequ'il peut y avoir 2 fois le flux 2 pour la meme VOIT_NOM.1: flux 1 et 1 ou 2 : flux 2.je n'avais pas préciser excuse moi.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Moralité, il faut faire un tri sur :
    - critère 1 : VOIT_NOM (ordre croissant)
    - critère 2 : VOIT_FLUX (ordre croissant)


    (Nota : pour faire un tri il faut sélectionner l'intégralité de ton tableau et préciser si la première ligne est un titre ou un ligne du tableau)

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    Le truc c'est que je veux que ce soit automatique.Je peux avoir différents tableaux avec différentes lignes, lorsque j'execute ma macro,elle fera le regroupement.

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Il faut faire une synthèse de tous les tableaux.

    Toutes ces données sont elles dans le même classeur ?
    Combien y a t il de feuille à synthétiser?
    Combien de lignes à synthétiser ?
    Peut-on imaginer un autre classeur qui contienne la synthèse ?

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    Je n'ai qu'une feuille(tableau).Avec des milliers de lignes.Et je veux que le résultat s'affiche dans une nouvelle feuille.Il n'y a pas de nombre de lignes précises, j'aimerais que cela soit assez flexible, d'où la complexité.L'utilité de partir de VOIT_USINE est sans doute plus compliqué ,mais j'ai besoin de cette méthode la.

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Si tu as besoin de regrouper tout ce qui est parti de la même usine, il faut faire le tri dans ce sens :

    - critère 1 : VOIT_USINE (ordre croissant)
    - critère 2 : VOIT_NOM (ordre croissant)
    - critère 3 : VOIT_FLUX (ordre croissant)

    Avant de faire plus compliqué il faut vérifier que c'est le bon tri.

    PPz

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    J'ai essayé mais ca fait pas ce que je veux comme je l'avais expliqué, et ensuite ca reste malheureusement trop manuel :s Mais merci en tout cas de ton aide.

  15. #15
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Citation Envoyé par obie78 Voir le message
    ca reste malheureusement trop manuel
    Quand nous aurons trouvé comment faire le tri cela sera un jeu d'enfant de faire la macro.

    Questions :
    - est-il possible d'ajouter une colonne à ta table ?
    - peux tu me donner le nom de la feuille contenant la table
    - peux tu me donner le nom de la feuille devant contenir la synthèse ?

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    Non il n'est pas possible de rajouter une colonne.Enfin normalement non, pourquoi tu voulais rajouter quoi?

    Et mon tableau de départ est sur "Feuil1" et le résultat sera sur "Feuil2" mais bon on peut changer.

  17. #17
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Voici ma solution
    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
    Sub Tri_Excel()
    '
    ' Recopie de la feuille "Feuil1" dans "Feuil2"
        Sheets("Feuil1").Select
        Cells.Select
        Selection.Copy
        Sheets("Feuil2").Select
        Cells.Select
        ActiveSheet.Paste
     
    ' Premier Tri
        ' Critère 1 : Voit_Nom
        ' Critère 2 : Voit_Flux
        ' Critère 3 : Voit_Usine
        Columns("A:E").Select
        Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Key2:=Range("B2") _
            , Order2:=xlAscending, Key3:=Range("E2"), Order3:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
            xlSortNormal
     
    ' Ajout d'une colonne
        Cells(1, 7) = "Col Sup."
            I_ligne = 1
        Do
            I_ligne = I_ligne + 1
            V_Nom = Cells(I_ligne, 1)
            If V_Nom = "" Then Exit Do      ' Test de fin
            V_Flux = Cells(I_ligne, 2)
            V_Usine = Cells(I_ligne, 5)
     
            ' Logique sur la variable Suplémentaire
            If V_Flux = 1 Then
                V_enCours = V_Nom
                V_C_Sup = V_Usine
            Else
                If V_Flux = 2 And V_Nom = V_enCours Then
                Else
                    V_C_Sup = ""
                End If
            End If
     
            Cells(I_ligne, 7) = V_C_Sup
        Loop
     
    ' Second Tri
        ' Critère 1 : Col Sup.
        ' Critère 2 : Voit_Nom
        ' Critère 3 : Voit_Flux
        Columns("A:G").Select
        Selection.Sort Key1:=Range("G2"), Order1:=xlAscending, Key2:=Range("A2") _
            , Order2:=xlAscending, Key3:=Range("B2"), Order3:=xlAscending, Header:= _
            xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, DataOption3:= _
            xlSortNormal
     
    ' Suppression de la colonne suplémentaire si indispensable
    ''    Columns("G:G").Select
    ''    Selection.Delete Shift:=xlToLeft
     
        Range("A1").Select
    End Sub
    Je l'ai essayé avec le jeu suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    VOIT_NOM	VOIT_FLUX	VOIT_tRANSPORT	VOIT_DIV	VOIT_USINE
    1234	1	UPS	Bleu	Paris
    4321	2	UPS	Jaune	
    5678	1	TnT	Noir	Rome
    4321	1	TnT	Noir	Venise
    4321	2	UPS	Jaune	
    1234	2	TnT	Rose	
    9876	1	UPS	Bleu	Paris
    9876	2	TnT	Rose	
    5555	2	UPS	Jaune

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Août 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 22
    Par défaut
    Salut, alors j'ai testé ta macro et sur mon petit tableau ca marche nickel.Je te remercie vraiment pour ton aide.Je testerai demain sur des plus gros tableaux avec des milliers de lignes et je te tiendrais au courant.

    Sinon j'ai juste quelques petites questions.En gros dans ta colonne G tu écris les noms d'usines, afin de faire ton tri grâce à ca, si j'ai bien compris?
    La fonction recherche_v peut faire un tri de la même facon?

    En tout cas je te remercie de ce que tu as fait, ca m'aide vraiment beaucoup.

  19. #19
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    La fonction recherche_v ne recherche qu'un élément.
    Comme on souhaite faire un classement complet sur toutes les usines le Tri est préférable.

    La solution proposée ne comporte qu'une boucle, elle doit aller très très vite.
    Merci de me tenir au courant
    A suivre

    PPz

  20. #20
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    J'ai donc testé sur d'autres tableaux avec d'autres données.Et j'ai remarqué qu'apparament dans VOIT_FLUX si tu met 55 a la place du 1 et 56 a la place du 2 ou 98 et 99 par exemple, la ca ne marche plus.Je n'ai pas trouvé comment régler le probleme.
    Il est préférable d'éviter les messages perso, c'est plus compliqué de répondre.

    Dans les spécifications tu m'avais dit Voit_Flux est égal à 1 ou 2. La valeur de VOIT_FLUX sert à remplir la colonne supplémentaire.
    Cela marche donc pour 1 et 2.

    On peut changer mais il faut une logique implacable.
    1 : de l'usine vers le clent si VOIT_FLUX =< 55
    2 : retour du client si VOIT_FLUX >=56
    Cette modification doit être à ta portée.

    PPz

Discussions similaires

  1. Aide macro excel
    Par gregtw29 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 13/06/2012, 17h11
  2. Aide macro excel
    Par Orbichoox dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 22/05/2012, 09h29
  3. aide macro excel
    Par bensof1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/03/2011, 19h39
  4. [XL-2007] Aide macro excel
    Par maxxxime dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/06/2010, 14h13
  5. Aide macro Excel
    Par lololasticot dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/11/2007, 11h53

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