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 importer et supprimer des données


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    bonjour à tous
    Je suis nouveau ici, et je me permets de solliciter votre aide.
    Pour ma part, j'utilise excel au uotidien, mais je n'ai aucune connaissance de VBA ; aussi désolé si ma question semble un peu futile.
    Je vous explique mon probleme :
    Pour un besoin de reporting, je dois avoir un fichier avec un onglet source où je vois tous les departements mais chaque departement ne voit que le sien.
    Aussi, j'ai crée 6 fichier avec l'onglet source 1 et source 2;
    Aujourd'hui , je copie colle 6 fois l'onglet 1 et 6 fois l'onglet 2 ; sauf que le fochier fait des milliers de lignes et une fois sur 2 tout plante.

    pourriez vous m'aider s'il vous plait à :
    Créer une macro ui dirait
    Dans le fichier global qui est à cette adresse, prendre l'onglet 1 et 2 et les coller dans les fichiers
    Departement 1
    Department 2 etc
    le nom du departement est un code que je mets dans unnglet administration (poru qu'il ne colle que les données du 1 & du 2)
    je suis ensuite arrivé à créer des TCD/gcD , sauf que je dois tout remettre à la main pour les changer. Afin d'aller plus vite, j'ai ecris janvier et l'année dans deux colonnes séparées avec un format texte/nombre mais pas calendrier.
    Du coup , j'aimerais lancer une macro depuis le fichier global qui fait un copier coller vers le fichier du departement 1.
    lancer une seconde macro depuis le fichier departement 1 qui supprime toutes les données ne lui appartenant pas et qd je choisis la colonne mois année me met à jour tous mes TCD.
    Je me suis permis de mettre en pj deux fichiers poru vous montrer à quoi cela ressemble , ainsi que ma tentative de 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
        Mois_analyse = Cells(3, 5)
     
        If Month(Mois_analyse) < 10 Then
            DateCube = Year(Mois_analyse) & "0" & Month(Mois_analyse)
        Else
            DateCube = Year(Mois_analyse) & Month(Mois_analyse)
        End If
     
        ligne = 4
        While Not Cells(ligne, ) = ""
            Activite = Cells(ligne, 3)
            Sheets(Activite).PivotTables("Tableau croisé dynamique").PivotFields("[Temps].[Calendrier-Mois].[Annee]").CurrentPageName = _
                "[Temps].[Calendrier-Mois].[Mois].&[" & DateCube & "]"
            ligne = ligne + 1
        Wend
     
     
    End Sub
    Ficheir Global exemple.xlsx
    Ficheir departement 2.xlsx

    je sais que ce n'est pas le projet du siecle, mais par avance merci pour votre aide

    J'ai essayé de faire ce code pour le copier-coller , mais j'avoue avoir du mal. Si qqun peut m'aider svp?
    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
    Option Explicit
     
    Sub Tst()
    Dim LastRow As Long
    Dim WsDepart As Worksheet
    Dim WsDestination As Worksheet
     
        Set WsDestination = Sheets("Source1")
    	Set WsDestination = Sheets("Source2")
        Set WsDepart = Sheets("Source1) --> Du nouveau fichier ,  mais je ne sais pas où mettre l'adresse
     
     
        LastRow = WsDestination.Range("A:D" & Rows.Count).End(xlUp).Row
     
        Application.ScreenUpdating = False
        WsDepart.Range("A:D").Copy
        WsDestination.Range("A:D" & LastRow + 1).PasteSpecial xlPasteValues
        --> La je veux dire que si dans la colonne D, je vois les données des autres départements alors il faut les enlever.
    	J'essaye avec 
    	If D=value cel "Administration_A1" then true
    	If false = Delete  
     
     
     
        Set WsDestination = Nothing
        Set WsDepart = Nothing
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour,

    As-tu essayé les filtres avancés pour séparer tes données?
    Tuto: http://philippetulliez.developpez.co...dvancedfilter/

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    Bonjour
    Non je ne connais pas!
    Merci bcp! JE regarde et te fais un retour
    Mon fichier est lourd mais simple à premiere lecture ca devrait grandement aider.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    Re-Bonjour
    J'ai bien lu le tuto mais j'ai du mal quand même.
    Je souhaite utiliser la partie du tuto avec la macro.
    Par rapport à l'exemple, j'ai qqes questions :
    • Dans l’exemple ma compréhension est qu’on filtre une info par une info la BDD. Moi je souhaite splitter toute ma Base de Données en 6. Peux-tu me dire stp comment adopter le code ?
    • Est-ce que cela change qqe chose que l’export soit dans un fichier sur un réseau ?
    Merci pour ton aide

  5. #5
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Citation Envoyé par kardeparis Voir le message
    Re-Bonjour
    J'ai bien lu le tuto mais j'ai du mal quand même.
    Je souhaite utiliser la partie du tuto avec la macro.
    Par rapport à l'exemple, j'ai qqes questions :
    • Dans l’exemple ma compréhension est qu’on filtre une info par une info la BDD. Moi je souhaite splitter toute ma Base de Données en 6. Peux-tu me dire stp comment adopter le code ?
    L'exemple du tuto montre pour une valeur, si tu veux en faire plus il suffit de faire une boucle et de changer le critère du filtre a chaque itération. Si tu veux t'améliorer en VBA c'est un très bon exercice d'essayer de le faire par toi même.
    Sinon tu peux utiliser ce code, a adapter bien sûr:
    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
    Sub OngletsNom()
    'cette macro sépare les données ,de la feuille dont le nom est dans la variable data, en une feuille par valeur différentes
    'cette macro n'a pas besoin que les données soient triées car elle utilise les filtres avancés.
     
    Application.ScreenUpdating = False
    Dim FEUILLE_DEST As Worksheet
    Dim var As Object
    Dim Plage As Range
    Dim Cell As Range
    Dim i As Long
    Data = "doss_all" 'nom de la feuille qui contient les données (a adapter)
     
    ' création de l'objet SortedList
    Set var = CreateObject("System.Collections.SortedList")
     
     
    With ThisWorkbook.Worksheets(Data).Cells(1, 27) 'adapter le numero de colone ici et dans le reste du programme 
        Set Plage = .CurrentRegion  ' plage des données (avec les titres)
        For Each Cell In .CurrentRegion.Columns(27).Cells   ' boucle pour créer la liste sans doublon
            If Not var.containskey(Cell.Value) And Cell.Row > 1 Then
                var.Add Cell.Value, Cell.Text
            End If
        Next Cell
    End With
     
     
    For i = 0 To var.Count - 1
     
        ' ici on gère le fait que la feuille existe ou non
        On Error Resume Next
            Set FEUILLE_DEST = ThisWorkbook.Worksheets("cat" & var.getbyindex(i))
        On Error GoTo 0
     
        ' si la feuille n'existe pas : on la crée et la renomme avec le nom de la var
        If FEUILLE_DEST Is Nothing Then
            Set FEUILLE_DEST = ThisWorkbook.Worksheets.Add
            FEUILLE_DEST.Name = "cat" & var.getbyindex(i)
            FEUILLE_DEST.Move After:=Sheets(ActiveWorkbook.Sheets.Count)
     
        ' si la feuille existe : on efface tout
        Else
            If FEUILLE_DEST.AutoFilterMode And FEUILLE_DEST.FilterMode Then FEUILLE_DEST.ShowAllData
            FEUILLE_DEST.Cells.Clear
        End If
     
        ' utilisation du filtre avancé
        With FEUILLE_DEST
            .Cells(1, 1) = Plage.Cells(1, 27) ' nom du critère (l'entête de la colonne 27)
            .Cells(2, 1) = var.getbyindex(i)            ' valeur du critère : nom de la var (qui est le nom de la feuille)
            Plage.AdvancedFilter xlFilterCopy, .Cells(1, 1).CurrentRegion, .Cells(4, 1), False  ' application du filtre avancé
            .Cells(1, 1).Resize(3, 1).EntireRow.Delete ' nettoyage de la zone des critères (= suppression des lignes 1 à 3)
            .Cells.EntireColumn.AutoFit
     
        Set FEUILLE_DEST = Nothing
    Next i
    Application.DisplayAlerts = True
     
    Application.ScreenUpdating = True
    End Sub



    • Est-ce que cela change qqe chose que l’export soit dans un fichier sur un réseau ?
    Merci pour ton aide
    A ma connaissance non

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Février 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Février 2017
    Messages : 6
    Par défaut
    Re,
    J'ai essayé mais je galere, je me permets encore de te demander.
    En fait, si mon onglet principal se nomme BDD et que mon critere est en colonne 54, grâce au code que tu m'as donné, les changements que je devais faire sont

    Sub OngletsNom() : Le nommer Sub BDD()
    COlumns : Indiquer 27
    FEUILLE_DEST : Je mets les 6 adresses de FEUILLES DEST (1 par departement)
    Je nomme dans chaque dans chaque fichier ; l'onglet de reception par le nom du critere dans le champ filtre est ce bien cela? (je suis débutant complet sur le sujet)

    Merci pour votre aide

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/12/2015, 09h05
  2. macro permettant de supprimer des lignes données
    Par OLIV420 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/08/2010, 17h40
  3. [MySQL] supprimer des données dans la base
    Par Commodore dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 07/02/2006, 02h43
  4. importer et exporter des données
    Par denza1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/12/2004, 16h34
  5. Supprimer des données dans un xml
    Par pingoui dans le forum Format d'échange (XML, JSON...)
    Réponses: 49
    Dernier message: 12/08/2004, 16h49

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