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 !

barth66

XLDnaute Junior
bonjour quelqu'un peut me dire pourquoi la commande VBA ne fonctionne pas ??


Sub Supprime()
For Each cellule In Range("D1:T3000")
If cellule.Value = "480074" = "470440" = "470440" = "510257" = "520344" = "540030" Then Rows(cellule.Row).Delete
If cellule.Value = "470440" = "510257" = "540030" = "550006" = "480065" = "460583" = "450024" = "460036" = "530030" = "450042" = "500010" = "530050" = "530046" = "460035" = "500011" = "500007" = "530037" = "453973" = "110288" = "454032" = "440081" = "440063" = "490849" = "490853" = "490850" = "560055" Then Rows(cellule.Row).Delete
If cellule.Value = "450040" = "460033" = "530029" = "500012" = "460032" = "430547" = "410142" = "550909" = "470448" = "540026" = "510262" = "471765" = "471757" = "470444" = "430519" = "510263" = "430009" = "520348" = "510258" = "220179" = "440089" = "440080" = "441596" Then Rows(cellule.Row).Delete
If cellule.Value = "110101" = "150126" = "180524" = "200145" = "220152" = "240145" = "690004" = "710064" = "740041" = "410141" = "141044" = "160173" = "190531" = "210155" = "230152" = "250517" = "700005" = "720068" = "740042" = "141055" = "160278" = "190542" = "210249" = "240176" = "710138" = "150322" Then Rows(cellule.Row).Delete
If cellule.Value = "141047" = "180528" = "200149" = "220156" = "240149" = "411365" = "710068" = "730021" = "180529" = "110107" Then Rows(cellule.Row).Delet
If cellule.Value = "690010" = "710070" = "740047" = "421879" = "110104" = "180527" = "150132" = "180530" = "200151" = "220158" = "240151" Then Rows(cellule.Row).Delete

Next

End Sub

Quand je la lance cela marche au départ mais pas sur la fin !!
 
Re : VBA commandes

Bonsoir,

Elle peut éventuellement fonctionner sur des cellules qui ont pour valeur 0 ou FAUX

car "470440" = "510257" = "540030" = "550006" = "480065" = "460583" = "450024" = "460036" = "530030" = "450042" = "500010" = "530050" = "530046" = "460035" = "500011" = "500007" = "530037" = "453973" = "110288" = "454032" = "440081" = "440063" = "490849" = "490853" = "490850" = "560055"

Donnera forcement FALSE (0)

Alors comme l'ami Tototiti (que je salue bien bas😀) OR ou Select case

A+
 
Re : VBA commandes

Bonjour Hasco 😉,
Re,

Ou alors gérer un Array avec toutes les références et un IsError sur un Match pour voir si la référence de la ligne parcourue existe dans l'Array

Mais ce ne sont que des pistes...

Si jamais les pistes proposées te semblent chinois, n'hésite pas à expliquer un peu plus ton problème...
 
Re : VBA commandes

Bonsoir barth66,

Je pense que cela devais être écris comme cela :

code :

VB:
Sub Supprime()
    
For Each cellule In Range("D1:T3000")
    If cellule.Value = "470440" Or cellule.Value = "510257" Or cellule.Value = "520344" Or _
    cellule.Value = "540030" Or cellule.Value = "550006" Or cellule.Value = "480065" Or _
    cellule.Value = "460583" Or cellule.Value = "450024" Or cellule.Value = "460036" Or _
    cellule.Value = "530030" Or cellule.Value = "450042" Or cellule.Value = "500010" Or _
    cellule.Value = "530026" Or cellule.Value = "530050" Or cellule.Value = "500969" Or _
    cellule.Value = "530046" Or cellule.Value = "453413" Or cellule.Value = "460035" Or _
    cellule.Value = "450043" Or cellule.Value = "500011" Or cellule.Value = "530027" Or _
    cellule.Value = "500007" Or cellule.Value = "500923" Or cellule.Value = "530037" Or _
    cellule.Value = "530054" Or cellule.Value = "453973" Or cellule.Value = "450259" Or _
    cellule.Value = "110288" Or cellule.Value = "180576" Or cellule.Value = "454032" Or _
    cellule.Value = "530045" Or cellule.Value = "450040" Or cellule.Value = "530031" Or _
    cellule.Value = "460033" Or cellule.Value = "500028" Or cellule.Value = "530029" Then
        Rows(cellule.Row).Delete
    ElseIf cellule.Value = "453974" Or cellule.Value = "500012" Or cellule.Value = "460307" Or cellule.Value = "460032" Or _
    cellule.Value = "510268" Or cellule.Value = "430547" Or cellule.Value = "470447" Or _
    cellule.Value = "410142" Or cellule.Value = "430566" Or cellule.Value = "550909" Or _
    cellule.Value = "510269" Or cellule.Value = "470448" Or cellule.Value = "430545" Or _
    cellule.Value = "540026" Or cellule.Value = "550167" Or cellule.Value = "510262" Or _
    cellule.Value = "470442" Or cellule.Value = "471765" Or cellule.Value = "480082" Or _
    cellule.Value = "471757" Or cellule.Value = "520770" Or cellule.Value = "470444" Or _
    cellule.Value = "520345" Or cellule.Value = "430519" Or cellule.Value = "470443" Or _
    cellule.Value = "510263" Or cellule.Value = "540033" Or cellule.Value = "430009" Or _
    cellule.Value = "470433" Or cellule.Value = "520348" Or cellule.Value = "540027" Or _
    cellule.Value = "510258" Or cellule.Value = "180567" Or cellule.Value = "220179" Or _
    cellule.Value = "440079" Or cellule.Value = "440089" Or cellule.Value = "440087" Or _
    cellule.Value = "440080" Or cellule.Value = "150294" Or cellule.Value = "441596" Or _
    cellule.Value = "440512" Or cellule.Value = "440081" Or cellule.Value = "440513" Or _
    cellule.Value = "440063" Or cellule.Value = "440088" Or cellule.Value = "490849" Or _
    cellule.Value = "490852" Or cellule.Value = "490853" Or cellule.Value = "490854" Or _
    cellule.Value = "490850" Or cellule.Value = "421874" Or cellule.Value = "560055" Then
        Rows(cellule.Row).Delete
    End If
