Excel rajout de date

Résolu
frisoa Messages postés 108 Statut Membre -  
eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour tout le monde,

j'ai un petit problème sous excel. j'ai un fichier de ce type :

Date Methode CodeSecteur Stratégie Espece Type Sexe Lf Pds

14/11/1984 PD Cerisel Mont1984 trm adulte 475 123
22/11/1984 PD Cerisel Mont1984 trf adulte f 230
22/11/1984 PD Cerisel Mont1984 trf adulte m 240
15/12/1984 PD Cerisel Mont1984 trf adulte f 372 34
16/12/1984 PD Cerisel Mont1984 trf adulte m 363
17/12/1984 PD Cerisel Mont1984 trf adulte f 340
18/12/1984 PD Cerisel Mont1984 trf adulte f 268 23
18/12/1984 PD Cerisel Mont1984 trm adulte f 315
18/12/1984 PD Cerisel Mont1984 trm adulte f 360
19/12/1984 PD Cerisel Mont1984 trf adulte f 225
19/12/1984 PD Cerisel Mont1984 trm adulte f 325

Au fait j'aurai souhaité rajouter les dates manquantes avec seulement les colonnes méthode, code secteur et stratégie qui seront renseignées avec respectivement PD, Cerisel, Montxxxx (xxxx=année en cours) et les autres colonnes devront restées vides (une petite précision qui a sont importance, il existe d'autres colonnes après la colonnes Pds qui devront également restées vides)
Cela est-il possbile?

Merci d'avance pour votre aide.

A bientôt et bonne journée.
Configuration: Windows XP
Firefox 3.0.10

