Recherche et suppression ligne

Résolu
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011 - 20 juil. 2011 à 16:25
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011 - 22 juil. 2011 à 10:47
Bonjour,
Pour mon boulot je dois faire une macro qui repère où l'on est positionné sur la feuille, copie la valeur de cette cellule dans une variable.
Ensuite dans une autre feuille fait une recherche (du contenu de la variable) dans une colonne et supprime la totalité de la ligne si jamais il s’avère que la variable était présente.

Une partie de mon code
Sub DelSuppression_Click()

Dim myVar 'declaration de ma variable

Row = Selection.Row

'If ((Cells(Row, 1) Cells(Row - 1, 1)) Or (Cells(Row, 1) Cells(Row + 1, 1))) Then
    If (MsgBox("Etes-vous sure de vouloir supprimer l'activité de la ligne  #" & Row, vbOKCancel) = vbOK) Then
             
        ActiveSheet.Rows(Row).Delete

        Sheets("Feuil2").Activate
  
        
        For i = 100 To 1 Step -1 'la jai mis 100 mais il est possible qu'il y est plus de cent ligne
If Cells(i, 3).Value = Range("b4") Then Cells(i, 3).EntireRow.Delete 'le 3 dans cells cest que je travaille sur la troisieme ligne mais je crois cest pas bon

Next
 
    End If
  ' End If
    
Sheets("Feuil1").Activate



End Sub


Merci de votre aide.

13 réponses

mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
22 juil. 2011 à 10:47
Je fais part de ma solution.
Merci de ton aide.
Bonne journée


Sub DelSuppression_Click() 'Suppresion d'une activité

Row = Selection.Row 'Recuperation de la ligne sur laquelle on se situe
ID = Cells(Row, 1).Value 'On recupere et met dans une variable l'id situé en row(a)

If ((Cells(Row, 1) <> Cells(Row - 1, 1)) Or (Cells(Row, 1) <> Cells(Row + 1, 1))) Then
If (MsgBox("Etes-vous sure de vouloir supprimer les dépendances et l'activité situées a la ligne Excel#" & Row, vbOKCancel) = vbOK) Then

       ActiveSheet.Rows(Row).Delete 'Suppression de la ligne dans la feuille activité

Sheets("Feuil2").Activate 'On active la feuille

Dim J As Long 'Declaration de la variable J
Dim Plage As Range 'Declaration de la variable utilisée pour stocker la plage

Set Plage = Range("A1", Range("A10000").End(xlUp)) 'On initialise la variable avec la plage souhaitée
For J = Plage.Cells.Count To 1 Step -1 'Boucle qui part de la fin en remontant
    If Plage.Cells(J).Value ID Then 'Si jamais la valeur de la cellule parcouru valeur ID
        Plage.Cells(J).EntireRow.Delete 'Alors on supprime la totalité de la ligne
    End If
Next
End If

    End If
    
    Sheets("Feuil1").Activate 'On active la feuille de depart

End Sub





3
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
20 juil. 2011 à 16:40
Salut,

c'est quoi la question au juste ?

'le 3 dans cells cest que je travaille sur la troisieme ligne mais je crois cest pas bon


bon pressentiment dans ton cas le 3 represente la colonne et pas la ligne

A+
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
20 juil. 2011 à 16:59
La question c'est: Peut-on m'aider à réaliser cette macro?

Ensuite je me suis trompé dans mon commentaires je pensais bien à colonne.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juil. 2011 à 17:10
Bonjour,

Intéresse-toi à la méthode Find (regarde-la dans ton aide VBA) et applique-la au lieu de ta boucle.

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0

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

Posez votre question
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
20 juil. 2011 à 17:19
Merci, je regarde ça et je reviendrai pour "valider" ou non.
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
20 juil. 2011 à 18:05
Voilà où j'en suis.


Sub DelSuppression_Click() 'Suppresion d'une activité

Row = Selection.Row 'Recuperation de la ligne sur laquelle on se situe
ID = Cells(Row, 1).Value 'On recupere et met dans une variable l'id situé en row(a)

