procédures multiples

nicof

XLDnaute Nouveau
Bonjour à tous,

Mon problème est le suivant, j'ai plusieurs procédures tels que supprimer les lignes vides, les colonnes vides et les lignes dans lesquelles se trouvent certaines valeurs dans la colonne 1 du fichier.

Cependant, je n'arrive pas à unifier ces procédures en une seule procédure, ce qui me permettrait d'avoir une seule macro.

Voici le programme:

Sub Mise_en_forme()

Application.ScreenUpdating = False '

Dim i As Long
For i = 1 To [a65536].End(xlUp).Row
If Cells(i, 1) Like "*05.02.2008*" Then
Cells(i, 1).EntireRow.Delete
End If

Dim i as integer
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Cells(i, 1).Value = "" Then Rows(i).Delete
End If

For i = 256 To 1 Step -1
If Cells(65536, i).End(xlUp).Row = 1 Then Cells(1, i).EntireColumn.Delete
End If

Next i
End Sub

Je pense que ma manière d'unifier ces trois procédures en une seule est mauvaise.

De plus, j'ai un petit problème pour une autre condition. J'aimerais faire une macro qui selectionne toutes les valeurs de la colonne 1 commencant par la lette 2 et qui supprime ces lignes.

J'ai trouvé çà mais çà marche que après avoir exécuté dix fois la macro:

Sub Selection_Supprime()

Application.ScreenUpdating = False '
Dim i As Long
For i = 1 To [a65536].End(xlUp).Row
If Cells(i, 1) Like "*2*" Then
Cells(i, 1).EntireRow.Delete
Next i
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : procédures multiples

Bonjour



Voici une proposition

Code:
Sub Mise_en_forme()
Application.ScreenUpdating = False 
Dim i As Long
For i = [a65536].End(xlUp).Row To 1 Step -1
If Cells(i, 1) Like "*05.02.2008*" _
Or IsEmpty(Cells(i, 1)) Or Left(Cells(i,1),1)="2" Then
Cells(i, 1).EntireRow.Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
Par contre cette partie de ton code me pose problème:
For i = 256 To 1 Step -1
If Cells(65536, i).End(xlUp).Row = 1 Then Cells(1, i).EntireColumn.Delete
End If

Un classuer Excel (sous XL 2000 et <) a toujours 256 colonnes??
Tu peux les masquer pas les supprimer.
 
Dernière édition:

nicof

XLDnaute Nouveau
Re : procédures multiples

Merci quand même, mais je ne pense pas que ce soit bon

J'aimerais dans un premier temps que la macro supprime les lignes vides, puis qu'elle supprime les lignes contenant certaines valeurs dans la colonne 1, puis qu'elle supprime les colonnes vides.
Le tout dans une seule procédure svp.

De plus, j'aimerais qu'on m'apprenne à écrire une macro qui supprime toutes les lignes d'une feuille dont la valeur de la première colonne de cette ligne commence par 2.
 

nicof

XLDnaute Nouveau
Re : procédures multiples

Re,

Merci de m'avoir répondu.
Cà marche ssi j'éxécute plusieurs fois la macro car il y a plusieurs conditions.
Voici le programme que j'aimerais executer en une seule fois dans une seule procédure. Or, j'arrive pas à unifier les trois procédures et en plus y a un pb je pense dans la seconde procédure.

Sub Supprimer_Lignes_Vides()
Application.ScreenUpdating = False
Dim i as integer
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Cells(i, 1).Value = "" Then Rows(i).Delete
Next i
Application.ScreenUpdating = True
End Sub

Ca ok çà marche

Ensuite, j'ai plusieurs conditions qui s'executent pas en meme temps car j'ecris mal le programme..... J'aimerais que cela s'execute en une seule fois en meme temps et que je n'ai plus besoin de reexecuter la macro pour que ca marche.

Sub Miseneforme()
Application.ScreenUpdating = False
Dim i As Long
For i = [a65536].End(xlUp).Row To 1 Step -1
If Left(Cells(i,1),1)="2" Then
Cells(i, 1).EntireRow.Delete
End If

For i = 1 To [a65536].End(xlUp).Row
If Cells(i, 1) Like "*05.02.2008*" Then
Cells(i, 1).EntireRow.Delete
End If

For i = 1 To [a65536].End(xlUp).Row
If Cells(i, 1) Like "*UID29699*" Then
Cells(i, 1).EntireRow.Delete
End If

