Excel rajout de date

Résolu/Fermé
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013 - 4 juin 2009 à 11:41
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 - 26 juin 2009 à 18:37
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.
A voir également:

13 réponses

m@rina Messages postés 21209 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 décembre 2024 11 372
4 juin 2009 à 12:28
Bonjour,

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

m@rina
0
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013
4 juin 2009 à 14:38
désolé si je n'est pas été très clair,

un exemple sera plus parlant, voici le lien du fichier https://www.cjoint.com/?geoKC4fFhH
0
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013
4 juin 2009 à 15:31
personne pour m'aider ??
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
4 juin 2009 à 16:21
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013
4 juin 2009 à 16:35
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
4 juin 2009 à 23:12
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
m@rina Messages postés 21209 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 décembre 2024 11 372
5 juin 2009 à 11:59
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
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013
5 juin 2009 à 10:14
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
5 juin 2009 à 17:07
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
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013
5 juin 2009 à 17:23
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
6 juin 2009 à 11:14
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
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013
10 juin 2009 à 10:43
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
10 juin 2009 à 11:51
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
frisoa Messages postés 40 Date d'inscription lundi 26 janvier 2009 Statut Membre Dernière intervention 31 janvier 2013
26 juin 2009 à 11:30
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
eriiic Messages postés 24603 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 15 décembre 2024 7 248
26 juin 2009 à 18:37
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