Probleme 1004 suppression de cellules

Sarah Coff

XLDnaute Nouveau
Bonjour à toutes et à tous,

Me revoilà coincé une nouvelle fois dans vba ^^

je vous explique la situation : j'ai quatre colonnes deux avec des dates (A et D) de 1998 à 2010 (jour par jour) et deux avec des chiffres (B et E)
J'aimerai faire que les dates si la date en D n'est pas égal à la date en A alors on supprime les deux cases D et E . (et ainsi de suite)

ma macro est la suivante :


VB:
 Sub tri()

Dim rcell As Range
Dim rCellule As Range
Dim xCellule As Range
Dim ma_ligne As Long

For Each xCellule In Range("A2:A65536")
For Each rCellule In Range("D2:D65536")

If rCellule <> xCellule Then
    ma_ligne = rCellule.Row
        Range("D" & ma_ligne, "E" & ma_ligne).Delete Shift:=xlDown
End If
If rCellule = "" Then Exit Sub
Next
Next
End Sub

La ligne avec l'erreur est la suivante :
Range("D" & ma_ligne, "E" & ma_ligne).Delete Shift:=xlDown


Merci d'avance
 

Gorfael

XLDnaute Barbatruc
Re : Probleme 1004 suppression de cellules

Salut Sarah Coff et le forum
Code:
Sub tri()
Dim rCellule As Range
Dim xCellule As Range

For Each xCellule In Range([A2], [A65536].End(xlUp))
    For Each rCellule In Range([D2], [D65536].End(xlUp))
        If rCellule <> xCellule Then Range(Cells(rCellule.Row, "D"), Cells(rCellule.Row, "E")).Delete Shift:=xlUp
    Next rCellule
Next xCellule
End Sub
Attention, je ne l'ai pas testée.

Ne connaissant que ce que tu as mis dans ton poste, je ne peux qu'émettre des remarques.

Tu fais une double boucle que je trouve assez étrange :
Tu vérifies que la cellule A ne se retrouve pas en D. Si c'est le cas, tu supprimes les cellules de D à E en les décalant vers le bas ??? Comment fais-tu ? Moi, je ne peux que décaler vers la gauche ou le haut :D.
Bon, admettons. mais ta ligne contient maintenant la valeur de A et les valeurs de D et E de la ligne suivante (avant la suppression.

Tu sorts de ta boucle si A est vide, après avoir supprimé D et E de cette ligne. Pourquoi pas avant de supprimer ?

Tu fais tes boucles de la ligne 2 à la dernière de la colonne.
- Pourquoi ne pas limiter à ce niveau, jusqu'à le dernière utile (non-vide) ? C'est mieux que prévoir une porte de sortie dans la boucle.
- Tu te limites à la ligne 65536 => Mais il existe maintenant des lignes de numéro supérieur (depuis la version 2007). Et même si tu ne penses pas maintenant faire évoluer ta version, de quoi demain sera fait...
Pour la dernière cellule de la colonne A, j'utilise Cells(Rows.Count, "A")
Pour la dernière non vide : Cells(Rows.Count, "A").End(xlUp)

Tu testes, pour chaque cellule de A, toutes les cellules de D. Est-ce bien utile ? Je ne connais pas le fichier, donc difficile de me prononcer. Mais s'il n'y a qu'un seul D, quand je l'efface, je sors de la boucle de D, avec un exit For. Toi, tu arrêtes ta macro dès la fin de ta deuxième boucle, alors qu'on a testé que A2 ???

Je sais que Next s'affranchit de la variable. Mais je préfère la remettre : ça ne coûte rien, mais quand j'ai des codes important, avec des boucles multiples imbriquées, je trouve que je m'y retrouve mieux. Les indentations m'aident aussi beaucoup pour savoir où j'en suis dans les Boucles/Tests/Préfixe. Mon but est pas de faire du "joli", mais des codes "bien organisés", pour pouvoir les dépanner facilement, même en étant fatigué.
A+
 
Dernière édition:

Sarah Coff

XLDnaute Nouveau
Re : Probleme 1004 suppression de cellules

Tout d'abord merci à vous deux.

Odesta j'ai toujours la même erreur avec ta ligne.

Gorfael ta macro fonctionne mais elle m'efface tout.

Pour vous faciliter la tâche j'ai mis le fichier en pièce jointe. Donc les dates s'arrête en 2000 mais pour info mon vrai fichier va jusqu'à hier.
Ce que je veux exactement c'est garder seulement les dates en commun et sur la même ligne. (l'eurusd à un prix quasi tout les jours , mais pas le blé)


bonne journée

^^

voici mon fichier
 

Pièces jointes

  • Book.zip
    40.6 KB · Affichages: 21
  • Book.zip
    40.6 KB · Affichages: 25
  • Book.zip
    40.6 KB · Affichages: 25

Efgé

XLDnaute Barbatruc
Re : Probleme 1004 suppression de cellules

Bonjour Sarah Coff, Gorfael, Odesta, le fil, le forum
Une proposition avec ce que j'ai compris:
Les dates en colonne D qui ne sont pas présentent en colonne A sont supprimées.
Code:
[COLOR=blue]Sub[/COLOR] Regroupe()
[COLOR=blue]Dim[/COLOR] i#, j#
Application.ScreenUpdating = 0
[COLOR=blue]For[/COLOR] i = Cells(Rows.Count, 1).End(xlUp).Row [COLOR=blue]To[/COLOR] 2 [COLOR=blue]Step[/COLOR] -1
    Liste = Liste & Cells(i, 1) & ","
[COLOR=blue]Next[/COLOR] i
[COLOR=blue]For[/COLOR] j = Cells(Rows.Count, 4).End(xlUp).Row [COLOR=blue]To[/COLOR] 2 [COLOR=blue]Step[/COLOR] -1
    [COLOR=blue]If[/COLOR] InStr(Liste, Cells(j, 4) & ",") = 0 [COLOR=blue]Then[/COLOR] Range(Cells(j, 4), Cells(j, 5)).Delete shift:=xlUp
[COLOR=blue]Next[/COLOR] j
Application.ScreenUpdating = 1
[COLOR=blue]End Sub[/COLOR]
Cordialement
 

Statistiques des forums

Discussions
312 348
Messages
2 087 506
Membres
103 566
dernier inscrit
c@b@l77540