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 :

Archivage journalier vba [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Par défaut Archivage journalier vba
    Bonjour le Forum,

    Ci-joint le fichier.
    le but, archiver certaines lignes de "synthese" vers "archives" fin de fichier compte tenu que la feuille archive est maître et contient les noms à sauvegarder.

    Le problème. J'avais fait une boucle qui fonctionnait parfaitement jusqu'en ce début d'année ou les sites ou je récupère les données ont changer certaines valeurs, on changer l'ordonnancement, et modifié l'écriture de certains noms, et ceci parfois d'un jour sur l'autre.

    J'ai donc écrit une moulinette dont le fichier joint est le résultat, reste plus qu'a archiver les données.
    Les emplacements et lignes ne sont jamais les mêmes d'un jour à l'autre et je n'arrive plus à stocker les données en fin de journée.

    A+ de vous lire si une piste.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Qu'est-ce qu'il y a à archiver dans ce cas précis ?

  3. #3
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Par défaut
    Citation Envoyé par Daniel.C Voir le message
    Bonjour,

    Qu'est-ce qu'il y a à archiver dans ce cas précis ?
    Il faut archiver la liste de la feuille archive à partir de Y5

    Citation Envoyé par deedolith Voir le message
    Avec juste le "resultat", "certaines lignes", "certaines valeurs", sans les données d'entrée, sans les règles de gestion, sans ta "moulinette", il est quasi impossible de t'aider, on ne peut deviner ce qui se passe avec un simple rapport, bref il va faloir être beaucoup plus précis.

    A vu de nez, ta moulinette a un comportement rigide, que tu devras adapter, voir rendre plus souple.
    Je ne suis pas contre le fait d'envoyer le fichier complet si tu le désire (4 mo), dis moi

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Avec juste le "resultat", "certaines lignes", "certaines valeurs", sans les données d'entrée, sans les règles de gestion, sans ta "moulinette", il est quasi impossible de t'aider, on ne peut deviner ce qui se passe avec un simple rapport, bref il va faloir être beaucoup plus précis.

    A vu de nez, ta moulinette a un comportement rigide, que tu devras adapter, voir rendre plus souple.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Commence déja par préciser ton besoin, car la, c'est confus.

    S'ajit-il de copier (ou deplacer) des données de la feuille "Synthese" vers la feuille "Archive" ? Si oui, selon quels critères ?
    Ou s'ajit-il d'archiver des données de la feuille "Archive" ? si oui, quels critères ? Et que veux tu dire par archiver ?
    Si non, donne nous des explications supplémentaires, qu'as tu deja fait ? Peux-tu poster un extrait de code ?

  6. #6
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Par défaut
    Il s'agit de copier les données de synthese ( prono de 8 chevaux) dans la feuille archive en s'indexant sur la ligne 5 de cette feuille archive à partir de la colonne Y ou se trouvent les noms des pronostiqueurs à archiver.
    Dans la feuille synthese les pronos ne sont quasiment jamais plus à la même place et des fluctuations ont lieu dans l'écriture du nom des pronostiqueurs.

    La feuille synthese est déjà triée au niveau des doublons, si doublons apparents c'est que le prono n'est pas le même ( voir pour un nom identique si les 8 chiffres sont aussi identiques)

  7. #7
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Si les entêtes de la feuille ARCHIVES correspondaient à la colonne F de SYNTHESE, on pourrait utiliser :

    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
    Sub Archiver()
        Dim Plage As Range, C As Range, Ligne As Long, Col As Variant
        With Sheets("SYNTHESE")
            Set Plage = .Range("F3", .Cells(.Rows.Count, 6).End(xlUp))
        End With
        With Sheets("ARCHIVES")
            Ligne = .Cells(.Rows.Count, 1).End(xlUp).Row
            For Each C In Plage
                Col = Application.Match(C.Value, .[5:5], 0)
                If IsNumeric(Col) Then
                    For i = 1 To 8
                        .Cells(Ligne, Col + i - 1) = C.Offset(, i)
                    Next i
                End If
            Next C
        End With
    End Sub
    mais ce n'est pas systématique. Et sans ta moulinette...

  8. #8
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Par défaut
    Voici le fichier complet avec le code.
    Soit indulgent sur la qualité du codage

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Je recapitule, dans la feuille SYNTHESE
    Tu as un tableau avec en colonne le nom du pronostiqueur et ses 8 pronostiques, commencant a la colonne F, ligne 5, donc une cellule de depart (objet range): F5
    J'assume que la fin du tableau est inconnue, cependant la methode range("F5").End(xlDown).row te donnera la dernière ligne.
    Il ne reste plus qu'a boucler pour parcourir tes données:

    Dans la feuille ARCHIVES:
    Tu dois rechercher le nom du pronostiqueur.
    Tu dois rechercher la derniere ligne + 1 du pronostiqueur.
    Tu dois recopier le pronostique.

    Le code suivant devrais t'aider.
    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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    Option Explicit
     
    Public Sub test()
    On Error GoTo Error
        Dim oSheet As Worksheet         '// feuille de travail
        Dim oRow As Range               '// iterateur
        Dim oCellStart As Range         '// cellule de depart
        Dim lMaxRow As Long             '// N° de la derniere ligne
        Dim oPronosticRange As Range    '// pronostiqueur + pronostique
        Dim oCell As Range
     
            '// init feuille de travail
        Set oSheet = ThisWorkbook.Sheets("SYNTHESE")
            '// init cellule de depart
        Set oCellStart = oSheet.Range("F5")
            '// ligne de fin
        lMaxRow = oCellStart.End(xlDown).Row
     
            '// parcours des pronostiques
        Set oPronosticRange = oSheet.Range("F5:N" & lMaxRow)
     
        For Each oRow In oPronosticRange.Rows
            Call copyPronostic(oRow)
        Next
        Set oPronosticRange = Nothing
        Set oCellStart = Nothing
        Set oSheet = Nothing
    Exit Sub
    Error:
        '// gestionnaire d'erreur
            '// nettoyage
        If Not (oPronosticRange Is Nothing) Then
            Set oPronosticRange = Nothing
        End If
        If Not (oCellStart Is Nothing) Then
            Set oCellStart = Nothing
        End If
        If Not (oSheet Is Nothing) Then
            Set oSheet = Nothing
        End If
            '// action supplémentaire eventuelles
        Debug.Print "test: Erreur N°" & Err.Number & " " & Err.Description
    End Sub
     
        '// recopie les pronostiques
    Private Sub copyPronostic(ByRef oRow As Range)
    On Error GoTo Error
        Dim oSheet As Worksheet     '// feuille de travail
        Dim oWorkRange As Range     '// plage de cellules pronostique
        Dim oCellStart As Range     '// cellule de depart
        Dim i As Long               '// compteurs
        Dim j As Long
     
            '// init feuille de travail
        Set oSheet = ThisWorkbook.Sheets("ARCHIVES")
            '// recherche cellule de depart
        Set oCellStart = oSheet.Cells.Find(oRow.Cells(1).Text)
            '// recherche fructueuse ?
        If Not (oCellStart Is Nothing) Then
                '// init plage des cellules pronostique
            Set oWorkRange = oCellStart.End(xlDown)
            If (oWorkRange.Row = oSheet.Rows.Count) Then
                Set oWorkRange = oCellStart.Offset(1)
            Else
                Set oWorkRange = oWorkRange.Offset(1)
            End If
            Set oWorkRange = oSheet.Range(oWorkRange, oWorkRange.Offset(0, 7))
                '// recopie les pronostiques
            i = 1
            For j = 2 To oRow.Cells.Count
                oWorkRange.Cells(i).Value = oRow.Cells(j).Value
                i = i + 1
            Next
                '// nettoyage
            Set oWorkRange = Nothing
            Set oCellStart = Nothing
        End If
        Set oSheet = Nothing
    Exit Sub
    Error:
        '// gestionnaire d'erreur
            '// nettoyage
        If Not (oWorkRange Is Nothing) Then
            Set oWorkRange = Nothing
        End If
        If Not (oCellStart Is Nothing) Then
            Set oCellStart = Nothing
        End If
        If Not (oSheet Is Nothing) Then
            Set oSheet = Nothing
        End If
            '// action supplémentaire eventuelles
        Debug.Print "copyPronostic: Erreur N°" & Err.Number & " " & Err.Description
    End Sub

  10. #10
    Membre averti
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Par défaut
    Vraiment pas mal et instructif, mais le résultat n'est pas celui attendu, il doit classer pour chaque prono alors que là il peu rajouter plusieurs lignes si un nom de pronostique est ressemblant voir photo

    Pièce jointe 166638

    Pièce jointe 166638

    Il va falloir que je différencie le nommage de Week End et Week End si les pronos sont différents sinon c'est pas possible de solutionner, je cogite 5 minutes

    2 pronos totalement différents
    Le Télégramme
    Le Télégramme de Brest

    il classe les 2 au même endroit ce qui ne doit pas être ( voir photo ci dessus )

    Merci Daniel.C, merci deedolith pour le coup de main.
    Bonne journée à toutes et à tous.

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 524
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 524
    Par défaut
    Citation Envoyé par moteuv12 Voir le message
    2 pronos totalement différents
    Le Télégramme
    Le Télégramme de Brest

    il classe les 2 au même endroit ce qui ne doit pas être ( voir photo ci dessus )
    Le code que je t'ai fournit effectue une recherche basique, en clair il recherche si tout ou partie du nom du pronostiqueur se trouve dans la feuille SYNTHESES.
    La methode Find possède de nombreus paramètres optionels, je te laisse les regarder en detail.

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

Discussions similaires

  1. Archivage journalier Automatique
    Par pythfred dans le forum Excel
    Réponses: 3
    Dernier message: 01/03/2012, 16h34
  2. Réponses: 4
    Dernier message: 09/12/2011, 09h34
  3. [AC-2000] Suppression de données après archivage en VBA
    Par Tydher dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/07/2011, 11h45
  4. Piloter l'archivage automatique en VBA
    Par Thierry_94 dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 19/09/2007, 07h35
  5. [VBA-E]Envoi de mail journalier
    Par illight dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 28/04/2006, 10h30

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