Copier avec condition_à partir de cellule vide_supprimer ligne si valeur

Bonjour,

Je aujourd'hui assez novice pour les VBA et j'ai d'abord essayé de bien me documenter et faire par moi même avant ce post.

Je dois aujourd'hui effectuer un un tableau de bord que je compte travailler par tableau croisé dynamique.

J'ai un fichier très lourd un mois représentant environ 2400 lignes et je souhaite tournée avec 24 mois.

Je rencontre 2 problèmes:

1* ) Je dois copier et coller certaines lignes de ma feuille "exportation" vers la feuille "Receuil"tout en collant à la première cellules vides.

J'ai trouvé un code qui fonctionne mais ne colle pas à la première cellules vide:

Sub copie()
Sheets("exportation").Range("A2:A1000000").Copy Destination:=Sheets("Receuil").Range("A1:A1000000").End(xlUp).Offset(1)
Sheets("exportation").Range("D2:D1000000").Copy Destination:=Sheets("Receuil").Range("F1:F1000000").End(xlUp).Offset(1)
Sheets("exportation").Range("F2:F1000000").Copy Destination:=Sheets("Receuil").Range("H1:H1000000").End(xlUp).Offset(1)
Sheets("exportation").Range("G2:G1000000").Copy Destination:=Sheets("Receuil").Range("J1:J1000000").End(xlUp).Offset(1)
Sheets("exportation").Range("N2:O1000000").Copy Destination:=Sheets("Receuil").Range("M1:N1000000").End(xlUp).Offset(1)
'...le fichier comprenant d'avantage
End Sub

Il faudrait apparemment le transformer en:

Sub copie()
Sheets("exportation").Range("A2:A1000000").Copy Destination:=Sheets("Receuil").Range("A1000000").End(xlUp).Offset(1)
end sub

Mais avec ce dernier j'ai l'erreur 1004 pour

" Range("A1000000")"

2*) Mon second soucis est que je veux supprimer les lignes de la feuille "Receuil" comprenant les valeurs "VENTE" et "*" dans la colonne H.

J'ai trouver un code pour supprimer les lignes comprenant "VENTE" :

Sub clear()
Dim Lig&
With Sheets("Receuil")
           For Lig = .Cells(Rows.Count, 8).End(xlUp).Row To 1 Step -1
                    If .Cells(Lig, 8) = "VENTE" Then .Rows(Lig).Delete
           Next Lig
End With
End Sub

Mais en transposant le code pour "*" ça ne fonctionne que sur certaine ligne.

Je souhaiterai aussi que les deux valeur à supprimer soit comprise dans le même code . Est ce possible?

Je vous joins le fichier, j'ai dû le réduire( les colonnes en surbrilances doivent sont réservé à des formules RECHERCHEV que je n'ai pas pris la peine de vous présenter.

12anaellem.xlsx (63.70 Ko)

J'espère que vous saurez m'éclairer.

Merci d'avance

Bonjour,

Si tu le permets ... un petit conseil ... un sujet après l'autre ...

Pour ta macro de copie ... tu peux t'inspirer du code suivant ...

Sub Copie()
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim der1 As Long
Dim der2 As Long

Set wks1 = Sheets("Exportation")
Set wks2 = Sheets("Recueil")

der1 = wks1.Cells(Application.Rows.Count, "A").End(xlUp).Row
der2 = wks2.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1

wks1.Range("A2:A" & der1).Copy Destination:=wks2.Range("A" & der2)
wks1.Range("D2:D" & der1).Copy Destination:=wks2.Range("F" & der2)
wks1.Range("F2:F" & der1).Copy Destination:=wks2.Range("H" & der2)
wks1.Range("G2:G" & der1).Copy Destination:=wks2.Range("J" & der2)
wks1.Range("N2:N" & der1).Copy Destination:=wks2.Range("M" & der2)

'...le fichier comprenant d'avantage

End Sub

En espérant que cela t'aide

Merci pour la réponse rapide.

Je suis face à un code erreur 9 pour la ligne

Set wks2 = Sheets("Recueil")

Ok pour un

sujet après l'autre

, j'ai hesité en plus

Re,

Attention à ton orthographe ... et à ta façon d'écrire le mot Recueil ....

Car le u ... est juste après le c et avant le e

Bonjour,

Oui c'est en recopiant le code que j'ai fais une erreur, mais merci de me le signaler.

Le code ne fonctionne pas malgré la correction. J'ai toujours cette même erreur d'exécution.

Bonjour,

Je viens de refaire un test ... et tout fonctionne normalement ...

Merci de t'assurer que .... dans ton vrai fichier .......les onglets de tes feuilles sont correctement libellés :

Exportation et Recueil ... sans espaces avant ou après ....

Effectivement quand j'utilise le code sur le fichier que je vous ai envoyé ça fonctionne mais quand je l'intègre au vrai fichier bin le code ne fonctionne pas.

Pourtant ce sont le même informations, la différence étant le nombre de lignes, les formules et le nombre d'onglets .

J'essai de décortiquer ton code et mon fichier afin de voir où pourrait ce trouver mon erreur.

Re,

Je te confirme simplement que le nombre de lignes et le nombre d'onglets de ton vrai fichier ... n'ont pas d'influence sur la macro ...

