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 :

Macro copier/coller et champ recherche + afficher cellule absolue. [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Acheteur aéronautique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Acheteur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut Macro copier/coller et champ recherche + afficher cellule absolue.
    Bonjour à tous,

    J'aimerais développer un outil excel pour l'analyse des top costs au sein de mon service et je rencontre quelques problèmes, peut-être pourrez-vous m'aider ?

    Description du projet :
    • 2 feuilles dans le classeur :
      • Feuille 1 : Ma base de données qui contient plusieurs colonnes (A=acheteur ; B=fournisseur ; C=CA)
      • Feuille 2 : l'interface utilisateur

    • L'interface utilisateur se dessine comme ceci :
      • Une cellule dans laquelle on rentre le nom de l'acheteur (on l'appellera Cx)
      • Un bouton macro pour lancer la moulinette
      • Un tableau de 10 lignes en dessous pour montrer les 10 plus gros fournisseurs


    Mes problèmes :

    • La macro :
      • Ce que j'ai fait : J'ai tenté de faire une macro simple à l'aide d'un copier/coller. C'est à dire que je lance l'enregistrement, je copie ma cellule Cx, je change de feuille, je vais dans l'onglet tri de la colonne acheteur, je colle et je valide. Ensuite je vais sur la colonne CA et je trie par ordre décroissant.
      • Problème : la macro me copie l'unique nom que j'avais écris dans la cellule Cx, dès que je change le contenu de la cellule on en revient au nom avec lequel j'ai enregistré la macro.

    • Le tableau :
      • Je souhaite faire un tableau qui fait directement appel aux 10 premières lignes du tableau de la base de données trié après passage de la macro. Or, il m'est impossible de sélectionner une cellule dans l'absolu (je ne parle pas du signe $). Par exemple je souhaite recopier les cellules 1 à 10 de la feuille 1, tout en sachant que leur contenu change dès qu'on change le nom de l'acheteur


    Quelqu'un peut-il me donner une piste de travail ? J'ai passé 4h ce matin à retourner le web pour trouver une solution cependant rien ne me permet d'avancer à l'heure actuelle...

    Merci par avance !

    Maxime

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Je pense que tu te compliques la vie. Ce que tu veux faire est possible avec un simple filtre :
    Bandeau Données > Filtre
    Une fois le filtre installé, il te permet en trois clics de ne faire apparaitre que les lignes d'un acheteur donné (ou de plusieurs si tu le souhaites) et deux autres clics pour trier les fournisseurs (je suppose que c'est par valeur de CA), voir même (en deux clics) de n'afficher que les 10 ayant le plus gros CA.

    Et ça t'offrira une foultitude d'autres possibilités que n'apporterait pas ta macro.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut Pistes
    Je ne sais pas si je te comprends bien mais je vais faire de mon mieux.

    Premièrement peux-tu joindre un fichier et ton code.

    Voici la première idée qui me vient en tête:

    1°) tu copies ta feuille 1 en feuille 3
    2°) tu fais un delete qui supprime les noms qui sont différents de celui indiquer dans la feuille 2
    3°) tu fais un tri de ta colonne C
    4°) tu recopie les lignes 2 à 11 avec un for i= 1 to 10 ( car la ligne 1 correspond au titre). Si tu veux que le tableau soit sous le bouton, tu mets A2 ou A3 dans ton range

  4. #4
    Membre habitué
    Homme Profil pro
    Acheteur aéronautique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Acheteur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    Bonjour Menhir,

    Merci de ta réponse. En fait je ne me complique pas la vie, je veux simplement simplifier celle de notre service. Evidemment il est possible de tout faire à la main, cependant la base de données est mise à jour régulièrement et il y a beaucoup d'acheteurs dans le service.

    Ainsi chaque semaine c'est au minimum 20 fois la démarche.

    En revanche, si je fais une macro qui fait tout toute seule, je peux sortir des graphiques etc en un instant!



    @Had4789 : Merci beaucoup de ton intervention. Je vois où tu veux en venir, cependant deux choses :
    Comment supprimer les lignes qui ne contiennent pas le nom de l'acheteur demandé ?
    Je n'ai pas compris ton point 4.


    Voici ma macro actuelle :

    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
    Sub topcost()
    '
    ' topcost Macro
    '
     
    '
        Range("B3").Select
        Selection.Copy
        Sheets("Feuil1").Select
        Range("B4").Select
        ActiveSheet.Range("$B$4:$E$24").AutoFilter Field:=1, Criteria1:= _
            "Acheteur 1"
        Application.CutCopyMode = False
        ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort.SortFields.Add Key:=Range _
            ("E4:E24"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
            xlSortNormal
        With ActiveWorkbook.Worksheets("Feuil1").AutoFilter.Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Range("B4:E27").Select
        Selection.Copy
        Sheets("Feuil2").Select
        Range("A7").Select
        ActiveSheet.Paste
        Columns("D:D").EntireColumn.AutoFit
        Range("E7").Select
    End Sub

    Ci-joint un extrait du fichier
    Forum - Analyse TOPCOSTS.xlsx

  5. #5
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Spamev Voir le message
    Evidemment il est possible de tout faire à la main, cependant la base de données est mise à jour régulièrement et il y a beaucoup d'acheteurs dans le service.
    Le filtre, une fois en place, ne sera pas plus compliqué à utiliser que ta macro.
    Et il sera beaucoup plus simple à mettre en place (10s à tout casser).

    En revanche, si je fais une macro qui fait tout toute seule, je peux sortir des graphiques etc en un instant!
    Idem avec un filtre.
    Tu sélectionnes toutes tes données pour en faire un graphique.
    Si ensuite tu cliques pour ne faire apparaitre que les données de l'acheteur A, les autres données disparaitront aussi du graphique.

    Prends la peine d'essayer (ça ne te prendra qu'une minute et ça peut te faire gagner plusieurs jours).


    Un petit détail : ton fichier est un xlsx. J'espère que ta macro n'est pas dedans parce que sinon, tu risques de la perdre en quittant vu que les xlsx ne peuvent pas contenir de macro.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    J'ai juste modifier ta feuil1 comme sur l'image.

    Dis moi ce que tu en penses.


    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
    Sub Copie_feuil1()
            Dim WsName As String
     
                For Cpt = 1 To 1
     
            WsName = "Feuil1" & Cpt
             Sheets("Feuil1").Copy After:=Worksheets("Feuil2")
                   ActiveSheet.Name = "Feuil3"
     
                 Next Cpt
     
     
        End Sub
    Sub Suppression()
    Application.ScreenUpdating = False
    Dim i As Integer
    Sheets("Feuil3").Select
     
     
     
    With ThisWorkbook.Sheets("Feuil3")
    'Précisez le nom de votre feuille
                For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
    'je travaille sur la colonne c
    'Rows.count permet de retourner le nombre de ligne de la plage range
                            If .Range("A" & i).Value <> Sheets("Feuil2").Range("B3").Value Then
                                       .Rows(i).Delete
     
                            End If
                Next i
    End With
     
    End Sub
     
    Sub classement()
     
                  Range("A2:R3000").Sort key1:=Range("D2"), order1:=xlDescending
    End Sub
     
    Sub xp()
     
       Sheets("Feuil3").Range("A2:D12").Copy Destination:=Sheets("Feuil2").Range("A8:S20")
     
    End Sub
    Images attachées Images attachées  

  7. #7
    Membre habitué
    Homme Profil pro
    Acheteur aéronautique
    Inscrit en
    Juillet 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Acheteur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2014
    Messages : 10
    Par défaut
    @Had4789 :

    Merci pour ta macro, alors j'ai quelques soucis :
    Premièrement excel ne la veut pas en tant que telle, je suis obligé de faire 4 boutons avec chaque macro assignée dans l'ordre suivant : copie>sup>classement>xp

    Ensuite cela ne fonctionne pas du tout, sur ma feuil2 j'ai un tableau à 5 lignes qui s'affiche et qui est indépendant du nom de l'acheteur que j'ai entré initalement. Par ailleurs, je ne trouve pas la cellule dans laquelle il faut entrer le nom de l'acheteur (j'ai utilisé celle que j'avais initialement prévue)

  8. #8
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 271
    Par défaut
    Premièrement: pour avoir un seul bouton tu affecte la macro si dessous à ton bouton:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub tout
    Call Copie_feuil1
    Call Suppression
    Call classement
    Call xp
    La cellule pour entré le nom est B3 dans la feuille 2.

    Cela fonctionne parfaitement chez moi. voici un peu d'aider sur mon 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
    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
    Sub Copie_feuil1()
            Dim WsName As String
     
                For Cpt = 1 To 1
     
            WsName = "Feuil1" & Cpt
            'ce code permet de créer la feuil3
             Sheets("Feuil1").Copy After:=Worksheets("Feuil2")
                   ActiveSheet.Name = "Feuil3"
     
                 Next Cpt
     
     
        End Sub
    Sub Suppression()
    Application.ScreenUpdating = False
    Dim i As Integer
    Sheets("Feuil3").Select
     
     
     
    With ThisWorkbook.Sheets("Feuil3")
    'Je sélectionne la feuille3
     
                For i = .Range("A" & .Rows.Count).End(xlUp).Row To 2 Step -1
                'je dis que si la valeur de la cellule A est différente de la cellule B3 de la feuille B2 je supprime la ligne
     
                            If .Range("A" & i).Value <> Sheets("Feuil2").Range("B3").Value Then
                                       .Rows(i).Delete
     
                            End If
                Next i
    End With
     
    End Sub
     
    Sub classement()
    'Je fais un tri décroissant
                  Range("A2:R3000").Sort key1:=Range("D2"), order1:=xlDescending
    End Sub
     
    Sub xp()
    'Je copie les cellules du tablea A2:D20 de la feuil3 dans le tableau A8:S20 de la feuille 2
       Sheets("Feuil3").Range("A2:D20").Copy Destination:=Sheets("Feuil2").Range("A8:S20")
     
     
    End Sub
    Il faut que tu fasses attention à ne pas masquer tes lignes.

    Peux-tu joindre le fichier sur lequel tu appliques le code puis un fichier une fois le code appliquer pour que je vois un avant après.

    Merci

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

Discussions similaires

  1. [XL-2010] Problème macro copier-coller des cellules dans deux feuilles Excel
    Par benadry dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/04/2014, 19h05
  2. Réponses: 1
    Dernier message: 24/02/2014, 15h48
  3. Copier/coller la valeur d'une cellule selon recherche
    Par bastienb1 dans le forum Excel
    Réponses: 2
    Dernier message: 27/05/2013, 14h06
  4. macro copier coller couleur cellules
    Par bobafric dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/08/2012, 10h46
  5. Macro copier coller première cellule vide
    Par jul85 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 24/02/2008, 17h06

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