si 3 derniers caract cell "A01" alors supp ligne

  • Initiateur de la discussion Initiateur de la discussion boby
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

B

boby

Guest
Bonjour à tous,

je commence à parler comme un vrai VBAiste, mais je n'en ai pas encore les compétences

je souhaiterai savoir s'il existe un code pour supprimer une ou des ligne entière si dans la colonne A ces lignes les 3 dernier caracteres de la celule sont:
- A01
- A02
- A03
- Z01
- Z02
- Z03

existe t il egalement un code pour supprimer plusieurs colonnes ou groupes de colonnes différents en meme temps

Merci a tous
 
Re : si 3 derniers caract cell "A01" alors supp ligne

Re le fil, Salut Hervé,

Humm... pas simple de tenter d'optimiser ta procédure sans voir à quoi ressemble les données originales avant traitement.
Ci-dessous, une tentative (sans garantie !) :
Code:
[SIZE=2]Sub R20AX_EOC_TEST()
[COLOR=navy]Dim [/COLOR]Plage[COLOR=navy] As [/COLOR]Range
[COLOR=navy]Dim [/COLOR]L[COLOR=navy] As Long
Dim [/COLOR]C[COLOR=navy] As Byte[/COLOR]
      [COLOR=green]'3 premières lignes[/COLOR]
      Rows("1:3").Delete Shift:=xlUp
      [COLOR=green]'Suppression Colonnes[/COLOR]
      [COLOR=navy]Set[/COLOR] Plage = Columns(1)
      [COLOR=navy]For [/COLOR]C = 2[COLOR=navy] To [/COLOR]40
            [COLOR=navy]Select Case[/COLOR] C
            [COLOR=navy]Case[/COLOR] 2, 5[COLOR=navy] To [/COLOR]7, 11, 14, 15, 17[COLOR=navy] To [/COLOR]21, 23, 24, 26[COLOR=navy] To [/COLOR]28, 30[COLOR=navy] To [/COLOR]39
                  [COLOR=navy]Set[/COLOR] Plage = Union(Plage, Columns(C))
            [COLOR=navy]End Select[/COLOR]
      [COLOR=navy]Next[/COLOR] C
      Plage.Delete
      [COLOR=green]'Suppression lignes dont la cellule "H.." ne commence pas par ....[/COLOR]
      Plage = [COLOR=navy]Nothing[/COLOR]
      [COLOR=navy]For [/COLOR]L = 2[COLOR=navy] To [/COLOR]Range("H65536").[COLOR=navy]End[/COLOR](xlUp).Row
            [COLOR=navy]Select Case[/COLOR] Left(Cells(L, 8).Value, 2)
            [COLOR=navy]Case[/COLOR] "AT", "CH", "DK", "FI", "IE", "JP", "MX", "NL", "PT", "XS"
            [COLOR=navy]Case Else[/COLOR]
                    [COLOR=navy]If [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR]
                          [COLOR=navy]Set[/COLOR] Plage = Rows(L)
                    [COLOR=navy]Else[/COLOR]
                          [COLOR=navy]Set[/COLOR] Plage = Union(Plage, Rows(L))
                    [COLOR=navy]End If[/COLOR]
            [COLOR=navy]End Select[/COLOR]
      [COLOR=navy]Next[/COLOR] L
      [COLOR=navy]If Not [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR] Plage.Delete
      [COLOR=green]'Suppression lignes contenant "20920" ou "85068" en colonne D[/COLOR]
      Plage = [COLOR=navy]Nothing[/COLOR]
      [COLOR=navy]For [/COLOR]L = 2[COLOR=navy] To [/COLOR]Range("D65536").[COLOR=navy]End[/COLOR](xlUp).Row
            [COLOR=navy]Select Case[/COLOR] Cells(L, 4).Value
            [COLOR=navy]Case[/COLOR] "20920", "85068"
                    [COLOR=navy]If [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR]
                          [COLOR=navy]Set[/COLOR] Plage = Rows(L)
                    [COLOR=navy]Else[/COLOR]
                          [COLOR=navy]Set[/COLOR] Plage = Union(Plage, Rows(L))
                    [COLOR=navy]End If[/COLOR]
            [COLOR=navy]End Select[/COLOR]
      [COLOR=navy]Next[/COLOR] L
      [COLOR=navy]If Not [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR] Plage.Delete
      [COLOR=green]'Suppression lignes dont la cellule "A..." commence par ....[/COLOR]
      Plage = [COLOR=navy]Nothing[/COLOR]
      [COLOR=navy]For [/COLOR]L = 2[COLOR=navy] To [/COLOR]Range("A65536").[COLOR=navy]End[/COLOR](xlUp).Row
            [COLOR=navy]Select Case[/COLOR] Left(Cells(L, 4).Value, 1)
            [COLOR=navy]Case[/COLOR] "A", "E", "P", "O"
                    [COLOR=navy]If [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR]
                          [COLOR=navy]Set[/COLOR] Plage = Rows(L)
                    [COLOR=navy]Else[/COLOR]
                          [COLOR=navy]Set[/COLOR] Plage = Union(Plage, Rows(L))
                    [COLOR=navy]End If[/COLOR]
            [COLOR=navy]End Select[/COLOR]
      [COLOR=navy]Next[/COLOR] L
      [COLOR=navy]If Not [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR] Plage.Delete
      [COLOR=green]'Suppression lignes dont la cellule "A..." se termine par...[/COLOR]
      Plage = [COLOR=navy]Nothing[/COLOR]
      [COLOR=navy]For [/COLOR]L = 2[COLOR=navy] To [/COLOR]Range("A65536").[COLOR=navy]End[/COLOR](xlUp).Row
            [COLOR=navy]Select Case[/COLOR] Right(RTrim(Cells(L, 1).Value), 3)
                  [COLOR=navy]Case[/COLOR] "A01", "A02", "A03", "Z01", "Z02", "Z03"
                        [COLOR=navy]If [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR]
                              [COLOR=navy]Set[/COLOR] Plage = Rows(L)
                        [COLOR=navy]Else[/COLOR]
                              [COLOR=navy]Set[/COLOR] Plage = Union(Plage, Rows(L))
                        [COLOR=navy]End If[/COLOR]
            [COLOR=navy]End Select[/COLOR]
      [COLOR=navy]Next[/COLOR] L
      [COLOR=navy]If Not [/COLOR]Plage[COLOR=navy] Is Nothing Then[/COLOR] Plage.Delete