Re,

Je te confirme simplement que le nombre de lignes et le nombre d'onglets de ton vrai fichier ... n'ont pas d'influence sur la macro ...

Je ne comprends vraiment pas, la macro ne s'exécute pas et il n'y a même pas de message d'erreur! Je ne sais vraiment pas quoi faire, est ce possible de vous envoyer le fichier par mail? (Je ne sais pas pas si ça respecte la charte)

Le problème est maintenant derrière moi !! J'avais plus d'un millions de lignes et mon fichier ne faisait que bugger.

maintenant mon problème est qu'une fois mon copier coller fait ma mise en forme de mon tableau disparaît.

Pourriez vous m'indiquer quoi modifier?

Merci d'avance,

Re,

Content d'apprendre que le problème principal est réglé ...

Concernant la deuxième question de mise en forme ... pourrais- tu apporter des précisions ...?

Bonjour,

Alors pour tout t'expliquer, pour ma page Recueil j'ai insérer un tableau pour pouvoir ensuite l'utiliser pour le Tableau croisé dynamique.

La mise en forme disparaît lors du "collage" de mes informations.

Je ne sai pas si je suis plus claire dans mon explication .

Bonjour,

Merci pour ton explication ... très claire ...

Tu as donc besoin de ne copier que les VALEURS des cellules source ... ET NE PAS ECRASER le format des cellules à destination ...

Pour cela ... il faut utiliser une autre méthode que Copy ... qui sera Copy PasteSpecial Paste:=xlPasteValues ...

Est-ce-que cette explication est assez claire ...

Sub Copie()
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim der1 As Long
Dim der2 As Long

Set wks1 = Sheets("Exportation")
Set wks2 = Sheets("Recueil")

der1 = wks1.Cells(Application.Rows.Count, "A").End(xlUp).Row
der2 = wks2.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1

wks1.Range("A2:A" & der1).Copy Destination:=wks2.Range("A" & der2)   'formule du départ
[b]wks1.Range("D2:D" & der1).Copy  Destination:=wks2.Range("F" & der2)PasteSpecial Paste:=xlPasteValues    'essaie 1
wks1.Range("D2:D" & der1).Copy PasteSpecial:=wks2.Range("F" & der2) Paste:=xlPasteValues    ''essaie 2 
[/b]

End Sub

J'ai une erreur de compilation, désolé mais je n'arrive pas a trouver la solution.

Re,

A titre d'exemple ... tu peux t'inspirer de la Version 2:

Sub Copie2()
Dim wks1 As Worksheet
Dim wks2 As Worksheet
Dim der1 As Long
Dim der2 As Long
Set wks1 = Sheets("Exportation")
Set wks2 = Sheets("Recueil")
der1 = wks1.Cells(Application.Rows.Count, "A").End(xlUp).Row
der2 = wks2.Cells(Application.Rows.Count, "A").End(xlUp).Row + 1

wks1.Range("A2:A" & der1).Copy
wks2.Range("A" & der2).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = xlCut

End Sub

En espérant que cela t'aide

Bonjour,

Oui merci de ton aide , je n'ai pas exactement ce que je voulais mais ce n'est pas plus mal. Cela me permet de rendre moins fichier moins lourd.

Je marque donc ce problème comme étant résolu. Concernant mes autres problèmes j'ouvre un autre post?

Merci encore

Bonjour,

Content que cela fonctionne ...

Merci ... pour tes remerciements ...

Au sujet de ta seconde question, si tu dois supprimer des lignes sur lesquelles la cellule H a un libellé qui contient "VENTE", tu pourrais, dans un premier temps, tester :

Sub SupprimerLignes()
Dim Lig&
  With Sheets("Recueil")
    For Lig = .Cells(Rows.Count, 8).End(xlUp).Row To 2 Step -1
        If .Cells(Lig, 8) Like "*VENTE*" Then .Rows(Lig & ":" & Lig).Delete
    Next Lig
  End With
End Sub

En espérant que cela t'aide ...

En faisant mes recherches avant ta réponse, j'ai trouvé ça et ça semble fonctionner:

Sub clear()
Dim Lig&
With Sheets("Exportation")
           For Lig = .Cells(Rows.Count, 6).End(xlUp).Row To 1 Step -1
                    If .Cells(Lig, 6) = "VENTE" Or Cells(Lig, 6) = "*" Then .Rows(Lig).Delete
           Next Lig
End With
End Sub

Qu'en pense tu?

En faisant mes recherches avant ta réponse, j'ai trouvé ça et ça semble fonctionner:

Sub clear()
Dim Lig&
With Sheets("Exportation")
           For Lig = .Cells(Rows.Count, 6).End(xlUp).Row To 1 Step -1
                    If .Cells(Lig, 6) = "VENTE" Or Cells(Lig, 6) = "*" Then .Rows(Lig).Delete
           Next Lig
End With
End Sub

Qu'en penses tu?

Re,

Que veux-tu que j'en pense ... ???

Il ne s'agit pas de la même feuille, pas de la même colonne, pas du même test et pas de la même taille de tableau ...

Rechercher des sujets similaires à "copier condition partir vide supprimer ligne valeur"