Ajouter/Supprimer une ligne de code VBA en fonction d'une cellule

Résolu/Fermé
empereurtilleul - 6 juil. 2021 à 12:17
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 - 19 juil. 2021 à 23:18
Bonjour,

Je voudrais savoir s'il était possible de rajouter une ligne de code en fonction d'une cellule.

Si dans la cellule A1 j'écrit "ABC", je voudrais que dans mon code il se rajoute :
If Cells(iCntr, 3).Value <> "ABC" Then
                Rows(iCntr).Delete
        End If


Merci d'avance

Configuration: Windows / Chrome 91.0.4472.124
A voir également:

13 réponses

empereurtilleul
7 juil. 2021 à 09:11
C'est sur que c'est plus simple avec le fichier.

Je ne vois pas bien la boucle que vous voyez.

Je l'imagine comme ça:

Sub SupprUsinenonSSURG()
Dim lRow As Long
Dim iCntr As Long
lRow = 7000
For iCntr = lRow To 1 Step -1
    If Cells(iCntr, 2).Value = "USINE" Then
        If Cells(iCntr, 3).Value <> "SS_URG.." Then
            If Cells(iCntr, 3).Value <> "SS_URG2.." Then
                   If Cells(iCntr, 3).Value <> Range("C16").Value Then
                          If Cells(iCntr, 3).Value <> Range("C17").Value Then
                Rows(iCntr).Delete
                   End If
                End If
            End If
        End If
    End If
Next
End Sub


Etc jusqu'à être sur que cette boucle comprend tout?

Sinon je ne vois pas très bien la boucle à utiliser.

Merci d'avance
1
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
6 juil. 2021 à 14:27
Bonjour,
Eh bien si vous le voulez, alors c'est OUI.
A vous de voir si le résultat vous convient!
0
empereurtilleul
6 juil. 2021 à 14:31
D'accord, et quel est le code pour qu'on puisse le faire?

Sub AjoutLigne()
'
Set Module = ThisWorkbook.VBProject.VBComponents
With Module("Module1").CodeModule
x = .CountOfLines
For i = 1 To Range("A65535").End(xlUp).Row
.InsertLines x + i, Range("A" & i)
Next
End With

End Sub


Mais c'est pas exactement ce que je veux.

Merci pour votre aide
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
6 juil. 2021 à 14:38
Bonjour,
Vous dites: Mais c'est pas exactement ce que je veux.
Alors vous voulez quoi?
0
empereurtilleul
6 juil. 2021 à 14:48
Le code que je vous ai mis au dessus va copier toute la colonne A et la mettre dans le code, ceci nécessite donc d'avoir tout le code VBA dans cette colonne A. Or ce n'est pas ce que je veux.

Mon code actuel est le suivant:
Sub SupprUsinenonSSURG()
Dim lRow As Long
Dim iCntr As Long
lRow = 7000
For iCntr = lRow To 1 Step -1
    If Cells(iCntr, 2).Value = "USINE" Then
        If Cells(iCntr, 3).Value <> "SS_URG.." Then
            Rows(iCntr).Delete
        End If
    End If
Next
End Sub


Je voudrais rajouter à la 10ème ligne ceci:
If Cells(iCntr, 3).Value <> "ABC" Then
                Rows(iCntr).Delete
        End If


"ABC" étant ce qui se trouve dans la cellule A1. Vous me dites que OUI, mais je ne vois pas comment, d'où l'interet de poser cette question sur le forum.
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
6 juil. 2021 à 17:59
Bonjour,
Eh bien pour moi le code actuel ne copie rien du tout mais il supprime chaque ligne qui contient 'USINE' en colonne 2 si en colonne 3 c'est différent de 'SS_URG..'
Pour votre 10ème ligne ce que vous voulez c'est par rapport à la cellule A1 donc:
If Cells(iCntr.Value) <> Cells(1, 1).Value Then
Rows(iCntr).Delete
End If


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
empereurtilleul
6 juil. 2021 à 18:34
Ce sera plus claire avec mon fichier:
https://www.cjoint.com/c/KGgqFytzZaQ

Je veux qu'en ajoutant un Locator (dans l'onglet SSURG, si j'ajoute "ABC"), dans le code je me retrouve avec:
Sub SupprUsinenonSSURG()
Dim lRow As Long
Dim iCntr As Long
lRow = 7000
For iCntr = lRow To 1 Step -1
    If Cells(iCntr, 2).Value = "USINE" Then
        If Cells(iCntr, 3).Value <> "SS_URG.." Then
            If Cells(iCntr, 3).Value <> "SS_URG2.." Then
                   If Cells(iCntr, 3).Value <> "ABC.." Then
                Rows(iCntr).Delete
                End If
            End If
        End If
    End If
Next
End Sub


Et donc inversement si je supprime un locator, mais on en est pas la encore

Merci d'avance
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
Modifié le 6 juil. 2021 à 23:49
Bonjour,
Eh bien j'ai enfin compris votre demande, ce n'est pas possible de faire écrire une ligne de code en fonction d'ajout dans votre liste de condition. Vous devez dans votre code faire une boucle sur votre liste de condition.
Désolé, je ne peut pas en faire plus, suis absent jusqu'à jeudi.

0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
7 juil. 2021 à 13:11
Bonjour,
Juste au passage, sur votre fichier vous ne mettez rien dans la cellule 'D4' de la feuille 'SSURG' et clic sur le bouton 'Supprimer’ et constaté le résultat. Merci de votre commentaire.
Je regarderai le tout ce soir.
Pour moi je comprends que la liste ‘Liste Locator SS_URG' contient uniquement les conditions pour supprimer les lignes qui ne correspondent pas.
Est-ce vrai Oui / Non?

0
empereurtilleul
7 juil. 2021 à 16:25
Bonjour,

Bien vu, je vais régler cela ce soir.

C'est exactement cela, et le problème est que cette liste peut etre longue de 2, 5 ou même 25 valeurs.
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
7 juil. 2021 à 17:49
Bonjour,
Merci du retour sans le commentaire demandé.
Ma proposition: https://mon-partage.fr/f/qoG2Icur/
0
empereurtilleul
8 juil. 2021 à 10:42
Parfait, c'est exactement ce qu'il me fallait, merci
0
empereurtilleul
19 juil. 2021 à 14:14
Bonjour,

J'ai de nouveau un problème concernant ce code.
En effet lorsque je le lance, le code tourne pendant 2minutes environ, avant qu'il ne plante ("Microsoft Excel Ne répond plus")
Comment palier ce problème?

Merci d'avance
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
19 juil. 2021 à 16:55
Bonjour,
Je viens de réaliser un test avec plus de 1000lignes à traiter et une liste de condition de 50 éléments. Tout se déroule en moins de 1 à 2 secondes. sans problème.
Sans votre fichier je ne peux pas rechercher le problème!
Pouvez-vous en dire plus de ce qui c'est passée avant d'avoir ce problème ......?
0
Le Pingou Messages postés 12042 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 24 avril 2024 1 426
19 juil. 2021 à 23:18
Bonjour,
Petit test sur plus de 3000 lignes:

0