Supprimer lignes si condition

S

sebbb

Guest
Bonjour à toutes et à tous,

Voilà, j'ai beau chercher, je ne trouve pas comment supprimer par macro des lignes excel avec condition.
La condition de suppression est que dans la colonne A, j'ai un code du type simux où x est un n° d'incrémentation.

Ce que je voudrais, c'est qu'à partir d'un bouton, je supprime dans ma liste toutes les lignes commencant en colonne A par Simux.

Merci à vous tous pour votre contribution.
Je ne cesse de le dire, mais sans ce forum, je n'aurais pas été teès loin en vba!!!
M E R CIIIIIIIIIIIII !!!!!!!!!!!!!!!!!!!!!!!!!

Sébbb.
 
H

Hervé

Guest
Bonjour tout le monde

Une autre proposition :

Public Sub VEV()
Dim i As Integer
For i = Range("a10000").End(xlUp).Row To 1 Step -1
If Range("a" & i).Value Like "simu*" = True Then
Range("a" & i).EntireRow.Delete
End If
Next i
End Sub

Attention au Minuscule et majuscule en colonne A

Salut
Hervé
 
S

sebbb

Guest
Merci Eric et Hervé,

Hervé,
Etant novice en vba, peux-tu m'expliquer ce qu'est :
Public Sub VEV()
Comment puis-je faire pour que la suppression des lignes soit lancée à partir d'un CommandButton?

Merci de m'aider à progresser en vba.

Sébbb
 
J

Jean-Marie

Guest
Bonjour tout le monde

Sebb, je ne sais pas pour ton problème de commandButton1_click.

Mais en revanche, je sais qu'une suppression de ligne génère un recalcul des feuilles ouvertes.

Il y a bien une possibilité de mettre le mode de calcul en manuel, et de le restaurer à la fin de la macro. Pour éviter de basculer le mode de calcul. il y a une possibilité c'est de faire une réunion de plage de cellules, puis de faire une suppression de lignes.

Voici un code de myDearFriend

Sub suppr()
Dim TabTemp As Variant
Dim L As Long, i As Long
Dim Flag As Boolean
'Charge les données dans un tableau variant temporaire (pour accélerer la macro)
Application.ScreenUpdating = False
With ActiveSheet
L = .Range("D65536").End(xlUp).Row
TabTemp = .Range(.Cells(1, 4), .Cells(L, 4)).Value
Selection.Clear
For i = 1 To L
If TabTemp(i, 1) Like "*suppr*" Then
If Not Flag Then
.Cells(i, 1).Select
Flag = True
End If
Union(Selection, .Rows(i).EntireRow).Select
End If
Next i
End With
If MsgBox("Confirmez-vous la suppression ?", vbYesNo) = vbYes Then
Selection.Delete
End If
Application.ScreenUpdating = True
End Sub

Ce code est tiré de ce fil de discussion Lien supprimé

Tu devras adapter le code de Didier à ton cas.

@+Jean-Marie
 
H

Hervé

Guest
re bonjour

Bonjour jean-marie

Sebbb, ton problème provient surement du fait que tu utilises les boutons de la barre d'outil : boîte à outils controls.

utilise plutôt la barre d'outils : formulaire.

Les controles (bouton, combobox, etc..) sont identiques d'apparence mais ne fonctionnent pas de la même façon.

donc :

-renomme ta macro : Public Sub VEV() ( le VEV est le nom de la macro)
-assure toi que ta macro en vba (alt+f11) est bien dans l'objet de ta feuille de travaille. (si ta feuille de travail se nomme SEBBB ta macro en VBA doit se trouver dans l'objet SEBB
- Crée ton bouton par la barre d'outil formulaire
- Une boîte "Affecter une macro" s'ouvre : choisi la macro VEV.
- voila c'est fini.

Salut
Hervé
 
S

sebbb

Guest
Re-bonjour tous le monde!
Merci pour vos réponses.

J'ai réfléchis pendant la pause déjeuner et ce que je voudrais c'est à partir d'un userform, par un "bouton" sur celui-ci, supprimer les lignes qui commence par Simux.

Hervé,
J'ai bien compris ton explication que j'ai appliqué. En effet, j'ai créé un bouton par la boite à outil formulaire, je lui ai affecté la macro : ca marche...mais c'est pas ce que je veux faire.

Je veux impérativement passer par un userform que j'activerai à l'ouverture du classeur (je sais comment faire) si celui-ci contient des lignes Simux (je sais pas comment faire).

Désolé d'être aussi exigeant.

Merci de m'aider comme vous le faites.

Sébbb.
 
H

Hervé

Guest
re

J'ai pas tout compris de l'utilité d'un UF pour ton application.

cette macro se déclenche à l'ouverture du fichier et lance l'userform1 si "simu" à été trouvé en cellule "a1:a10000"

Private Sub Workbook_Open()

Dim i As Integer
For i = Range("a10000").End(xlUp).Row To 1 Step -1
If Range("a" & i).Value Like "simu*" = True Then
UserForm1.Show
Exit For
End If
Next i
End Sub

ensuite à toi de placer une commande sur l'UF pour effacer tes lignes via la macro précédente.

Salut
Hervé
 
S

sebbb

Guest
Ok,
Ca y est ça marche.
Je vais essayer de t'expliquer pourquoi j'ai besoin du UF.

J'ai un tableau, avec des taches associées à des temps. (travail en cours pour atelier)
J'ai créé avec votre aide à tous un masque de saisie qui permet de simuler l'acceptation du travail.
Pour éviter de mauvaises manip par les personnes qui se serviront du classeur excel, je veux qu'il y ait un minimum d'opération à réaliser. D'où l'utilisation de plusieurs UF qui guide l'utilisateur.

D'autre part, je voulais prendre en compte une erreur, si la personne rentre les différentes simulations et ne visualise pas la charge de travail qu'elles entrainent puis ferme excel, à l'ouverture un userform lui demande si les dernères simulations sont à effacer ou à conserver pour visualisation.

VoiliVoila, ca doit pas etre facile à comprendre quand on est pas dedans, et j'ai pas du très bien expliquer.

J'espere que t'auras compris un p'tit peu.

En tout cas merci pour ton aide Hervé, et merci à vous tous qui répondez très rapidement à mes question.

Bonne soirée.
Sébbb.
A bientot pour de nouvelles questions.
 

Discussions similaires

Réponses
22
Affichages
963

Statistiques des forums

Discussions
313 009
Messages
2 094 365
Membres
106 005
dernier inscrit
Gabe68