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 :

Création d'un nouveau classeur à partir d'éléments cochés dans un classeur existant VBA [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club Avatar de NullenVBA
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Création d'un nouveau classeur à partir d'éléments cochés dans un classeur existant VBA
    Bonjour tout le monde !!!

    Nouveau défi pour moi (et pour vous aussi du coup lol), j'aimerai élaborer une macro qui me permets de copier, dans un nouveau classeur, les feuilles d'un classeur existant mais UNIQUEMENT avec les données cochées !!!
    Je m'explique :

    Le document existant concerne différents fournisseurs, chaque feuille correspond donc à un fournisseur. Chaque fournisseur a sa liste de produit à la vente, chaque produit est précédé d'une case à cocher.

    Objectif :
    Lorsque je coche des produits à commander chez un fournisseur (ou plusieurs), j'aimerai que cela apparaisse dans un nouveau classeur reprenant les onglets du/des fournisseurs concerné(s), avec uniquement les produits cochés qui figure sur leur feuille respective (en gros créer un classeur répertoriant uniquement les commandes à passer).

    Je ne sais pas si c'est possible de cette manière ou s'il faut créer un classeur vierge dans lequel importer les données. J'ai fouiller un peu partout en essayant d'adapter quelques codes trouvés sur le net mais aucun ne correspond réellement à ce que je cherche donc j'en suis toujours au point mort ....

    PLEASE HELP !!!!!

    ci-joint le document de base (fournisseurs) : FOURNISSEURS.xlsx

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Premièrement, je ne vois pas le besoin de cases à cocher.
    Du coup, ça rend plus lourd le fichier et rend la tâche plus complexe.

    Si tu entres des quantités à commander, nul besoin de cocher quoique ce soit.
    Tu peux alors filtrer tes tables sur la colonne des quantités et copier ces lignes filtrées...
    MPi²

  3. #3
    Futur Membre du Club Avatar de NullenVBA
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Arf je suis d'accord avec toi mais ...
    En effet se serait une solution, mais le document en question ne sera pas manipuler par moi-même, hélas... Donc en gros la personne qui fera mumuse avec veut quelques chose d'ultra simple à manipuler genre "je clique sur un truc et ça me fait tout" - Dixit la personne en question quand elle m'a "expliquer" ce qu'elle voulait ... Bref on va pas lui demander d'aller chercher midi à quatorze heure à cette brave personne hein lol

    Ton poste m'a néanmoins fait réfléchir sur la procédure et plus particulière sur sa simplification... Donc au lieu de créer un nouveau classeur j'ai induis en première commande l'ouverture d'une boîte de dialogue "enregistrer sous" permettant de ce fait une "transformation" du ficher source "fournisseurs" en ficher "commande" (ouai ça simplifie déjà pas mal surtout à mon niveau de connaissance en VBA lol).

    Par contre je rencontre quelques problèmes :

    1 ) J'ai l'impression que la commande permettant l'application de la macro à toutes les feuilles ne s'applique pas...

    2 ) Je ne suis pas sûre que la commande de suppression de ligne combinée au comptage de dernière ligne non vide soit super efficace...

    3 ) Je n'ai toujours pas trouver comment faire pour supprimer les onglets "vides" en dernier lieu sans demande de confirmation de suppression ....

    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
    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
    Sub Enr_sous() 'ouvre la boîte de dial enregistrer sous permettant de passer d'un doc Fournisseur à un doc Commande sans modifier le doc Fournisseur
     
    Application.Dialogs(xlDialogSaveAs).Show
     
     Call Toutes_Feuilles
     
    End Sub
     
    Sub Toutes_Feuilles() 'Permet de lancer la macro sur toutes les feuilles du classeur
     
      Dim sheet As Worksheet
     
         For Each sheet In ActiveWorkbook.Sheets
     
            sheet.Activate
     
        Call Macro1
       Next sheet
    End Sub
     
     
    Sub Macro1() 'Macro permettant de supprimer les lignes indiquant "Faux"
     
    Dim Derligne As Long
     
     Derligne = Range("B" & Rows.Count).End(xlUp).Row 'recherche de la derniere ligne non vide
     
    Dim compt As Integer 'code de suppression des lignes dont la case en colonne B est décochée
     
        compt = 11 'Ligne à partir de laquelle je commence la vérif
     
        Do While compt <= Derligne 'ligne à laquelle s'arrête la vérif
     
            If Cells(compt, 2).Value = Faux Then  '
               Cells(compt, 2).EntireRow.Delete
     
            Else
     
                compt = compt + 1 'Juste pour éviter que ça me saute des lignes
     
            End If
        Exit Do
       Loop
     
    End Sub
    Si on peut m'apporter un peu de lumière ça m'aiderait beaucoup.

    Merci d'avance

  4. #4
    Membre confirmé
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Points : 584
    Points
    584
    Par défaut
    Pour ce qui est de l'enregistrement le plus simple c'est de créer un nouveau fichier Excel avec le nombre de feuilles souhaitées suivant un modèle non ?

    Si c'est ce que tu souhaites j'avais ce module dans une de mes macros (à adapter à ton besoin du coup ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    '--------------Création d'un nouveau fichier excel--------------
    Dim N_Excel As Excel.Application
     
        Set N_Excel = CreateObject("Excel.Application")
        N_Excel.SheetsInNewWorkbook = 1 'nombre d'onglets dans le nouveau classeur
     
    N_Excel.Workbooks.Add Template:="C:\Chemin\Templates\Ton modèle.xltx" 'Utilisation d'un modèle
    ActiveWorkbook.SaveAs ("C:\Chemin\Le nom de ton nouveau fichier.xls") 'Sauvegarde du fichier
    'Nombre de feuilles dans le excel correspondant au nombre de cellules
    For yc = 1 To dicoc.Count - 1
    Sheets("Cellule 1").Copy After:=Sheets(1)
    Next yc
    '------------Fin création d'un nouveau fichier excel------------
    C'est en creusant qu'on fait des trous

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Comme je disais...
    Si la personne entre des quantités à commander, il suffit de faire une copie du fichier (SaveAs)
    Tu mets des filtres sur la ligne 10 et tu filtres les données = ""
    Tu supprimes ces lignes vides
    Il ne reste donc que les quantités commandées une fois le filtre enlevé.

    Si le nombre de lignes restant est 10, il n'y a donc pas de commande et tu supprimes la feuille.
    Tu peux aussi utiliser une formule pour vérifier s'il y a des commandes avant de filtrer (Application.WorksheetFunction.CountA(LaPlageDeQuantités))
    MPi²

  6. #6
    Futur Membre du Club Avatar de NullenVBA
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par Al__22 Voir le message
    Pour ce qui est de l'enregistrement le plus simple c'est de créer un nouveau fichier Excel avec le nombre de feuilles souhaitées suivant un modèle non ?
    Pas mal, je le garde de côté car il pourrait me servir à un moment donné
    Mais là, le souci c'est que le nombre d'onglets peut varier d'une année à l'autre (je ne serai probablement plus là au moment de rentrer les nouveaux marchés), la personne qui manipulera le doc a déjà du mal à distinguer un clic gauche d'un clic droit (bon ok c'est exagéré mais c'est pas si loin d'être ça) et le but c'est que de manière automatique les onglets inutiles (ne contenant aucun éléments à commander) disparaissent....

    D'où le Dialogs.ApplicationSaveAS.Show qui me permet de conserver le doc d'origine et de le basculer en nouveau doc, tout en permettant à l'utilisateur de renommer le fichier et de l'enregistrer où il veut...

    Je suis une quiche en VBA mais ceux qui me demande des docs sont carrément pas à l'aise avec Office tout court...

  7. #7
    Futur Membre du Club Avatar de NullenVBA
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par parmi Voir le message
    Comme je disais...
    Si la personne entre des quantités à commander, il suffit de faire une copie du fichier (SaveAs)
    Tu mets des filtres sur la ligne 10 et tu filtres les données = ""
    Tu supprimes ces lignes vides
    Il ne reste donc que les quantités commandées une fois le filtre enlevé.

    Si le nombre de lignes restant est 10, il n'y a donc pas de commande et tu supprimes la feuille.
    Tu peux aussi utiliser une formule pour vérifier s'il y a des commandes avant de filtrer (Application.WorksheetFunction.CountA(LaPlageDeQuantités))
    Oui désolé j'ai oublié de préciser dans ma dernière réponse que oui j'adhère au tri par rapport aux quantités et non par rapport aux cases (qui vont disparaître du doc car soucis de suppression aussi lol)....

    Sur la procédure c'est ce que j'aimerai faire. Je viens de voir que mon code est encore sur la valeur fausse mais c'est un détail suffit que je change le 2 en 3 et la value = Faux par Value = 0.
    Mais mon problème reste entier .... je ne sait pas comment le coder correctement puisque mon code actuel ne tourne pas, il s'arrête au parcour des feuilles (que j'intègre afin que la macro s'applique à tous mes onglets et pas qu'au premier)...

    bref je vais tenter de bidouiller encore un peu voir d'où vient l'erreur....

  8. #8
    Futur Membre du Club Avatar de NullenVBA
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2016
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Ouiiiiiiiiii !!!!!!
    EUREKA J'AI TROUVE !!!!!

    Enfait c'est tout bidon, mais comme quoi la fatigue a du bon ça rend feinéant

    Avec ce code lorsque je clique sur le petit bouton UseForm :

    -1) J'enregistre le Doc avant toute modif en le renomant et en le plaçant où je veux grâce à l'ouverture de "Enregistrer sous..."
    -2) Ensuite mes tableaux sont triés et ne contiennent plus que ce qui est à commander
    -3) Et enfin les onglets sans commande à effectuer sont supprimer sans message de confirmation...

    Utilisable à l'infini et d'une simplicité incroyable... je m'en tape encore la tête contre un mur de pas y avoir pensé de suite !!! MDR

    Merci de m'avoir donné des pistes ça m'a aidé

    Voici le code si jamais quelqu'un en aurait besoin :

    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
    'Macro pour créer un nouveau document trié, à partir d'un document source.
     
    Sub Enr_sous() 'ouvre la boîte de dial enregistrer sous permettant de passer d'un doc Fournisseur à un doc Commande sans modifier le doc Fournisseur
     
    Application.Dialogs(xlDialogSaveAs).Show
     
     Call Chk_Feuil
     
    End Sub
     
     
    Sub Chk_Feuil() 'Permet d'activer chaque onglet les un après les autres
     
      Dim sheet As Worksheet
     
         For Each sheet In ActiveWorkbook.Sheets
     
            sheet.Activate
     
        Call SuppressionLignes
        Call SuppressionFeuil
     
       Next sheet
     
    End Sub
    Sub SuppressionLignes() 'Ici on supprime les lignes dont les cellules de la colone C sont vides
     
         Range("C11:C10000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete 'suppression de la ligne entière
          'Chez moi c'est à partir de la C11 pour le tri, j'ai mis C10000 pour stopper mais même au max ça rame pas
    End Sub
     
    Sub SuppressionFeuil() 'Suppression des onglets ne contenant pas de sélection
     
     
        With Application 'Empêche la demande de confirmation de suppression
            .ScreenUpdating = False
            .DisplayAlerts = False
        End With
     
        If Cells(11, 3).Value = "" Then 'Condition pour déterminer quel onglet doit être supprimé
           ActiveSheet.Delete       '11,3 Correspond à la ligne 11 colone C
     
        End If
     
      Application.ScreenUpdating = True
     
    End Sub
     
     
    'Et voilà :)

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    N'oublie pas de remettre le Application.DisplayAlerts à True à la fin...
    MPi²

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

Discussions similaires

  1. Créer un UserForm dynamique dans un classeur à partir d'un autre
    Par Mariquiqui dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 30/11/2010, 18h11
  2. Réponses: 20
    Dernier message: 27/07/2010, 15h52
  3. [XL-2003] Rédiger une macro dans un classeur à partir d’une macro d'un autre classeur
    Par Roms un dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/11/2009, 15h44
  4. Réponses: 14
    Dernier message: 02/10/2009, 10h28

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