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 :

Comment faire évoluer ma Macro VBA pour tenir cpte de 3 points : ;-))


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Comment faire évoluer ma Macro VBA pour tenir cpte de 3 points : ;-))
    Comment faire évoluer ma Macro VBA ?? pour tenir cpte de 3 points :

    Bonjour à tous et toutes !!

    J’ai une macro VBA qui est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Remplir()
    Dim i As Byte, dl&, p As Range
    With Sheets("Matrice principale")
        dl = .Cells(Rows.Count, "B").End(3).Row
        On Error Resume Next
        Set p = .Range("B10:AB" & dl).SpecialCells(xlCellTypeConstants, 5)
        For Each c In p
            If c = 1 Then
                .Cells(c.Row, "AD").Resize(, 4).Copy Sheets(CStr(.Cells(8, c.Column))).Cells(Rows.Count, "B").End(3).Offset(1, 0)
            End If
        Next
    End With
    End Sub
    Mon besoin de fonds est le suivant :

    J’ai une matrice principale dans laquelle il y a des lignes de données…ces lignes de données seront complétées au cours du temps. Ensuite je veux envoyer ces lignes de données dans différents onglets numérotés de 1 à 27.

    Lorsque je vais lancer la macro «Remplir », en fonction de la présence du « 1 » ou pas dans le tableau de la matrice la Macro va affecter la donnée x dans l’onglet 20 par exemple.

    Ensuite, ayant par exemple 50 lignes de données dans cet onglet 20 je vais les trier manuellement selon une méthode empirique et non automatisable….

    Et la ç’est le gros Hic !! parce que lorsque je vais vouloir ajouter des lignes de données dans ma « Matrice Principale « , si je relance cette Macro « Remplir » il va remettre une seconde fois dans les onglets les données qui y sont déjà …donc pour éviter ça je dois utiliser la fonction RAZ pour nettoyer tous mes onglets..…mais la du coup je perds tous les tri manuel que j’aurais fait dans chacun des 27 onglets ….bref il me reste plus qu’à prendre une corde en gros ……


    Et donc avec cette Macro, j’ai 3 problèmes :

    1/ je voudrais délimiter une zone d’analyse de l’onglet « Matrice Principale », par exemple de ‘‘B10 à AB1000 ’’, parce que tel que c’est rédigé…si je mets des « 1 » au milieu du tableau alors qu'il n'y en a aucun dans les 100 premières ligne, la macro s’arrête avant de les avoir trouvé à priori…

    2/ Cette macro envoie des lignes de données de l’onglet « Matrice Principale » vers 27 autres onglets. Le problème c’est que si j’ajoute une ligne de donnée à ma "Matrice Principale", et que je re-lance la macro « Remplir » il va remettre une seconde fois les données dans chacun des onglets ….et donc je me retrouve avec 2 fois les données dans chaque onglet….
    Ce que je voudrais c’est que quand je relance la Macro « Remplir », avant d’incrémenter une nouvelle fois la donnée z dans l’onglet x, la Macro vérifie si cette ligne de donnée est déjà ou non présente dans cet onglet (on peut définir dans ce cas également une zone d’analyse dans chaque onglet de B3 à E 1000 par exemple).

    3/ Enfin si au cours du temps, je souhaite enlever dans la « Matrice Principale » le «1» pour l’onglet 27 de la ligne de donnée 56, ce que j’aimerais c’est qu’il y ait une vérification inverse….. c'est-à-dire par exemple dans l’Onglet 27 on a la donnée de la ligne 56 de la matrice….donc on va voir dans l’onglet « Matrice Principale » à la ligne 56 et dans la colonne 27 si il y a bien un 1. Si ça n’est pas le cas, on efface cette ligne de donnée de l’onglet 27 et on remonte les données qui sont en-dessous d’une ligne (pour avoir un tableau uniforme).

    Cette fonction ou cette seconde macro permettrait de prendre en compte les éventuellement changements que je ferai en cours de route dans la « Matrice Principale »….

    Je sais ça fera sans doute des macros qui vont mettre du temps à s’éxécuter mais si vous avez une autre approche de programmation plus ergonomique mais qui respectera le fait que je ne veux pas perdre le tri manuel que je vais faire dans chacun des onglets …je suis preneur !!!!!!! ;-))

    Merci beaucoup pour votre aide, je vous joint en annexe le fichier excel sur lequel je travaille …Test 3 -03MAR2015.xlsm

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 773
    Points : 28 637
    Points
    28 637
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Plusieurs possibilités s'offrent à toi.
    1) Tu choisis l'option que tu décris (Suppression des valeurs dans les feuilles) et au lieu de trier manuellement, tu fais un tri par procédure VBA
    2) Tu prévois, une colonne où tu places un flag (par exemple MAJ ou VRAI) qui indique que la donnée à déjà été mise à jour dans les onglets. Cela implique bien entendu qu'il s'agit de nouvelles données et pas des modifications et vraisemblablement, tu devras encore effectué un tri par VBA.
    3) Tu prends l'option de créer le nombre de feuilles souhaitées avec des formules qui font référence à la feuille de saisie (C'est l'option que je prendrais) mais n'est-il pas possible d'avoir unes seule feuille de synthèse avec formules qui permet avec les outils comme la liste des validations de données de faire des visualisations avec critères.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2015
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2015
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Bonjour Philippe et merci d'avoir pris la peine de me lire,

    Pour ton 1) je suis d'accord ...sauf que ma méthode de tri actuellement n'est pas du tout automatisable et ne le sera sans doute jamais ...

    Pour le 2) en prévoyant une colonne avec Flag c'est un peux fastidieux et je risque de m'emmêler les pinceaux ...

    pour le 3) si je te comprends ça serait un truc du genre "si "1" dans colonne 3 et ligne 12 alors envoyer les données de la ligne 12 dans l'onglet 1
    le seul souci c'est que ça non plus ça ne me permettra pas de re-placer (re-trier) les données dans chaque onglet comme je le souhaite....



    Pour mon point 1/ Est-ce qu'il n'est pas possible de modifier ma VBA actuel "Remplir" pour en tenir compte ?



    Pour mon point 2/ si il y a un "1" dans la colonne 25 et la ligne 150 de ma matrice principale, avant d'affecter les données de la ligne 150 colonne AD/AE/AF/AG dans l'onglet 25, la Macro devra vérifier que la donnée de la colonne AF de la Matrice Principale (ligne 150) n'est pas présente qq part dans la colonne D de l'onglet 25. Là la vérification s'arrête lorsqu'il n'y a plus de donnée dans la colonne G de l'onglet 25.

    Si dans l'onglet 25, pas de donnée de la colonne AF de la Matrice Principale (ligne 150) alors on ajoute les données AD/AE/AF/AG de la ligne 150 de la Matrice Principale à la suite du tableau de cet Onglet (sans perturber l'ordre des autres données).

    Si dans l'onglet 25, il y a la donnée AF de la matrice principale (ligne 150), alors on vérifie aussi que la donnée AG de la ligne 150 de la matrice principale est également présente dans l'onglet 25 :
    - si il est également présent alors on ne fait rien (c'est à dire on n'ajoute pas les données de la ligne 150)
    - si il n'est pas présent alors on ajoute la ligne de donnée 150 de la matrice principale dans cet onglet

    Je suis obligé de procéder comme cela parce que dès fois mes données en AF sont similaires et dès fois je n'ai pas de donnée en AG.....

    donc je dois passer par un double test ....




    Pour mon point 3/ Est-ce qu'il n'est pas possible de créer une macro VBA distincte de Mise à Jour que je ne vais exécuter que de temps en temps et qui va tester inversement pour chaque onglet de données que si :

    Pour l'onglet 1 :
    Les données B3/C3/D3/E3 de mon onglet 1 (par exemple) sont égales à ma ligne de données "x" de mon onglet Matrice Principale" colonnes AD/AE/AF/AG alors j'ai bien la colonne B de la ligne "x" = 1 sinon il faut effacer la ligne de donnée B3/C3/D3/E3 de mon onglet 1 et remonter les données qui sont en dessous.

    Pour l'onglet 20 :
    Les données B3/C3/D3/E3 de mon onglet 20 (par exemple) sont égales à ma ligne de données "z" de mon onglet Matrice Principale" colonnes AD/AE/AF/AG alors j'ai bien la colonne U de la ligne "z" = 1 sinon il faut effacer la ligne de donnée B3/C3/D3/E3 de mon onglet 20 et remonter les données qui sont en dessous.

    etc...



    Je viens de découvrir le VBA pas plus tard que dimanche matin et je suis entrain de potasser une doc sur ce type de programmation ...alors comme je suis dans l'urgence...j'essaye de trouver de l'aide pour rédiger ces Macros pour ce fichier en attendant que je puisse les maitriser suffisamment ;-))

    Merci pour vos coups de main bien utiles !!!et bonne journée à tous et toutes !!!

Discussions similaires

  1. [Toutes versions] Macro VBA pour fonction "retour" sur Power Point
    Par remifontanille dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 09/04/2015, 15h50
  2. [XL-2013] comment creer une fonction en VBA pour faire concatenate et right voir exemple
    Par Abourarda dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/04/2014, 21h56
  3. Réponses: 4
    Dernier message: 26/04/2007, 08h41
  4. [VBA-W]Comment faire suivre les macros d'un modèle?
    Par gusrom86 dans le forum VBA Word
    Réponses: 7
    Dernier message: 23/02/2006, 10h26
  5. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07

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