13 réponses

  1. m@rina Messages postés 27623 Date d'inscription   Statut Modérateur Dernière intervention   11 563
     
    Bonjour,

    Euh... perso, je n'ai rien compris !
    Peux tu être plus explicite et joindre un petit exemple (http://cjoint.com).

    m@rina
    0
  2. frisoa Messages postés 108 Statut Membre
     
    personne pour m'aider ??
    0
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    bonjour frisoa

    Marin@ doit faire encore la sieste ;o)... pardon! M@rina
    ci joint proposition
    https://www.cjoint.com/?geqmKP6cIl

    mais ce qu'il y a de curieux, c'est que tu as plusieurs fois la même date dans "ce que j'ai" et dans "ce que je voudrais" il n'y a plus qu'une seule date
    si il faut conserver ces "plusieurs dates" le pb est hachement + compliqué
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. frisoa Messages postés 108 Statut Membre
     
    bah justement il faut conserver ces plusieurs dates, puisqu'à chacune des lignes correspond les caractéristiques d'un seul et même individu.
    j'imagine que ça ne peut pas se faire simplement....il va falloir passer par virtual basic?
    0
  6. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonsoir tout le monde,

    bon, comme je vois que michel s'est laissé tenté par une sieste avec m@rina voici une proposition :
    frisoa.xls

    chuuuuut....
    eric
    0
    1. m@rina Messages postés 27623 Date d'inscription   Statut Modérateur Dernière intervention   11 563
       
      Hello Eriic,

      La sieste est finie ! ;))))
      En fait, avec Michel, on s'est dit que tu étais beaucoup plus réveillé que nous pour répondre.

      m@rina
      0
  7. frisoa Messages postés 108 Statut Membre
     
    Bonjour Éric,

    ça marche super sur l'exemple mais dès que j'essaie de l'appliquer sur la totalité du fichier ça ne marche plus.

    Pourrais tu m'expliquer la démarche ou à moins que ça ne te dérange pas de le faire voici le fichier complet http://www.cijoint.fr/cjlink.php?file=cj200906/cijmr8sFQu.zip

    Si ce n'est pas trop compliqué j'aimerais bien savoir comme cela fonctionne que je puisse le refaire sur d'autres fichiers par la suite (ce qui me sera bien utile)

    Merci encore
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      Bien sûr que ça ne marche pas, tu demandes pour un fichier avec les dates en B et tu veux traiter un fichier avec les dates en C, et le champs heure a disparu...
      Là je n'ai pas trop le temps de modifier, pendant ce temps réfléchi bien quel sera ton format de fichier et s'il est bien unique (position des champs)
      Difficile de t'expliquer VBA en 10 lignes.
      Pour commencer clic-droit sur le nom d'un onglet du fichier que je t'ai fourni, 'visualiser le code', puis double-clic sur 'module1' pour visualiser le code. Si tu as qcq notions de programmation tu trouveras peut-être oèu il faut agir.

      eric
      0
  8. frisoa Messages postés 108 Statut Membre
     
    désolé Eric de n'avoir pas fourni le bon doc des le début.
    concernant le format du fichier justement je ne suis pas sur qu'ils seront tous de la meme forme, c'est pourquoi je te demandais si il était possible que tu m'expliques un peu le script.
    je me pencherais sur le code mardi ou mercredi.
    en tout cas merci infiniment pour ton aide
    a bientot et bon week end
    0
  9. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    voici la macro modifiée : frisoa.xls

    Les noms des champs sont recherchés sur la ligne 1 et peuvent être en n'importe quelle position, leur libellé doit être exact, accents compris.
    J'ai commenté un peu le code et ajouté une gestion d'erreur (champ recherché absent ou feuille trop petite)
    Comme tes données sont nombreuses tu peux suivre l'évolution du traitement dans la barre d'état en bas de la fenetre excel.
    Sub completerDates()
        ' raccourci clavier: ctrl+d
        '
        ' la macro traite la feuille active
        ' la feuille sera triée par date
        ' pour chaque date manquante 1 ligne est insérée
        ' et les champs listés dans nomsChamps dupliqués.
        '
        Dim i As Long, j As Long, lig As Long, nbLig As Long, nbAjout As Long, derCol As Long
        Dim libelErreur As String
        ' changer la dimension de posChamps si le nombre de champs à dupliquer change
        ' et mettre à jour la liste des libellés des champs
        Dim nomsChamps(), posChamps(4) As Long
        ' liste des libellés des champs, champ Date obligatoire et toujours en 1er
        nomsChamps = Array("Date", "Methode", "CodeSecteur", "Stratégie") ' 1er champ: Date, autres champs: champs à récupérer
        '
        '
        Application.ScreenUpdating = False ' ne pas rafraichir l'écran
        ' recup positions champs
        libelErreur = "champ " & nomsChamps(i) & " non trouvé."
        For i = 0 To UBound(nomsChamps)
            On Error GoTo erreur
            posChamps(i) = Application.Match(nomsChamps(i), [1:1], 0)
            On Error GoTo 0
        Next i
        ' trier par date
        derCol = [A1].Offset(1, Cells.Columns.Count - 1).End(xlToLeft).Column
        Columns("A:A").Resize(, derCol).Sort Key1:=Range("C2"), Order1:=xlAscending, _
            Header:=xlGuess, OrderCustom:=1, Orientation:=xlTopToBottom
        '
        ' pour chaque cellule colonne Date en partant de la dernière cellule remplie
        nbLig = [A1].Offset(Cells.Rows.Count - 1, posChamps(0) - 1).End(xlUp).Row
        For lig = nbLig To 3 Step -1
            If Cells(lig, posChamps(0)) > Cells(lig - 1, posChamps(0)) + 1 Then 'si delta date > 1 alors
                nbAjout = nbAjout + 1
                If nbLig + nbAjout > Cells.Rows.Count Then  ' si feuille trop petite
                    libelErreur = "Trop de lignes ajoutées."
                    GoTo erreur
                Else                                        ' sinon
                    Application.StatusBar = "Ligne en cours de traitement : " & lig & " ( " & nbAjout & " lignes ajoutées)"
                    Rows(lig).Insert Shift:=xlDown ' insérer 1 ligne au dessus
                    Cells(lig, posChamps(0)).Value = Cells(lig + 1, posChamps(0)).Value - 1 ' mettre date-1
                    For j = 1 To UBound(posChamps) - 1 ' inscrire les champs à récupérer
                        Cells(lig, posChamps(j)).Value = Cells(lig - 1, posChamps(j)).Value
                    Next j ' champ suivant
                    lig = lig + 1
                End If
            End If
        Next lig ' ligne suivante
        ' retablir barre d'état et rafraichissement écran
        Application.StatusBar = ""
        Application.ScreenUpdating = True
        MsgBox (nbAjout & " lignes ajoutées")
        Exit Sub
    erreur:
        j = MsgBox(libelErreur, vbCritical + vbRetryCancel)
        Application.StatusBar = ""
        Application.ScreenUpdating = True
    End Sub

    eric
    0
  10. frisoa Messages postés 108 Statut Membre
     
    Bonjour Eric,

    Désolé de ne pas avoir répondu avant, j'étais en réunion tout le début de semaine.
    Le fichier que tu m'as posté est l'exemple que j'avais mis au début, le fichier complet se trouve ici. http://www.cijoint.fr/cjlink.php?file=cj200906/cijmr8sFQu.zi­p
    Quand j'applique le code que tu m'as envoyé sur les données complètes cela duplique la première colonne sur l'ensemble de la feuille...et vu que j'ai un peu de mal à comprendre le code VBA malgré tes explications claires je n'ai pas réussi à résoudre le problème.
    peux tu m'eclairer?

    En tout cas il va vraiment falloir que je m'attèle rapidement à VBA pour résoudre ce type de problème tout seul...connais tu des cours en ligne gratuits?
    0
  11. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Le dernier fichier que je t'ai fourni contient la macro mais c'est vrai que j'ai été avare d'explications.

    J'ai pensé que tu aurais à relancer cette macro régulièrement et peut-être sur différents classeurs.
    Donc ce fichier tu l'enregistres sous un nom plus parlant, par exemple TraitementDate.xls, tu peux nettoyer les feuilles, en supprimer et mettre un petit modop si tu veux que ce soit plus propre.

    Tu l'ouvres, tu ouvres le classeur que tu veux traiter et tu sélectionnes la feuille à traiter puis Ctrl+d et tu vas te faire un café...
    Tu peux suivre l'évolution du traitement en bas de la fenetre et voir que ça tourne bien.
    L'insertion de lignes est très gourmand en temps machine et le 1er traitement est très long (ensuite comme il y aura peu de dates à ajouter ça sera bcp plus rapide).

    J'ai retesté et à-priori ça marche (de ce que j'ai compris que tu voulais en tout cas).
    Si il y a un écart me dire précisément ce qui cloche, avec un bout de fichier traité et en rouge les anomalies et explications.
    Je ne me suis pas occupé de la renumérotation car ça me paraissait bizarre de perdre une référence...

    Et peut-être une anomalie dans tes données, regarde 'piege monté' en S6
    Si ton numpit est de la forme xxxxExx excel le considère comme un nombre au format scientifique et te le transforme. Il faut absolument mettre cette colonne S au format 'texte' avant les saisies.
    Pour détecter ces erreurs potentielles insère une colonne après S et en T2 saisis :
    =SI(CHERCHE("+";S2)<NBCAR(S2);"à contrôler")
    à recopier vers le bas
    Ensuite un filtre automatique sur cette colonne te listera les anomalies à ressaisir

    eric
    0
  12. frisoa Messages postés 108 Statut Membre
     
    salut eric,

    je viens de m'apercevoir que je ne t avais pas répondu.
    ta solution marche très bien....ca m'a bien aidé!
    en tout cas merci beaucoup pour ton aide

    à une prochaine
    0
  13. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    Tu n'aurais pas été le premier ;-)
    Ceci dit un retour fait toujours plaisir, merci et bonne pêche :-)
    eric

    PS: je met en résolu...
    0