[COLOR=navy]End[/COLOR] Sub[/SIZE]
On peut sans doute encore simplifier ce code, mais j'ai préféré dissocier les différentes manipulations afin que tu puisses t'y retrouver un peu...

Ne sachant pas vraiment où placer les instructions de la procédure "Test()" de mon précédent post, je les ai mises à la fin.

myDearFriend,

ton code fonctionne tout seul mais lorsque je le rajoute à ma macro
il y a une erreur qui se produit en "Dim i As Long"
N'aurais-tu pas déjà déclarer cette variable "i" en tête de module par hasard ?

Cordialement,
 
Re : si 3 derniers caract cell "A01" alors supp ligne

myDearFriend!, che forum

en effet tu as vu juste
j'avais deja declaré ce fameux i

cependant j'ai repris ton code independemment
mais ça plante au niveau des if nothing

j'ai repris des codes ici et la entre les tiens et ceux de Porcinet
et j'ai obtenu le resultat souhaité

pour le moment ça roule

merci à tous et à bientot
 
Re : si 3 derniers caract cell "A01" alors supp ligne

bonjour à tous,

j'ai une autre question dans le meme genre
comment diriez vous sous forme d'un code
supprimer la ligne si la valeur est "x" sauf si la cellule de droite est non vide

en gros: si en "Ai" la cellule contient "x", supprimer la ligne "i"sauf si "Bi" est non vide

comment diriez vous egalement:

si en "Di" la cellule contient "y" alors ecrire en Ei "Trade Matched"

merci infiniement pour votre aide

je sais que ceci est un jeu d'enfant pour vous mais pour moi c'est un vrai casse tete

encore merci
 
Re : si 3 derniers caract cell "A01" alors supp ligne

Salut Boby, Bonjour le fil,

Voici le code pour répondre a tes questions (en faisant bien evidement une boucle avec un pas inversé (For i = 10 To 1 Step -1) lors de la suppression des lignes) :
'si en "Ai" la cellule contient "x", supprimer la ligne "i"sauf si "Bi" est non vide
If Cells(i, 1).Value = "x" And IsEmpty(Cells(i, 2).Value) = True Then Rows(i).Delete
'si en "Di" la cellule contient "y" alors ecrire en Ei "Trade Matched"
If Cells(i, 4).Value = "y" Then Cells(i, 5).Value = "Trade Matched"


@+
 
Re : si 3 derniers caract cell "A01" alors supp ligne

Bonjour Porcinet,
bonjour le fil

