Recopie cellule sous condition
MART
-
lermite222 Messages postés 9042 Statut Contributeur -
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:-(
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
-
Bonjour,
Tu copie le code ci-dessous dans le module de ta feuilleSub 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+
-
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.
-
-
Autre solution
tu remplace la ligne
'If IsDate(Cells(LigB, 2)) Then
parIf Len(Cells(LigB, 2)) > 7 Then
-
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
-
-
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+
-
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
-
-
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+
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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+