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 tri répartition


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    165
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 165
    Par défaut Macro tri répartition
    Bonjour,

    Actuellement je repartie les données dans trois sheets différentes, suivant le pays qui se trouvent en colonne C.

    Vu que les données sont mises à jour plusieurs fois dans la journée, je voudrais que les données qui se trouvent dans ma sheet de répartition ("Fiche de Travail J") (nommée ainsi) remplace automatiquement les données déjà existante dans les sheets suivantes.

    Actuellement, ils ajoutent les données à la suite.

    Est-ce que cela est possible ? Par contre si imaginons je n'ai pas de données pour le pays MAROC (exemple) qu'il laisse automatiquement les données deja présente dans les sheets.

    Et dans un deuxième temps, est-ce que je peux ajouter un petit message d'erreur, disant que si il y pas de données, il y a pas de tri !

    Merci d'avance

    Bàv

    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 i As Long 
    Dim iCible As Long 
    Dim shSource As Worksheet 
    Dim Sh As Worksheet 
     
    Set shSource = Sheets("Fiche de Travail J") 
     
    'Copie les données dans les feuilles Pays 
        For i = 1 To shSource.Range("A" & Rows.Count).End(xlUp).Row 
        Set Sh = Sheets(Range("C" & i).Value) 
        iCible = Sh.Range("A" & Rows.Count).End(xlUp).Row + 1 
        If iCible = 2 And Sh.Range("a1").Value = "" Then iCible = 1 
        shSource.Rows(i).Copy Sh.Range("A" & iCible) 
        'Vide la ligne Copiée 
        shSource.Rows(i).ClearContents
    Next i

  2. #2
    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
    Un exemple en utilisant un filtre automatique
    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
    Sub Dispatch()
    Dim LastLig As Long, i As Long
    Dim Sh As Worksheet
    Dim Dico As Object
     
    Application.ScreenUpdating = False
    Set Dico = CreateObject("scripting.dictionary")
    With Worksheets("Fiche de Travail J")
        .AutoFilterMode = False
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        'Création d'un dictionnaire sur les données de la colonne C
        For i = 2 To LastLig
            If Not Dico.exists(.Range("C" & i).Value) Then Dico.Add .Range("C" & i).Value, ""
        Next i
        'Filtrage automatique et copie
        For i = 0 To Dico.Count - 1
            .Range("A1:C" & LastLig).AutoFilter Field:=3, Criteria1:=Dico.Keys(i)
            If Existe(Dico.Keys(i)) Then
                Set Sh = ThisWorkbook.Worksheets(Dico.Keys(i))
                Sh.UsedRange.Clear
            Else
                Set Sh = Worksheets.Add(After:=Sheets(Sheets.Count))
                Sh.Name = Dico.Keys(i)
            End If
            .Range("A1:A" & LastLig).SpecialCells(xlCellTypeVisible).EntireRow.Copy Sh.Range("A1")
        Next i
     
        .AutoFilterMode = False
    End With
    Set Sh = Nothing
    Set Dico = Nothing
    End Sub
     
    Function Existe(ByVal ShName As String) As Boolean
    Dim Sh As Worksheet
     
    For Each Sh In ThisWorkbook.Sheets
        If Sh.Name = ShName Then
            Existe = True
            Exit For
        End If
    Next Sh
    End Function

Discussions similaires

  1. [XL-2003] Macro tri et répartition
    Par korni184 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 19/01/2012, 17h59
  2. [XL-2003] Macro Tri
    Par jerome.cubi dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 09/07/2010, 17h13
  3. [Toutes versions] Macro, tri et impression
    Par michel0 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/05/2010, 00h36
  4. [XL-2007] Macro tri croissant
    Par Jay29 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 22/09/2009, 14h41
  5. [OpenOffice][Tableur] Macro-transfert macro tri colonne de Excell vers Open
    Par ObjectifSciences dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 26/11/2008, 11h30

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