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

Résolu
empereurtilleul -  
Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   -
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

13 réponses

  1. empereurtilleul
     
    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
  2. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Eh bien si vous le voulez, alors c'est OUI.
    A vous de voir si le résultat vous convient!
    0
    1. empereurtilleul
       
      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
  3. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Vous dites: Mais c'est pas exactement ce que je veux.
    Alors vous voulez quoi?
    0
    1. empereurtilleul
       
      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
  4. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. empereurtilleul
     
    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
  7. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
  8. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
  9. empereurtilleul
     
    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
  10. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci du retour sans le commentaire demandé.
    Ma proposition: https://mon-partage.fr/f/qoG2Icur/
    0
  11. empereurtilleul
     
    Parfait, c'est exactement ce qu'il me fallait, merci
    0
  12. empereurtilleul
     
    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
  13. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    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
  14. Le Pingou Messages postés 12273 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Petit test sur plus de 3000 lignes:

    0