Alimenter variable avec condition

Bonjour,

Sur le tableau de la feuille1, je dois supprimer toutes les lignes dont la valeur en colonne H est <>1.

Mais auparavant, je voudrai mettre dans une variable tous les noms (col C) dont la ligne va être supprimer.

Cette dernière variable me servira à faire une boucle dans une autre procédure pour supprimer toutes les lignes et colonnes où figurent ces noms.

En vous remerciant par avance.

13variable.zip (25.94 Ko)

Bonjour CP4

Voilà une possibilité

Sub SupLigne_MemNomSup()
  Dim Inc As Long, Dlig As Long, Lig As Long
  Dim TabNom() As String
  ' Avec la feuille nommée
  With Sheets("Feuil1")
  ' Dernière ligne du tableau
  Dlig = .Range("H" & Rows.Count).End(xlUp).Row - 1
  ' Pour chaque ligne
  For Lig = Dlig To 6 Step -1
    If .Range("H" & Lig).Value = 1 Then
      ReDim Preserve TabNom(Inc)
      TabNom(Inc) = .Range("C" & Lig)
      Inc = Inc + 1
      ' Supprimer la ligne ICI
      'Rows(Lig).Delete
    End If
  Next Lig
  ' Petite procédure pour vérification
  ' A supprimer par la suite
  For Lig = 0 To UBound(TabNom)
    .Range("K" & 6 + Lig).Value = TabNom(Lig)
  Next Lig
  End With
End Sub

A+

Merci Beaucoup BrunoM45,

nb: mis à jour fichier joint avec feuil2

C'est impeccable, avec quelques modifications (j'avais oublié de préciser que sous ce tableau il y en a un autre)

    Sub SupLigne_MemNomSup()
      Dim Inc As Long, Dlig As Long, Lig As Long
      Dim TabNom() As String
      ' Avec la feuille nommée
     With Sheets("Feuil1")
      ' Pour chaque ligne
     For Lig = 111 To 6 Step -1
        If .Range("H" & Lig).Value = 1 Then
          ReDim Preserve TabNom(Inc)
          TabNom(Inc) = .Range("C" & Lig)
          Inc = Inc + 1
          ' Supprimer la ligne ICI
         'Rows(Lig).Delete
       End If
      Next Lig
  End With    

With Sheets("Feuil2")
     ' supprimer les noms sur feuil2 
     For Lig = 0 To UBound(TabNom)
       'noms se trouvent en C5:C110 (supprimer lignes)

        'noms se trouvent sur la ligne 3 de E3:DF3 (supprimer colonnes)

      Next Lig
      End With
    End Sub

Pour supprimer en feuille2 que je n'ai pas mise dans le fichier joint, là encore je bloque.

Je n'ose même mettre mon code car la macro m'a fait planter mon pc. Sur la feuille2, il y a un tableau qui reprend tous les noms en colonne C (de ligne 5 à 110) et sur la ligne 3 ( de colonne E à DF). Je voudrai supprimer les noms en ligne et colonne.

Encore merci.

Bon week-end.

Re,

Tu peux essayer avec ce code

Sub SupLigne_MemNomSup()
  Dim Col As Long, DCol As Long
  Dim DLig As Long, Lig As Long
  Dim Inc As Long, TabNom() As String
  ' Avec la feuille nommée
  With Sheets("Feuil1")
    ' Dernière ligne du tableau
    DLig = .Range("H" & Rows.Count).End(xlUp).Row - 1
    ' Pour chaque ligne
    For Lig = DLig To 6 Step -1
      If .Range("H" & Lig).Value <> 1 Then
        ReDim Preserve TabNom(Inc)
        TabNom(Inc) = .Range("C" & Lig)
        Inc = Inc + 1
      End If
    Next Lig
  End With
  ' SUPPRIMER les LIGNES de la FEUILLE 2
  ' Avec la feuille nommée
  With Sheets("Feuil1")
    ' Dernière ligne du tableau = Ligne TOTAL - 1
    DLig = .Range("C" & Rows.Count).End(xlUp).Row - 1
    ' Pour chaque ligne
    For Lig = DLig To 5 Step -1
      ' Est-ce qu'il y a un nom
      If .Range("C" & Lig).Value <> "" Then
        ' Est-ce que ce nom est contenu dans le tableau
        For Inc = 0 To UBound(TabNom)
          If .Range("C" & Lig).Value = TabNom(Inc) Then
            ' Supprimer la ligne ICI
            Rows(Lig).Delete
            Exit For
          End If
        Next Inc
      End If
    Next Lig
  End With
  ' SUPPRIMER les COLONNES de la FEUILLE 2
  ' Avec la feuille nommée
  With Sheets("Feuil1")
    ' Dernière Colonne du tableau
    DCol = .Cells(3, Columns.Count).End(xlToLeft).Column
    ' Pour chaque ligne
    For Col = DCol To 5 Step -1
      ' Est-ce qu'il y a un nom
      If .Cells(3, Col).Value <> "" Then
        ' Est-ce que ce nom est contenu dans le tableau
        For Inc = 0 To UBound(TabNom)
          If .Cells(3, Col).Value = TabNom(Inc) Then
            ' Supprimer la ligne ICI
            Columns(Col).Delete
            Exit For
          End If
        Next Inc
      End If
    Next Col
  End With