'If ((Cells(Row, 1) Cells(Row - 1, 1)) Or (Cells(Row, 1) Cells(Row + 1, 1))) Then
    If (MsgBox("Etes-vous sure de vouloir supprimer l'activité de la ligne  #" & Row, vbOKCancel) = vbOK) Then
       
       ActiveSheet.Rows(Row).Delete 'Suppression de la ligne dans la feuille activité
  
        With Worksheets("R1- BC Strategy").Range("A1:A9999") 'Dans la feuille R1- BC Strategy sur la plage A1 a A999 (id)
    Set c = .Find(ID, LookIn:=xlValues) 'On recherche la valeur var(id)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
          ActiveCell.EntireRow.Delete
            Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
    
End With

End If

End Sub


Seul petit soucis ca ne supprime que la première cellule de mon deuxieme fichier à la place de toute la ligne et pourtant j'ai bien mis :
ActiveCell.EntireRow.Delete



Merci de votre aide.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
20 juil. 2011 à 18:12
Euh ...
Explique déjà pourquoi tu te réfères à la cellule active (qui ne bouge pas, elle) dans ta boucle ?

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
21 juil. 2011 à 07:28
Tout simplement parceque je suis C**. un EntireRow.Delete suffit simplement?

Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 juil. 2011 à 07:48
un EntireRow.Delete suffit simplement?

1) EntireRow de quoi, d'après toi ? ===>> il suffit que tu réfléchisses un peu ...
2) A supprimer ainsi, tu prends un risque : celui qu'à la suite d'une telle suppression, une autre occurence se produise à la même adresse (si par exemple la nouvelle occurence est à la ligne suivante, la suppression de la ligne antérieure fait que l'adresse nouvelle de la ligne suivante devient celle de la ligne supprimée et que, donc, "c.Address <> firstAddress" ne sera pas vérifié !).
Parade : ne rien supprimer au fur et à mesure, mais constitituer une plage de ce qui est à supprimer (intéresse-toi à la méthode Union) puis applique ton entirerow.delete à cette plage.
Allez ===>> A toi ...

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
21 juil. 2011 à 09:25
J'ai essayé avec firstAddress.EntireRow.Delete et c.EntireRow.Delete et rien de cela ne fonctionne. Cela fait plus de 4-5 que je n'ai pas fais de VBA donc je dois m'y remettre mais pas touours facile.

Le problème actuel que j'ai est que cela ne supprime mais pas Row (Ca supprime rien du tout, à la base je pensais mais finalement NON).

Ta remarque est juste cependant étant avec uniquement des ID unique dans ma colonne (valeur que je recherce) je ne devrais jamais me retrouver dans ce cas, n'est ce pas?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 juil. 2011 à 09:48
étant avec uniquement des ID unique dans ma colonne (valeur que je recherce)

ceci contredit ta boucle avec Find pour rechercher plusieurs occurences !

____________________
Utiliser le bouton "REPONSE ACCEPTEE" sur une réponse exacte facilite les recherches ultérieures d'autres forumeurs. PENSEZ-Y SVP
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
21 juil. 2011 à 10:08
ceci contredit ta boucle avec Find pour rechercher plusieurs occurences !


Sub DelSuppression_Click() 'Suppresion d'une activité

Row = Selection.Row 'Recuperation de la ligne sur laquelle on se situe
ID = Cells(Row, 1).Value 'On recupere et met dans une variable l'id situé en row(a)

'If ((Cells(Row, 1) Cells(Row - 1, 1)) Or (Cells(Row, 1) Cells(Row + 1, 1))) Then
    If (MsgBox("Etes-vous sure de vouloir supprimer l'activité de la ligne  #" & Row, vbOKCancel) = vbOK) Then
       
       ActiveSheet.Rows(Row).Delete 'Suppression de la ligne dans la feuille activité
  
        Sheets("R1- BC Strategy").Activate
        
        With Worksheets("R1- BC Strategy").Range("A1:A9999") 'Dans la feuille R1- BC Strategy sur la plage A1 a A999 (id)
    Set c = .Find(ID, LookIn:=xlValues) 'On recherche la valeur var(id)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do
          ActiveCell.EntireRow.Delete

            
            'Set c = .FindNext(c)
       ' Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
    
End With

End If

End Sub



J'en reste toujours bloqué sur ma suppression de ligne.
0
mirmoleboss Messages postés 303 Date d'inscription mercredi 11 octobre 2006 Statut Membre Dernière intervention 29 juillet 2011
21 juil. 2011 à 17:34
Même après une bonne partie de la journée sur le problème je n'arrive pas a le corriger.
0
Rejoignez-nous