Recopie cellule sous condition

MART -  
lermite222 Messages postés 9042 Statut Contributeur -
Bonjour,
je debute sur Exel VBA merci d'être indulgnet ;-)
Mon problème est le suivant: j'ai un fichier qui comporte une collonne B .
Cette colonne B comporte des cellule qui ont :
-soit une date
-soit un chiffre
Je voudrais avec une macros recopier dans la colonne A uniquement les cellules de la colonne B qui contienne une date. ce qui donnerait ceci:
colonne A Colonne B
01/02/2009 01/02/2009
01/02/2009 2
01/02/2009 5
01/02/2009 3
01/03/2009 01/03/2009
01/03/2009 2
01/03/2009 5
01/03/2009 7
01/03/2009 3
01/03/2009 0
06/05/2008 06/05/2006
La date doit etre recopier sur les lignes qui suivent jusqu'a ce que l'on rencontre dans la colonne B une autre date qui elle même doit etre recopier sur les lignes suivante et ansi de suite jusqu'a la fin du fichier.
Pourriez-vous m'aider SVP:-(

5 réponses

lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
Tu copie le code ci-dessous dans le module de ta feuille
Sub Recopie()
Dim LigA As Long, LigB As Long
    LigA = Range("A65536").End(xlUp).Row + 1
    For LigB = 1 To Range("B65536").End(xlUp).Row
        If IsDate(Cells(LigB, 2)) Then
            Cells(LigA, 1) = CDate(Cells(LigB, 2))
            LigA = LigA + 1
        End If
    Next LigB
End Sub

Soit tu met un bouton qui appel la macros soit tu met le cureseur au milieu de la macros et tu tape F5
A+
0
MART
 
C'est gentil de me répondre mais voici ce que j'obtiens:
01/02/2009
01/02/2009 2
06/03/2009 3
01/05/2008 0
1
4
06/03/2009
1
2
0
01/05/2008

Il faudrait que la date se repete jusqua ce que l'on rencontre une nouvelle date qui se repete a nouveau il ne doit pas y avoir de ligne vide:
01/02/2009 01/02/2009
01/02/2009 2
01/02/2009 3
01/02/2009 0
01/02/2009 1
01/02/2009 4
06/03/2009 06/03/2009
06/03/2009 1
06/03/2009 2
06/03/2009 0
01/05/2008 01/05/2008

Merci et bonne année.
0
lermite222 Messages postés 9042 Statut Contributeur 1 191 > MART
 
C'est parce que tu a formater la colonne entière en date,
il ne faut pas, laisserla colonne en format standard, chaque fois que tu entre une date, le format se modifie automatiquement et la macros fonctionne comme demander. J'ai tester avant de te la passer.
A+
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Autre solution
tu remplace la ligne
       'If IsDate(Cells(LigB, 2)) Then

par
        If Len(Cells(LigB, 2)) > 7 Then

0
MART
 
En fait avec ton code j'obtiens bien une copie des données mais toutes les dates sont regroupéees au lieu de se repeter sur les lignes suivantes.
Je suis bien en format standard sur mes deux colonnes.
J'obtiens la même choses avec la nouvelle ligne de code:

If Len(Cells(LigB, 2)) > 7 Then
colonne A: Colonne B:
01/03/2007 01/03/2007
01/03/2007 2
01/03/2007 5
01/03/2007 4
01/03/2007 8
01/03/2007 1
01/03/2007 5
01/02/2008 01/02/2008
01/02/2008 2
01/02/2008 5
01/02/2008 7
01/02/2008 2
01/02/2008 0

Merci
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Pas normal, quand je teste, que ce soit avec la 1ère solution ou avec la deuxième ça fonctionne !!
Tu peu pas mettre ton classeur sur Cjoint.com ? et mettre le lien dans un poste suivant.
Mais tu à peut-être un tri automatique sur ta feuille ?
A+
0
MART
 
https://www.cjoint.com/?bErwlL2SRO

Je t'envoie le lien créee sur CJoint.com
il y a mon vrai fichier et lorque j'execute ta macro ca me repete une serie d'heure au format americain et les dates n'apparaissent pas.
Merci d'avance de ton aide.
Mart
0
lermite222 Messages postés 9042 Statut Contributeur 1 191 > MART
 
Quand tu donne une explication tâche d'être complet, dans ton classeur les dates sont précédées d'un mot (dans la même cellule) c'est évident que comme ça ça sait pas marcher.
C'est toujour Daily avant ta date ?
0
MART > lermite222 Messages postés 9042 Statut Contributeur
 
non, il faut se baser sur les dates présente dans les cellules B3 et B67 par exemple sachant que les numeros de cellules peuvent changer selon le nombre de ligne presentes dans le fichier.
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Re,
tu peu tester...
Sub Recopie()
Dim LigA As Long, LigB As Long
    LigA = Range("A65536").End(xlUp).Row + 1
    For LigB = 1 To Range("B65536").End(xlUp).Row
        If IsDate(Cells(LigB, 2)) Then
            If Year(Cells(LigB, 2)) > 1900 Then
                Cells(LigA, 1) = CDate(Cells(LigB, 2))
                LigA = LigA + 1
            End If
        End If
    Next LigB
End Sub

Reprend les 2 lignes que tu renseigne plus haut.
A+
0

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

Posez votre question
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Si tu veux garder le format spécial de tes dates... [] mm/dd/yyyy
Sub RecopieAvecFormat()
Dim LigA As Long, LigB As Long
    LigA = Range("A65536").End(xlUp).Row + 1
    For LigB = 1 To Range("B65536").End(xlUp).Row
        If IsDate(Cells(LigB, 2)) Then
            If Year(Cells(LigB, 2)) > 1900 Then
'                Cells(LigA, 1) = CDate(Cells(LigB, 2))
                Cells(LigB, 2).Copy Cells(LigA, 1)
                LigA = LigA + 1
            End If
        End If
    Next LigB
End Sub

A+
0