VBA copier les 5 prochaines lignes pleine & 1st ligne varariable

Fermé
manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 - Modifié par manautop le 17/01/2013 à 14:42
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 - 25 janv. 2013 à 05:46
Bonjour,

Je viens encore vers vous car je n'arrive plus à avancer sur ma macro (merci pour toute l'aide déjà apporté)

alors voilà j'ai deux pages
la feuil2 contient en colone toutes les dates de l'année, la première partie de ma macro sert donc à trouver la ligne de la date du jour.

et c'est la que ça se complique,

il faudrait que la seconde partie de la macro demarre à partir de cette ligne trouvé et copie colle les 5 prochaines plages non vide (exemple B1:D1) sur les les lignes B4:B9 de la feui1... avec pour référence pour vérifier si la plage est vide ou pas la colonne C...

j'arrive donc à copier toutes les lignes non vide de la colonne C mais si je lance la macro 2 fois de suite au lieu d'effacer les lignes B4:B9 de la Feuil1 la macro réécrit tout en dessous...je vois pourquoi dans le code pourquoi elle fait ça, mais je ne connais pas d'autre moyen

si vous avez une petite idée, une piste pour m'aider je suis preneur




Sub ChercheDate()
Dim Nbre As Integer, Lig As Integer
Dim Col_B As Range, DCLB As Integer
Dim cellule As Range
Dim Ligne As String

With Worksheets("Feuil2")
'Derniere cellule colonne B
DCLB = .Range("B" & Rows.Count).End(xlUp).Row
'Definition Plage a Tester en memoire (plus rapide)
Set Col_B = .Range("B2:B" & DCLB)
'Recherche si Date du jour existe
If Application.CountIf(Col_B, Date) > 0 Then 'Oui
'Recherche ligne de l'info
Lig = .Columns("B").Find(Date, .Cells(1, "B"), , xlWhole).Row
'Ecriture ligne de l'info trouvee
Range("a1").Value = Lig
Else 'Non
MsgBox "Pas Trouvé"
End If
End With



For Each cellule In Worksheets("post FB").Range("C1:C400")
If Not IsEmpty(cellule) Then
If IsEmpty(Worksheets("What's next").Range("B65536").End(xlUp)) Then
Worksheets("What's next").Range("B65536").End(xlUp).Select
cellule.Delete Worksheets("What's next").Range("B4:B9")
Else
Ligne = Worksheets("What's next").Range("B65536").End(xlUp).Row
Range("B" & Ligne + 1).Select
cellule.Copy Worksheets("What's next").Range("B" & Ligne + 1)
End If
End If
Next cellule
End Sub




Merci d'avance.

A voir également:

2 réponses

manautop Messages postés 138 Date d'inscription lundi 27 novembre 2006 Statut Membre Dernière intervention 24 janvier 2013 3
24 janv. 2013 à 15:00
Bonjour à tous,

alors j'avance à petits pas et votre aide serait la bienvenu,

pour le moment j'arrive à copier la colone C de la feuille 1 vers la colone E de la feuille 2 grace à ce code le tout en enlevant toute les cellules vides de la colone


Sub tesssst()


For Each cellule In Worksheets("Feuil2").Range("B4:d401")
If Not IsEmpty(cellule) Then
If IsEmpty(Worksheets("Feuil1").Range("e65536").End(xlUp)) Then
Worksheets("Feuil1").Range("e2:e9").End(xlUp).Select
cellule.Delete Worksheets("Feuil1").Range("E")
Else
Ligne = Worksheets("Feuil1").Range("e65536").End(xlUp).Row
Range("e" & Ligne + 1).Select
cellule.Copy Sheets("Feuil1").Range(("E") & Ligne + 1)
End If
End If
Next cellule
End Sub

mais je n'arrive pas à copier une plage de cellule de la feuil2 à Feuil1

de plus je n'arrive pas non plus à ne prendre que les 5 prochaines ligne pleines par rapport à la date du jour

merci d avance
0
eriiic Messages postés 24600 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 octobre 2024 7 239
Modifié par eriiic le 25/01/2013 à 05:50
Bonjour,

Peut-être qu'avec un petit fichier exemple on sera plus motivés, quoique...

If IsEmpty(Worksheets("Feuil1").Range("e65536").End(xlUp)) Then
si la dernière cellule non vide de la colonne E est vide (???)
Worksheets("Feuil1").Range("e2:e9").End(xlUp).Select
ne peut pas fonctionner...
cellule.Delete Worksheets("Feuil1").Range("E")
n'a aucun sens...
cellule.Delete : ça y est, c'est une ligne complète, finie, terminée.
Et tu ajoutes qcq chose derrière :
Sheets("Feuil1").Range(("E") & Ligne + 1) qui ne se suffit pas à lui même
Bon 3 lignes d'affilées, 4 erreurs.
En tirant des noms de fonction d'un chapeau on aurait peut-être plus de chance d'avoir un code qui tourne.

Je te conseille d'acheter un livre sur vba et d'apprendre à utiliser le pas à pas (mettre un break ou un Stop puis F8) et l'utilisation d'espions.
menu 'affichage / fenetre espions', sélectionner une variable ou une expression et cliquer-glisser dans la fenetre espion. Ensuite tu peux y ajouter .Address à la fin pour voir si l'adresse d'un range calculé correspond à ce que tu attends par exemple.
Bienvenue à l'école de la patience ;-) et bon courage

eric

Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
0