j'ai bricolé toute la nuit
et en fin de compte j'ai réussit a trouver le premier code grace à un code à peu pres similaire que tu m'avais donné pour sauter 3 ligne entre E et X et E et vide
je ne sais pas si tu te souvient

tous ces codes me sont très utiles

je te remercie
et je remercie le fil et le forum

😉
 
Re : si 3 derniers caract cell "A01" alors supp ligne

c'est encore moi,

je me posais une question:

n'y a t il pas une différence entre :
- la valeur de la cellule est = "x"
- la valeur de la cellule contient "x"

car je peux avoir dans la cellule: E-tpv-X-3gs

par exemple

merci
 
Re : si 3 derniers caract cell "A01" alors supp ligne

re,

Effectivement il y a une différence entre les deux. Soit tu mets le code suivant If LCase(Cells(i, 1).Value) = "x" And IsEmpty(Cells(i, 2).Value) = True Then Rows(i).Delete
Ou alors mais c'est a tester car je ne suis pas sur a 100%, il me semble que si tu mets Option Compare Text en haut du module, la casse n'a plus d'importance et donc le code de départ fonctionne.

@+
 
Re : si 3 derniers caract cell "A01" alors supp ligne

bonjour à tous,
rebonjour porcinet

je pense etre le dernier des bouriquot
car cela ne marche pas
que ce soit avec l'un ou l'autre

je te donne un bou de fichier pour y voir plus claire

le travail se passe sur les 2 dernieres colonnes

merci a vous
 

Pièces jointes

Re : si 3 derniers caract cell "A01" alors supp ligne

re,

J'avais mal interprété ta question, j'avais compris que tu n'aurais que x ou X dans la cellule en question alors que tu as en faite une chaine de caractères.

Donc avec le code suivant ca devrait le faire :
If Not InStr(1, LCase(Cells(i, 17).Value), "x") = 0 And IsEmpty(Cells(i, 18).Value) = True Then Rows(i).Delete

@+
 
Re : si 3 derniers caract cell "A01" alors supp ligne

bonjour le fil
re Porcinet

voila ce que j'ai en fonction de ce que tu m'as donné
For I = Range("A65536").End(xlUp).Row To 2 Step -1
'suppression suivant critères
If Not InStr(1, LCase(Cells(I, 17).Value), "Filtered") = 0 And IsEmpty(Cells(I, 18).Value) = True Then Rows(I).delete
If Not InStr(1, LCase(Cells(I, 17).Value), "Stamina - Filtered") = 0 And IsEmpty(Cells(I, 18).Value) = True Then Rows(I).delete
If Not InStr(1, LCase(Cells(I, 17).Value), "FUT") = 0 And IsEmpty(Cells(I, 18).Value) = True Then Cells(I, 18).Value = "Trade Matched"
Next I

mais cela ne me donne toujours pas ce que je veux

tout à l'heure en bricolant un peu j'ai trouvé qqchose d'assez présentable avec le code Mid (cells... que tu m'avais fournis hier

je ne suis pas sure mais c'est peut etre vers la qu'il faut creuser

merci de ton aide porcinet
 
Re : si 3 derniers caract cell "A01" alors supp ligne

re,

Le mid permet d'extraire un caractère ou une chaine a une place précise, ce qui n'est pas forcement adapté dans ton cas. Instr permet de determiner si un caractère ou une chaine est présente dans une autre.

For i = Range("A65536").End(xlUp).Row To 2 Step -1
'suppression suivant critères
If Not InStr(1, Cells(i, 17).Value, "Filtered", vbTextCompare) = 0 And IsEmpty(Cells(i, 18).Value) = True Then Rows(i).Delete
If Not InStr(1, Cells(i, 17).Value, "Stamina - Filtered", vbTextCompare) = 0 And IsEmpty(Cells(i, 18).Value) = True Then Rows(i).Delete
If Not InStr(1, Cells(i, 17).Value, "FUT", vbTextCompare) = 0 And IsEmpty(Cells(i, 18).Value) = True Then Cells(i, 18).Value = "Trade Matched"
Next i


En fait il suffisait de rajouter une option dans le Instr pour ne pas tenir compte de la casse et donc d'enlever le LCase qui posait egalement problème.

@+
 
Re : si 3 derniers caract cell "A01" alors supp ligne

bonjour le fil
re Porcinet

je t'ai reconnu Porcinet, tu n'es pas un bouriquot, c'est moi le bouriquot

toi tu es "EL MAGNIFICO"

ça marche super bien

encore merci

et a bientot
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.
Retour