Peut on mieux faire??? macro excel
Résolu/Fermé
loulou38
-
21 août 2009 à 11:41
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 21 août 2009 à 13:54
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 21 août 2009 à 13:54
A voir également:
- Peut on mieux faire??? macro excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Si et excel - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
10 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
21 août 2009 à 11:49
21 août 2009 à 11:49
Salut,
En clair tu as besoin de supprimer toutes les lignes qui ne contiennent pas "test" dans la colonne C?
C'est bien cela?
En clair tu as besoin de supprimer toutes les lignes qui ne contiennent pas "test" dans la colonne C?
C'est bien cela?
non pas vraiment pijaku,
c un peu plus compliqué
exemple:
test
(cellule vide)
(cellule 1)
(cellule vide)
test2
(cellule vide)
(cellule 2)
(cellule vide)
etc....
si dans ma plage, je vois une cellule qui contient la valeur test alors je dois regarder si la cellule 1 contient également une valeur.
Si c'est le cas je ne fais rien.
Si la cellule est vide alors je dois supprimer les lignes qui se trouve de la cellule 1 à la cellule test.
ensuite je refais la meme chose avec le test 2....
J'espère que c'est clair, et merci de t'intéresser à mon cas....:)
c un peu plus compliqué
exemple:
test
(cellule vide)
(cellule 1)
(cellule vide)
test2
(cellule vide)
(cellule 2)
(cellule vide)
etc....
si dans ma plage, je vois une cellule qui contient la valeur test alors je dois regarder si la cellule 1 contient également une valeur.
Si c'est le cas je ne fais rien.
Si la cellule est vide alors je dois supprimer les lignes qui se trouve de la cellule 1 à la cellule test.
ensuite je refais la meme chose avec le test 2....
J'espère que c'est clair, et merci de t'intéresser à mon cas....:)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
21 août 2009 à 12:03
21 août 2009 à 12:03
Ok alors déjà, tu remplaces :
Cells(n, 3).Select 'sinon je selectionne ma cellule
ActiveCell.EntireRow.Select 'puis je selectionne la ligne entiere
Selection.Delete Shift:=xlUp 'puis je supprime ma ligne
par :
Cells(n, 3).EntireRow.Delete
même chose pour les autres "groupes" de 3 lignes.
Et cela semble correct.
Cells(n, 3).Select 'sinon je selectionne ma cellule
ActiveCell.EntireRow.Select 'puis je selectionne la ligne entiere
Selection.Delete Shift:=xlUp 'puis je supprime ma ligne
par :
Cells(n, 3).EntireRow.Delete
même chose pour les autres "groupes" de 3 lignes.
Et cela semble correct.
merci de ta réponse pikaju,
Dim n As Integer
J'ai adapté et c'est ok, c'est déjà plus joli comme ça, merci :).
Dans la foulée, j'ai une autre petite question.....
Est il possible de sortir de la boucle for next si mes lignes se sont supprimées? c'est à dire ne pas aller de 13 à 25 forcément pour n....
Je ne sais pas si je suis clair, même moi j'ai dû mal à me comprendre.... disons plutôt si je suis passé par ma deuxième conditions puis je insérer une variable ( ex i=1) et dire que si i=1 alors je sors de ma boucle for next
For n = 13 To 25
If Cells(n, 3).Value <> "Armoire KEYBOX 9400 B" Then
Else
n = n + 2
If Cells(n, 3).Value <> "" Then
Else
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
End If
End If
Next
Dim n As Integer
J'ai adapté et c'est ok, c'est déjà plus joli comme ça, merci :).
Dans la foulée, j'ai une autre petite question.....
Est il possible de sortir de la boucle for next si mes lignes se sont supprimées? c'est à dire ne pas aller de 13 à 25 forcément pour n....
Je ne sais pas si je suis clair, même moi j'ai dû mal à me comprendre.... disons plutôt si je suis passé par ma deuxième conditions puis je insérer une variable ( ex i=1) et dire que si i=1 alors je sors de ma boucle for next
For n = 13 To 25
If Cells(n, 3).Value <> "Armoire KEYBOX 9400 B" Then
Else
n = n + 2
If Cells(n, 3).Value <> "" Then
Else
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
End If
End If
Next
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
21 août 2009 à 13:08
21 août 2009 à 13:08
oulala... Je ne comprends rien. A quoi servent ces lignes :
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
C'est 4 fois la même chose????
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
C'est 4 fois la même chose????
oui, je suis obligé de répéter 4 fois ma suppression de ligne.
Dans ma logique, je dis que si je vois une cellule qui contient test alors et que si ma cellule 1 est vide alors je dois supprimer toutes les cellules en gras
TITRE
(cellule vide)
test
(cellule vide)
(cellule 1)
(cellule vide)
pour me retrouver avec ça
TITRE
(cellule vide)
le n-3 me permet de remonter de 3 lignes et ensuite je supprime les lignes une à une ( j'ai pas trouver mieux pour faire ça..)
Voilà
Dim n As Integer
Dim i As Integer
For n = 13 To 25
If Cells(n, 3).Value <> "SYSTEME KEY-PASS" Then
Else
n = n + 2
If Cells(n, 3).Value <> "" Then
Else
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
End If
End If
Next
Dans ma logique, je dis que si je vois une cellule qui contient test alors et que si ma cellule 1 est vide alors je dois supprimer toutes les cellules en gras
TITRE
(cellule vide)
test
(cellule vide)
(cellule 1)
(cellule vide)
pour me retrouver avec ça
TITRE
(cellule vide)
le n-3 me permet de remonter de 3 lignes et ensuite je supprime les lignes une à une ( j'ai pas trouver mieux pour faire ça..)
Voilà
Dim n As Integer
Dim i As Integer
For n = 13 To 25
If Cells(n, 3).Value <> "SYSTEME KEY-PASS" Then
Else
n = n + 2
If Cells(n, 3).Value <> "" Then
Else
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
Cells((n - 3), 3).EntireRow.Delete
End If
End If
Next
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
21 août 2009 à 13:23
21 août 2009 à 13:23
Récapitulons.
Tu testes ta colonne C pour savoir si la cellule = Armoire KEYBOX 9400 B
Si oui tu vérifies que la cellule 2 lignes en dessous est vide.
Si elle est vide tu supprimes 3 lignes de Armoire K... jusqu'à celle 2 lignes en dessous?
C'est bien ce que tu veux?
Ensuite tu parles d'un autre test???
Explique toi clairement si c'est possible...
Tu testes ta colonne C pour savoir si la cellule = Armoire KEYBOX 9400 B
Si oui tu vérifies que la cellule 2 lignes en dessous est vide.
Si elle est vide tu supprimes 3 lignes de Armoire K... jusqu'à celle 2 lignes en dessous?
C'est bien ce que tu veux?
Ensuite tu parles d'un autre test???
Explique toi clairement si c'est possible...
oui!!! c'est exactement ça, c'est plus clair quand c'est toi qui le dit!!!
et ensuite mon autre test serait de sortir de la boucle for next si mes lignes ont été supprimer car je sais très bien que dans le reste de la feuille je ne retrouverai pas de cellule contenant Armoire K.... donc ça ne sert à rien que je continue ma boucle for next.
et ensuite mon autre test serait de sortir de la boucle for next si mes lignes ont été supprimer car je sais très bien que dans le reste de la feuille je ne retrouverai pas de cellule contenant Armoire K.... donc ça ne sert à rien que je continue ma boucle for next.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
21 août 2009 à 13:35
21 août 2009 à 13:35
Alors essaye ceci. Mais avant tout sauvegarde ton classeur. Si j'ai dermé, tu pourras t'en sortir.....
Dim n As Integer
For n = 13 To 25 'va tester les lignes de 13 à 25
If Cells(n, 3).Value = "SYSTEME KEY-PASS" Then ' si le contenu de la cellule EST (tu avais mis n'est pas...)
n = n + 2 ' je descend de deux lignes
If Cells(n, 3).Value = "" Then ' si la cellule est vide alors
Range(Cells(n - 2, 3), Cells(n, 3)).EntireRow.Delete Shift:=xlUp ' je supprime mes trois lignes
Exit Sub 'et je sors de la macro
End If
End If
Next
Dim n As Integer
For n = 13 To 25 'va tester les lignes de 13 à 25
If Cells(n, 3).Value = "SYSTEME KEY-PASS" Then ' si le contenu de la cellule EST (tu avais mis n'est pas...)
n = n + 2 ' je descend de deux lignes
If Cells(n, 3).Value = "" Then ' si la cellule est vide alors
Range(Cells(n - 2, 3), Cells(n, 3)).EntireRow.Delete Shift:=xlUp ' je supprime mes trois lignes
Exit Sub 'et je sors de la macro
End If
End If
Next
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
21 août 2009 à 13:54
21 août 2009 à 13:54
Ne pars pas sans mettre ce topic "résolu"
Reviens...................
Reviens...................