Next
End Sub

C'est pa la bonne méthode, car la procédure est fausse, mais pour le principe de votre macro est le corectif pour que l'application puisse la lire.



Laurent
 
Re : VBA commandes

Bonsoir à tous

barth66
Si j'étais toi, dans ce cas présent, j'opterai pour l'emploi du filtre élaboré.

Bien plus simple et rapide à mettre en place.

Je te laisse essayer (pour avoir le code VBA, il suffit d'appliquer ton filtre élaboré tout en démarrant l’enregistreur de macros)
 
Re : VBA commandes

Bonjour à tous,
Barth 66 aurais tu oublier de lire la charte des forums ?? oui je le pense, la réponse sur l'autre forum ne te convient pas???? !!!!!!
c'est pourtant bien la même demande, et tu obtiens bien les même réponses et demande de fichier ???
bref pas sérieux monsieur Barth66
a+
Papou😱
 
Dernière édition:
Re : VBA commandes

Bonjour a tous !
Tout d'abord merci a tous pour vos aides !! mais malheuresement aucune commandes ne fonctionne ! je vais donc opter pour une autre option.
Pour répondre a Papou, non je ne recevais pas de réponse alors j'ai décider de venir sur ce forum ou les réponses on été beaucoup plus rapide !!! On mets toutes les chances de sont cotés ... Le fichier a été joint .

Merci encore et si quelqu'un a une commande "providentielle" lol quelle n'hésite pas .

Ps la liste des codes est dans un onglet différent avec la mention Bon en début de colonne .

Merci
 
Re : VBA commandes

Bonjour,

Voici un code,

Ta colonne G de feuil3 est inutile.

Code:
Sub Supprime()
    Dim plg As Range, plgDel As Range
    Dim t As Variant
 'Plage de la feuille Feuil1
    Set plg = Sheets("Feuil1").Range("D2:D" & Sheets("Feuil1").Range("D" & Rows.Count).End(xlUp).Row)
 
'Récupération des valeurs du tableau des codes à supprimer
    t = Application.Transpose(Sheets("Feuil3").Range("B6:B" & Sheets("Feuil3").Range("B" & Rows.Count).End(xlUp).Row).Value)
 
'Parcours de la plage de feuil1
    For Each c In plg
       'Si la valeur de la cellule est trouvée dans le tableau
        If Not IsError(Application.Match(c, t, 0)) Then
         
            If plgDel Is Nothing Then
                Set plgDel = c 'initialiser la plage à supprimer
            Else 
                Set plgDel = Union(c, plgDel) ' ajouter la cellule à la plage à supprimer
            End If
        End If
    Next
 
   'Si la plage à supprimer existe on supprime les lignes entières
    If Not plgDel Is Nothing Then plgDel.EntireRow.Delete
End Sub

A+
 
Re : VBA commandes

Cela ne fonctionne pas, rien ne se passe je ne sais pas comment cela se fait est ce que je dois remplir des choses ) la commandes
If plgDel Is Nothing Then
Set plgDel = c 'initialiser la plage à supprimer Else
Set plgDel = Union(c, plgDel) ' ajouter la cellule à la plage à supprimer

Désolé d'être novice en la matière.

Merci
 
- 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
Retour