Suppression de bloc de cellule en boucle, comment faire ?
Dernière réponse : dans Programmation
Bonjour,
Je suis sur des données Excel, etant novice en programmation, je souhaiterais avoir votre aide pour un petit programme qui pour vous je suppose doit être simple, mais que pour moi est hyper compliqué ! Donc voici le souci,
J’ai une feuille Excel et je souhaiterais supprimer un bloc de 12 lignes consécutives, mais je souhaiterais garder la 13ième ligne et supprimer de la 14 ieme à la 26ième.
Le premier bloc à supprimer est de la ligne 11 à 22, garder la ligne 23
Le second bloc à supprimer est de la ligne 12 à 23 et garder la ligne 24
et ainsi de suite … jusqu'à la dernière ligne contenant des données
Voici un enregistrement de macro Excel en espérant que ça peut vous aider. Merci beaucoup pour votre aide.
Je suis sur des données Excel, etant novice en programmation, je souhaiterais avoir votre aide pour un petit programme qui pour vous je suppose doit être simple, mais que pour moi est hyper compliqué ! Donc voici le souci,
J’ai une feuille Excel et je souhaiterais supprimer un bloc de 12 lignes consécutives, mais je souhaiterais garder la 13ième ligne et supprimer de la 14 ieme à la 26ième.
Le premier bloc à supprimer est de la ligne 11 à 22, garder la ligne 23
Le second bloc à supprimer est de la ligne 12 à 23 et garder la ligne 24
et ainsi de suite … jusqu'à la dernière ligne contenant des données
Voici un enregistrement de macro Excel en espérant que ça peut vous aider. Merci beaucoup pour votre aide.
Sub etape2()
'
' etape2 Macro
' suppression du détail des heures
'
'
Rows("11:22").Select
Selection.Delete Shift:=xlUp
Rows("12:23").Select
Selection.Delete Shift:=xlUp
Rows("13:24").Select
Selection.Delete Shift:=xlUp
Rows("14:25").Select
Selection.Delete Shift:=xlUp
Rows("15:26").Select
Selection.Delete Shift:=xlUp
Rows("16:27").Select
Selection.Delete Shift:=xlUp
Rows("17:28").Select
Selection.Delete Shift:=xlUp
Rows("18:29").Select
Selection.Delete Shift:=xlUp
End Sub
Autres pages sur : suppression bloc cellule boucle
Lassé par la pub ? Créez un compte
Meilleure solution
Salut,
M'enfin, pourquoi d'abord sélectionner les lignes avant d'agir sur la sélection ?
Agis directement sur les lignes !
La suppression de lignes dans un tableau est un cas bien connu.
J'en traite un peu ici : http://www.presence-pc.com/forum/ppc/Programmation/tuto... Tu ne tombes pas dans le piège et c'est bien. Nous n'aurons pas besoin de prendre le problème à l'envers ici.
Bon. Factorisons ton code. Voici la partie variable :
Bien. Moi, j'aime les chiffres. Alors au lieu d'écrire Rows("11:22"), je vais écrire Range(Rows(11), Rows(22)). C'est plus "mathématique"
Ça donne :
Bon, maintenant il y a le problème de la borne supérieure. D'où sort ce 18 ? Il faudrait le calculer. Relis ce topic http://www.presence-pc.com/forum/ppc/Programmation/tuto... et fais des propositions.
M'enfin, pourquoi d'abord sélectionner les lignes avant d'agir sur la sélection ?
Agis directement sur les lignes !
Le paramètre Shift étant facultatifs d'une part et ce qui est à supprimer étant bien défini comme des lignes, pas de soucis, on peut ne pas le préciser. Je trouve ce code plus clair. Et toi ?
Rows("11:22").Delete
Rows("12:23").Delete
Rows("13:24").Delete
Rows("14:25").Delete
Rows("15:26").Delete
Rows("16:27").Delete
Rows("17:28").Delete
Rows("18:29").Delete
La suppression de lignes dans un tableau est un cas bien connu.
J'en traite un peu ici : http://www.presence-pc.com/forum/ppc/Programmation/tuto... Tu ne tombes pas dans le piège et c'est bien. Nous n'aurons pas besoin de prendre le problème à l'envers ici.
Bon. Factorisons ton code. Voici la partie variable :
11:22
12:23
13:24
14:25
15:26
16:27
17:28
18:29
...
Cela peut s'écrire : x:x+11, avec x variant de 11 à 18 par pas de 1.12:23
13:24
14:25
15:26
16:27
17:28
18:29
...
Bien. Moi, j'aime les chiffres. Alors au lieu d'écrire Rows("11:22"), je vais écrire Range(Rows(11), Rows(22)). C'est plus "mathématique"
Ça donne :
Dim x As Long
For x = 11 To 18
Range(Rows(x), Rows(x + 11)).Delete
Next
Bon, maintenant il y a le problème de la borne supérieure. D'où sort ce 18 ? Il faudrait le calculer. Relis ce topic http://www.presence-pc.com/forum/ppc/Programmation/tuto... et fais des propositions.
Merci oui c'est beaucoup plus clair effectivement, mais je n'ai pas le sens de la programmation.
Pour répondre à a question le 18 est un numéro de ligne à la quel je me suis arrêté, en réalité il en existe presque 1000.
En lisant http://www.presence-pc.com/forum/ppc/Programmation/tuto...
je peux mieux t'aiguiller en te disant que pour que le programme ne s'execute plus quand il trouve la valeur
"TEMPTATION" dans une cellule de la collone B, sachant que je le numéros de ligne n'est jamais fixe.
J'ai une idée, ça pourrais être :
Désolé mais je ne connais pas les formules qui faudrais mettre. J'essaye de progresser mais c'est difficile quand on y connait rien...
Pour répondre à a question le 18 est un numéro de ligne à la quel je me suis arrêté, en réalité il en existe presque 1000.
En lisant http://www.presence-pc.com/forum/ppc/Programmation/tuto...
je peux mieux t'aiguiller en te disant que pour que le programme ne s'execute plus quand il trouve la valeur
"TEMPTATION" dans une cellule de la collone B, sachant que je le numéros de ligne n'est jamais fixe.
J'ai une idée, ça pourrais être :
Sub etape2() ' ' etape2 Macro ' suppression du détail des heures ' ' Do Dim x As Long For x = 11 To x Range(Rows(x), Rows(x + 11)).Delete Next Loop Until Condition.collum("B:B") = "TEMPTATION" End Sub
Désolé mais je ne connais pas les formules qui faudrais mettre. J'essaye de progresser mais c'est difficile quand on y connait rien...
M'enfin, pourquoi as-tu élue ma réponse comme étant la meilleure ?
Maintenant le topic est réputé résolu
Spa grave, mais bon
Bon, une boucle qui contient un Dim, je trouve ça louche.
Et puis tu mets une boucle dans une boucle. C'est sûr, ce n'est pas la bonne solution.
Pour être académique, il faudrait effectivement utiliser une boucle While. Je préfère (c'est personnel) interrompre ma boucle For :
Autre façon de programmer la chose :
Maintenant le topic est réputé résolu
Spa grave, mais bon
Bon, une boucle qui contient un Dim, je trouve ça louche.
Et puis tu mets une boucle dans une boucle. C'est sûr, ce n'est pas la bonne solution.
Pour être académique, il faudrait effectivement utiliser une boucle While. Je préfère (c'est personnel) interrompre ma boucle For :
Dim x As Long
For x = 11 To 65536
If Cells(x, 2) = "TEMPTATION" Then Exit For
Range(Rows(x), Rows(x + 11)).Delete
Next
Autre façon de programmer la chose :
Dim row As Range
For Each row In Range(Rows(11), Rows(Rows.Count)).Rows
If row.Columns("B") = "TEMPTATION" Then Exit For
Range(row, row.Offset(11)).Delete
Next
Désolé, j'ai trouvé ta réponse excellente que j'ai voulu faire partagé
mais on est pas loin de la solution !
j'ai lancé la macro mais j'ai un autre problème en fait parce que je me suis rendu compte qu'a un moment le nombre de ligne entre deux bloc de tableau à supprimer n'étant pas respecté (j'espère que tu vois ce que je veux dire).
En gros les données sont organisé ainsi :
1 ligne à conserver
10 lignes suivante à supprimer
2 lignes vides
1 ligne à conserver
10 lignes suivante à supprimer
2 lignes vides
1 ligne à conserver
10 lignes suivante à supprimer
2 lignes vides
etc...
sauf qu'à un moment dans mon tableau qui est extrait, j'ai une ligne vide qui ce rajoute en plus
pour me me faire comprendre voici un imprime écran :
![]()
Uploaded with ImageShack.us
mais on est pas loin de la solution !
j'ai lancé la macro mais j'ai un autre problème en fait parce que je me suis rendu compte qu'a un moment le nombre de ligne entre deux bloc de tableau à supprimer n'étant pas respecté (j'espère que tu vois ce que je veux dire). En gros les données sont organisé ainsi :
1 ligne à conserver
10 lignes suivante à supprimer
2 lignes vides
1 ligne à conserver
10 lignes suivante à supprimer
2 lignes vides
1 ligne à conserver
10 lignes suivante à supprimer
2 lignes vides
etc...
sauf qu'à un moment dans mon tableau qui est extrait, j'ai une ligne vide qui ce rajoute en plus
pour me me faire comprendre voici un imprime écran :

Uploaded with ImageShack.us
Solution trouvé :
Sub etape2()
'
' etape2 Macro
'
'
Range("D10").Select
ActiveCell.FormulaR1C1 = "=IF(RC[-3]<>"""",1,0)"
Range("D10").Select
Selection.AutoFill Destination:=Range("D10:D1000"), Type:=xlFillDefault
Range("D10:D1000").Select
Rows("10:10").Select
Selection.AutoFilter
ActiveSheet.Range("$A$10:$P$1000").AutoFilter Field:=4, Criteria1:="0"
Rows("21:1000").Select
Selection.Delete Shift:=xlUp
ActiveWindow.SmallScroll Down:=-9
ActiveSheet.Range("$A$10:$P$801").AutoFilter Field:=4
Dim x As Long
For x = 11 To 1000
Range(Rows(x), Rows(x + 9)).Delete
Next
End Sub
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumFaire une boucle rj45
- ForumExcel-comment faire une boucle sous macro
- ForumSuppression espace dans cellule excel
- ForumFaire un moins dans cellule excel
- ForumFaire une boucle sous exel
- ForumFaire un boucle avec excel
- ForumExcel cellule colonne vbs boucle
- ForumVba copier cellule autre feuille boucle
- ForumSuppression ligne plage cellule vide
- ForumMacro excel vba boucle cellule
- Voir plus
Ne t'ai-je pas conseillé de ne pas user de sélection ?