End Sub

Ceci dit, je ne vois trop bien pourquoi tu veux passer par un tableau des noms à supprimer !?

A+

Merci beaucoup pour ton aide. Je teste et reviens te dire ce qu'il en est.

Ceci dit, je ne vois trop bien pourquoi tu veux passer par un tableau des noms à supprimer !?

Je n'ai pas beaucoup d'expérience, c'est la seule idée qui m'est venue à l'esprit. Si tu as une autre solution, je suis preneur. ça me permettra de m'améliorer.

J'ai fait comme ceci mais je n'ai pas encore vérifié si le résultat est bon.

With Sheets("Feuil2")
        ' supprimer les noms sur feuil2
        For i = 110 To 5 Step -1
            For Lig = 0 To UBound(TabNom)
                'noms se trouvent en C5:C110 (supprimer lignes)
                If .Cells(i, 3).Value = TabNom(Lig) Then .Rows(i).Delete
                If .Cells(3, i).Value = TabNom(Lig) Then .Columns(i).Delete
            Next Lig
        Next i
    End With

Merci.

Re,

CP4 a écrit :

Je n'ai pas beaucoup d'expérience, c'est la seule idée qui m'est venue à l'esprit. Si tu as une autre solution, je suis preneur. ça me permettra de m'améliorer.

Pas beaucoup d'expérience, mais tu penses tout de suite à un tableau

On peut au moment ou l'on va supprimer une ligne de la feuille 1 pour un nom donné, supprimer la ligne contenant ce nom et la colonne contenant ce nom dans la feuille 2

Ceci dit, on travaille avec un tableau donc en mémoire, c'est rapide

CP4 a écrit :

J'ai fait comme ceci mais je n'ai pas encore vérifié si le résultat est bon.

With Sheets("Feuil2")
        ' supprimer les noms sur feuil2
        For i = 110 To 5 Step -1
            For Lig = 0 To UBound(TabNom)
                'noms se trouvent en C5:C110 (supprimer lignes)
                If .Cells(i, 3).Value = TabNom(Lig) Then .Rows(i).Delete
                If .Cells(3, i).Value = TabNom(Lig) Then .Columns(i).Delete
            Next Lig
        Next i
    End With

Merci.

Je peux te dire le résultat...

A+

Merci pour ton aide

Pas beaucoup d'expérience, mais tu penses tout de suite à un tableau

Je puis t'assurer que je n'ai pas beaucoup d'expérience.

On peut au moment ou l'on va supprimer une ligne de la feuille 1 pour un nom donné, supprimer la ligne contenant ce nom et la colonne contenant ce nom dans la feuille 2

J'avais commencé comme tu me le suggères ci-dessus, mais je n'y suis pas parvenu. ça planté à tous les coups.

Je me suis donc rabattu sur "mister" GOOGLE et J'ai effectué pas mal de recherches. Je suis tombé sur des sujets qui traitaient de tableau. Ceci dépassant mes compétences, j'ai ouvert cette discussion et proposé cette idée.

Revenons à ton précédent code, pour la première partie le code est bon, les lignes en feuil1 sont supprimées.

par contre en feuil2, non. le code parait très logique mais les lignes et les colonnes ne le sont pas.

pour les lignes DLig = .Range("C" & Rows.Count).End(xlUp).Row-1 ne prend pas en compte la dernière non vides.

Je ne comprends vraiment pourquoi en feuil2 rien ne se passe.

Je peux te dire le résultat...

pour mon bout de coup, je n'ai pas encore vérifié si le résultat est bon. J'ai juste lancé la macro et elle n'a pas planté. Oui je veux connaitre le résultat, ça me permettra d'avancer.

Je me suis mis en priorité sur ton code.

Merci de m'avoir donné un peu de ton temps.

Rechercher des sujets similaires à "alimenter variable condition"