For i = 1 To [a65536].End(xlUp).Row
If Cells(i, 1) Like "*Client*" Then
Cells(i, 1).EntireRow.Delete
End If

Next i
Application.ScreenUpdating = True
End Sub

Cette seconde procédure marche si j'execute plusieurs fois la macro

Enfin, la troisième procédure semble marcher.

Sub Supprimer_Colonnes_Vides()
Application.ScreenUpdating = False
Dim i as integer
For i = 256 To 1 Step -1
If Cells(65536, i).End(xlUp).Row = 1 Then Cells(1, i).EntireColumn.Delete
Next i
Application.ScreenUpdating = True
End Sub

En définitive, j'ai deux problèmes: 1) j'arrive pas à unifier ces trois procédures en une seule qui marche du premier coup et que j'execute qu'une seule fois
2) pour la seconde procédure, je dois executer la macro plusieurs fois pour que ca marche car j'ai l'impression que mes End If entrainenent une hierarchie dans les conditions.

Bon courage.
 

Staple1600

XLDnaute Barbatruc
Re : procédures multiples

Re


Désolé de te contredire

Mais cela fonctionne et en une seule fois
(ici pour 3 conditions)
Code:
Sub Mise_en_forme()
Application.ScreenUpdating = False
Dim i As Long
For i = [a65536].End(xlUp).Row To 1 Step -1
If Cells(i, 1) Like "*05.02.2008*" _
Or IsEmpty(Cells(i, 1)) Or Left(Cells(i, 1), 1) = "2" Then
Cells(i, 1).EntireRow.Delete
End If
Next i
Application.ScreenUpdating = True
End Sub

edit: bonjour pierrejean, merci d'avoir rajouter les condtions manquantes ;)
 
Dernière édition:

nicof

XLDnaute Nouveau
Re : procédures multiples

Je ne te contredis aucunement,je sais que ton programme marche bien.

Cependant, tu n'intègres pas dans ce programme la suppression des colonnes vides, ni les nouvelles conditions que je mets dans la seconde procédure.

Si tu pouvais écrire le même programme en tenant compte des nouvelles conditions présentes dans ma seconde procédure ainsi que la procedure suppression des colonnes vides, je t'en serais gré.

Bon courage.


Désolé de te contredire

Mais cela fonctionne et en une seule fois
(ici pour 3 conditions)
Code:
Sub Mise_en_forme()
Application.ScreenUpdating = False
Dim i As Long
For i = [a65536].End(xlUp).Row To 1 Step -1
If Cells(i, 1) Like "*05.02.2008*" _
Or IsEmpty(Cells(i, 1)) Or Left(Cells(i, 1), 1) = "2" Then
Cells(i, 1).EntireRow.Delete
End If
Next i
Application.ScreenUpdating = True
End Sub
[/QUOTE]
 

pierrejean

XLDnaute Barbatruc
Re : procédures multiples

bonjour nicof

Salut Staple :)

Teste ceci:

Code:
Sub Supprimer_Lignes_Vides()
Application.ScreenUpdating = False
Dim i As Integer
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Cells(i, 1).Value = "" Then Rows(i).Delete
Next i
For i = [a65536].End(xlUp).Row To 1 Step -1
If Left(Cells(i, 1), 1) = "2" Or Cells(i, 1) Like "*05.02.2008*" Or Cells(i, 1) Like "*UID29699*" Or Cells(i, 1) Like "*Client*" Then
Cells(i, 1).EntireRow.Delete
End If
Next i
For i = 256 To 1 Step -1
If Cells(10, i).End(xlUp).Row = 1 Then Columns(i).Delete
Next i
Application.ScreenUpdating = True
End Sub
 

nicof

XLDnaute Nouveau
Re : procédures multiples

Merci de ton aide mais ca marche toujours pas.
J'ai rajouté quelques conditions pour supprimer des lignes supplémentaire en fonction des valeurs de la colonne 1 en suivant ton modèle.

Le probème c'est que cette macro me supprime tout lol.
A la fin me reste genre trois quatre ligne.


bonjour nicof

Salut Staple :)

Teste ceci:

Code:
Sub Supprimer_Lignes_Vides()
Application.ScreenUpdating = False
Dim i As Integer
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Cells(i, 1).Value = "" Then Rows(i).Delete
Next i
For i = [a65536].End(xlUp).Row To 1 Step -1
If Left(Cells(i, 1), 1) = "2" Or Cells(i, 1) Like "*05.02.2008*" Or Cells(i, 1) Like "*UID29699*" Or Cells(i, 1) Like "*Client*" Then
Cells(i, 1).EntireRow.Delete
End If
Next i
For i = 256 To 1 Step -1
If Cells(10, i).End(xlUp).Row = 1 Then Columns(i).Delete
Next i
Application.ScreenUpdating = True
End Sub
 

nicof

XLDnaute Nouveau
Re : procédures multiples

Re, j'ai trouvé la bonne macro grâce à vous.
En fait, pierre jean tu as juste fait une erreur pour la suppression des colonnes vides car avec ta macro ca ma supprimait tout.

J'ai juste mis ca à la fin

Sub Miseenforme()
Application.ScreenUpdating = False
Dim i As Integer
For i = Range("A65536").End(xlUp).Row To 1 Step -1
If Cells(i, 1).Value = "" Then Rows(i).Delete
Next i
For i = [a65536].End(xlUp).Row To 1 Step -1
If Left(Cells(i, 1), 1) = "2" Or Left(Cells(i, 1), 1) = "A" Or Cells(i, 1) Like "*05.02.2008*" Or Cells(i, 1) Like "*UID29699*" Or Cells(i, 1) Like "*Client*" Or Cells(i, 1) Like "*facturé*" Or Cells(i, 1) Like "*12200106*" Or Cells(i, 1) Like "*12200213*" Or Cells(i, 1) Like "*12100580*" Or Cells(i, 1) Like "*12100200*" Or Cells(i, 1) Like "*12102506*" Or Cells(i, 1) Like "*12102672*" Or Cells(i, 1) Like "*12200209*" Or Cells(i, 1) Like "*12103354*" Or Cells(i, 1) Like "*12200954*" Or Cells(i, 1) Like "*12201091*" Or Cells(i, 1) Like "*12102801*" Then
Cells(i, 1).EntireRow.Delete
End If
Next i
For i = 256 To 1 Step -1
If Cells(65536, i).End(xlUp).Row = 1 Then Cells(1, i).EntireColumn.Delete
Next i
Application.ScreenUpdating = True
End Sub


Merci de ton aide mais ca marche toujours pas.
J'ai rajouté quelques conditions pour supprimer des lignes supplémentaire en fonction des valeurs de la colonne 1 en suivant ton modèle.

Le probème c'est que cette macro me supprime tout lol.
A la fin me reste genre trois quatre ligne.
 

nicof

XLDnaute Nouveau
Re : procédures multiples

Re,

Avant de rajouter une connerie dans ma macro, je voudrais vous poser une question.


Je souhaite supprimer dans la macro toutes les lignes dont le mot de la colonne 28 commence par effet.

Est ce bien çà la macro?

Sub Supprimerlignescolonne28commencantpareffet()
Application.ScreenUpdating = False
Dim i As Long
For i = [a65536].End(xlUp).Row To 1 Step -1
If Left(Cells(i,1),28)="effet" Then
Cells(i, 1).EntireRow.Delete
Next i
Application.ScreenUpdating = True
End Sub
 

nicof

XLDnaute Nouveau
Re : procédures multiples

Je viens de la tester çà marche pas.


Re,

Avant de rajouter une connerie dans ma macro, je voudrais vous poser une question.


Je souhaite supprimer dans la macro toutes les lignes dont le mot de la colonne 28 commence par effet.

Est ce bien çà la macro?

Sub Supprimerlignescolonne28commencantpareffet()
Application.ScreenUpdating = False
Dim i As Long
For i = [a65536].End(xlUp).Row To 1 Step -1
If Left(Cells(i,1),28)="effet" Then
Cells(i, 1).EntireRow.Delete
Next i
Application.ScreenUpdating = True
End Sub
 

nicof

XLDnaute Nouveau
Re : procédures multiples

Je l'ai testé et c'est pas bon comme je le pensais. La raison est que le mot commence par effet mais ca peut etre "effet renault" ou "effet rover".
Or moi je veux que la macro me selectionne toutes les lignes ou la colonne 28 comprend une expression commencant par effet, afin de la supprimer

Bon courage


Re


Left(Cells(i,1),28)="effet" Then ?????

Plutôt remplacer par
Cells(i,28) Like "effet*" Then
 

Discussions similaires

Réponses
2
Affichages
140

Statistiques des forums

Discussions
312 581
Messages
2 089 916
Membres
104 305
dernier inscrit
EDIT