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.
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
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.
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.Ceci dit, je ne vois trop bien pourquoi tu veux passer par un tableau des noms à supprimer !?
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
Je puis t'assurer que je n'ai pas beaucoup d'expérience.Pas beaucoup d'expérience, mais tu penses tout de suite à un tableau
J'avais commencé comme tu me le suggères ci-dessus, mais je n'y suis pas parvenu. ça planté à tous les coups.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
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.
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 peux te dire le résultat...
Je me suis mis en priorité sur ton code.
Merci de m'avoir donné un peu de ton temps.