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:-(
Configuration: Windows XP
Internet Explorer 7.0

5 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. 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
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > 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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Autre solution
    tu remplace la ligne
           'If IsDate(Cells(LigB, 2)) Then

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

    0
    1. 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
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. 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
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > 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
      2. 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
  4. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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