Effacer ligne si nom d'onglet différent de valeur cellule

Bonjour

J'ai un petit souci avec une macro.

J'essaye de supprimer toutes les lignes d'un tableau si les cellules de la colonne A ne contiennent pas le nom d'un onglet.

Par exemple :

J'ai plusieurs onglets nommés d'après des codes : 1526, 1524, 1589...

Dans une feuille "Récapitulatif", j'ai un tableau traduisant le nom des onglets. colonne A : code ; colonne B : libellé

Je souhaiterais que toutes les lignes du récap qui ne figurent pas dans les onglets soient supprimées par macro.

Pour le moment j'ai ça mais je n'arrive pas à définir le nom des onglets dans la macro.

Sub suppdonn()

Application.ScreenUpdating = False

Dim derlig As Long, ligne As Long, ws As Worksheet, i As Integer

Const Code = 1
i = 3
With Worksheets("Récapitulatif")

derlig = .Range("c" & rows.Count).End(xlUp).Row

    For ligne = derlig To 3 Step -1

If  .Cells(ligne, Code) <> ws.Name Then

.rows(ligne).Delete

End If
    Next ligne
End With

Application.ScreenUpdating = True

A priori mon ws.Name pose problème. Je m'arrache les cheveux.

Merci par avance pour votre précieuse aide

Bonjour,

Sub suppdonn()
    Dim derlig&, ligne&, i%, ws As Worksheet, Nws
    For Each ws In Worksheets
        Nws = Nws & ";" & ws.Name
    Next ws
    Nws = Split(Replace(Nws, ";", "", 1, 1), ";")
    Application.ScreenUpdating = False
    With Worksheets("Récapitulatif")
        derlig = .Range("c" & .Rows.Count).End(xlUp).Row
        For ligne = derlig To 3 Step -1
            For i = 0 To UBound(Nws)
                If .Cells(ligne, 1) = Nws(i) Then Exit For
            Next i
            If i > UBound(Nws) Then .Rows(ligne).Delete
        Next ligne
    End With
End Sub

Suggestion 1 : INDENTER ton code.

Suggestion 2 : Déclarations toujours en tête de procédure, avant tout code exécutable.

Cordialement.

Merci pour ces suggestions et pour ton temps.

Cependant la macro efface tout indifféremment de la presence ou non des valeurs recherchées...

Je n'ai pas vu ton fichier, je n'ai vu que ton code, je ne peux donc savoir si cela correspond bien à ton fichier !

Il est trop gros pour que je puisse l'envoyer désolé je l'ai décris aussi bien que j'ai pu

Si ça efface toutes les lignes, c'est que tes codes ne correspondent pas à des noms d'onglets !

Malheureusement si, j'ai eu un doute mais ils sont bien tous dans la liste.

Merci pour la piste je vais continuer avec ça

As-tu bien vérifié ? Même casse, pas d'espace parasite...

Oui ils sont bien identiques.

La plage dans laquelle ils sont est A3:A2043. Quand je la lance, elle supprime toutes les lignes de cette plage

Il s'agit bien d'onglets du même classeur ?

Oui

Curieux !

Essaie en modifiant cette ligne ainsi :

For Each ws In ThisWorkbook.Worksheets

Tes noms étant numériques, j'ai cru comprendre, est-ce que dans les cellules testées ce sont bien des valeurs texte ? (ou numériques)

Ce sont des valeurs numériques

Mais les noms de feuilles sont des valeurs de type String (même composés uniquement de chiffres) !

Modifier cette ligne :

If .Cells(ligne, 1) = CInt(Nws(i)) Then Exit For

Desolé, problème technique. J'ai essayé et j'ai un nouveau message que je n'avais jamais vu. Depassement de capacité. Je suppose donc que c'est la bonne solution mais que mon pc est contre moi...

Sur quelle ligne ?

C'est un message d'erreur système il ne surligne pas de ligne dans la macro. Il apparaît suite à ta dernière modif

A-priori je ne vois pas d'autre endroit...

If .Cells(ligne, 1) = CLng(Nws(i)) Then Exit For

Remplacer CInt par CLng.

A confirmer

Ca fait pareil

Je vais me debrouiller autrement

Merci beaucoup pour tous ces conseils

Rechercher des sujets similaires à "effacer ligne nom onglet different valeur"