Se connecter avec
S'enregistrer | Connectez-vous

Suppression de la meme ligne dans plusieurs feuilles en meme temps

Dernière réponse : dans Programmation

Bonjour à tous
j'aurai besoin d'une aide.
je voudrais automatiser une tache. si je supprime une ligne de la feuille 1 j'aimerai que cette meme ligne soit supprimer dans la feuille 2 s'il s'agit de la meme ligne.

en cherchant un peu, j'ai ce code ci dessous. mais il ne me permet que la la suppression de la meme ligne

  1. Sub supprLigne()
  2. Dim adresse As String, rep As String, NumLigne As String
  3. With ActiveCell
  4. adresse = Worksheets("Général").Cells(, 4)
  5. NumLigne = Right(adresse, 1)
  6. rep = MsgBox("Attention ! Vous allez supprimer cette ligne " & NumLigne & _
  7. " des deux feuilles." & vbCrLf & "Voulez-vous continuer ?", vbExclamation + vbYesNo)
  8. If rep = vbNo Then Exit Sub
  9. .EntireRow.Delete
  10. End With
  11. Sheets("Site1").Cells(, 4).EntireRow.Delete
  12. End Sub


quelqu'un aurait il une idée.
Merci
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

Bon, alors tout d'abord, Excel ne génère pas d'événement spécifique quand on supprime une ligne :/  Et je ne vais pas me lancer dans une explication sur comment le faire. Pour les ceuces qui seraient malgré tout intéressé, voici un aveu d'impuissance de la part de Microsoft, et une solution horrible associée : http://msdn.microsoft.com/en-us/library/aa203089%28v=of...

Donc on reste sur l'idée d'une macro déclenchée par l'utilisateur :
  1. Dim identifiant As String
  2. Dim ligne_active As Range
  3. Dim lignes_a_suppr() As Range
  4. Dim cell As Range
  5. Dim msg As String
  6. Dim i As Integer
  7.  
  8. ReDim lignes_a_suppr(1 To Worksheets.Count)
  9.  
  10. Set ligne_active = ActiveCell.EntireRow
  11. Set lignes_a_suppr(ligne_active.Worksheet.Index) = ligne_active
  12. identifiant = ligne_active.Columns("D").Text
  13. If identifiant = "" Then
  14. MsgBox "Cette ligne ne contient pas d'identifiant !"
  15. Exit Sub
  16. End If
  17.  
  18. For Each ws In Worksheets
  19. If Not ws Is ligne_active.Worksheet Then
  20. For Each cell In ws.Range("D2", ws.Cells(ws.Rows.Count, 4).End(xlUp))
  21. If cell.Text = identifiant Then
  22. Set lignes_a_suppr(ws.Index) = cell.EntireRow
  23. Exit For
  24. End If
  25. Next
  26. End If
  27. Next
  28.  
  29. msg = "Les lignes à supprimer sont "
  30. For i = 1 To Worksheets.Count
  31. If Not lignes_a_suppr(i) Is Nothing Then
  32. msg = msg & vbCrLf & " * Feuille " & i & ", ligne " & lignes_a_suppr(i).Row
  33. End If
  34. Next
  35. msg = msg & vbCrLf & vbCrLf & "Supprimer ces lignes ?"
  36.  
  37. If vbOK <> MsgBox(msg, vbOKCancel Or vbExclamation) Then Exit Sub
  38.  
  39. For i = 1 To Worksheets.Count
  40. lignes_a_suppr(i).Delete
  41. Next
Expert Programmation

Salut,

Je déborde d'idées pour résoudre ton problème. :) 
Il faudrait donc canaliser cette exubérance.

Qu'entends-tu par "cette meme ligne" ? Dis-nous en plus...

zeb a dit :
Salut,

Je déborde d'idées pour résoudre ton problème. :) 
LOL ouffff
Il faudrait donc canaliser cette exubérance.

Qu'entends-tu par "cette meme ligne" ? Dis-nous en plus...

en fait je veu dire par là :
dans ma feuille 1, jai ma base de données.
cette base de données est répartie par site dans les autres feuilles. ex feuil2 : site1, feuil3 : site2 ...
dans ma feuille 2 (qui contient les memes éléments de ma base mais que ce qui concerne le site 1)

je voudrais que lorsque je supprime une ligne entière de la feuille 2, que cette meme ligne soit supprimée dans la feuille 1. et vice versa.

je ne sais pas si c'est clair, sinon je peu donner un exemple

zeb a dit :
Euh, ce n'est plus clair du tout là.
Avec quels logiciels développes-tu ta solution ?


En fait je suis sous Excel 2003.
Voici un petit exemple pour être plus clair
Dans feuille 1, j’ai :

1 L11 L12 L13 L14 L15 L16 L17 L18
2 L21 L22 L23 L24 L25 L26 L27 L28
3 L31 L32 L33 L34 L35 L36 L37 L38
4 etc.…

Dans la feuille 2, j’ai :

20 L11 L12 L13 L14 L15 L16 L17 L18
… etc.

La ligne 1 de ma feuille 1 est la même que la ligne 20 de la feuille 2 sauf que elle ne se trouve pas à la même ligne dans la feuille 1 et dans la feuille 2.

Je veux que lorsque je supprime la ligne 1 dans feuille 1, que la ligne 20 soit supprimer (vu qu’il s’agit de la même chose mais à un emplacement différent)
Expert Programmation

Rholalalalalalalalalalala :pfff:  :pfff:  :pfff:  :pfff:  :pfff:  :pfff: 
Encore un qui confond tableur et base de données.

http://www.presence-pc.com/forum/ppc/Programmation/tuto...

Bon, réponds à cette question :
  • [_] Avant, j'étais bête. Je ne savais pas qu'il y a avait un différence entre un tableur et un gestionnaire de base de données. Maintenant, je vais traiter mes données avec l'outil adéquat.
  • [_] C'est pô de ma faute, m'sieur. C'est mon patron qu'est ignorant(1), idiot(1), pingre(1) et qui m'oblige à utiliser Excel

    __________________________
    (1) Rayer la mention inutile

    zeb a dit :
    Rholalalalalalalalalalala :pfff:  :pfff:  :pfff:  :pfff:  :pfff:  :pfff: 
    Encore un qui confond tableur et base de données.

    http://www.presence-pc.com/forum/ppc/Programmation/tuto...

    Bon, réponds à cette question :
  • [_] Avant, j'étais bête. Je ne savais pas qu'il y a avait un différence entre un tableur et un gestionnaire de base de données. Maintenant, je vais traiter mes données avec l'outil adéquat.
  • [_] C'est pô de ma faute, m'sieur. C'est mon patron qu'est ignorant(1), idiot(1), pingre(1) et qui m'oblige à utiliser Excel

  • __________________________
    (1) Rayer la mention inutile

  • dsl pour la confusion oups
    sino j'arrive pas a ouvrir ton lien !! :ange: 
    Expert Programmation

    Le lien est sur ce même site. Je ne comprends pas comment tu peux ne pas l'ouvrir. Bon, sinon son intérêt n'est pas capital [:patch]

    Quoi ???? :ouch:  :ouch:  :ouch:  C'est pas pour le boulot ? C'est pas pour un patron idiot qui te fait faire un boulot de traitement de données sur un tableur ?
    Alors lâche Excel qui n'est pas fait pour ça et mets-toi aux bases de données pour de vrai.

    ------------------------------------

    Si tu veux quand même le faire sur Excel, réponds à mon autre question.

    zeb a dit :
    Le lien est sur ce même site. Je ne comprends pas comment tu peux ne pas l'ouvrir. Bon, sinon son intérêt n'est pas capital [:patch]

    Quoi ???? :ouch:  :ouch:  :ouch:  C'est pas pour le boulot ? C'est pas pour un patron idiot qui te fait faire un boulot de traitement de données sur un tableur ?
    Alors lâche Excel qui n'est pas fait pour ça et mets-toi aux bases de données pour de vrai.

    ------------------------------------

    Si tu veux quand même le faire sur Excel, réponds à mon autre question.

    je voudrais faire la comparaison sur la colonne d vu que c'est un identifiant unique :) 

    Bon si c'est la même ligne avec un peu de chance tu dois avoir le même nombre de colonnes sur toutes tes feuilles.

    Je verrais 2 solutions :

    1) la méthode barbare tu compares la première cellule de chaque ligne de ta première feuille. Quand tu tombes sur la première cellule avec la même donnée tu compares ensuite la 2ème cellule et ainsi de suite jusqu'à ce que toutes les cellules de la ligne à supprimer correspondent à celle de référence.

    2) vu que toutes les lignes de ta feuille 1 sont réparties sur tes différentes feuilles (en espérant que ce soit dans l'ordre sinon faudra rajouter des lignes de code), tu peux compter le nombre de lignes par feuille : tu prends l'indice de ta ligne dans la feuille 1, imaginons 50. Tu regardes le nombre de lignes dans ta feuille 2, imaginons 20. On fait 50-20=30. On regarde dans la feuille 3 et on a encore 20 lignes, 30-20=10. On regarde dans la feuille 4, y a 15 lignes (donc >10). Et tu sais que tu dois supprimer la 10ème ligne de ta feuille 4.

    sphynxounet a dit :
    Bon si c'est la même ligne avec un peu de chance tu dois avoir le même nombre de colonnes sur toutes tes feuilles.

    Je verrais 2 solutions :

    1) la méthode barbare tu compares la première cellule de chaque ligne de ta première feuille. Quand tu tombes sur la première cellule avec la même donnée tu compares ensuite la 2ème cellule et ainsi de suite jusqu'à ce que toutes les cellules de la ligne à supprimer correspondent à celle de référence.

    2) vu que toutes les lignes de ta feuille 1 sont réparties sur tes différentes feuilles (en espérant que ce soit dans l'ordre sinon faudra rajouter des lignes de code), tu peux compter le nombre de lignes par feuille : tu prends l'indice de ta ligne dans la feuille 1, imaginons 50. Tu regardes le nombre de lignes dans ta feuille 2, imaginons 20. On fait 50-20=30. On regarde dans la feuille 3 et on a encore 20 lignes, 30-20=10. On regarde dans la feuille 4, y a 15 lignes (donc >10). Et tu sais que tu dois supprimer la 10ème ligne de ta feuille 4.


    bah justement !
    ça aurait été la meme ligne dans les 2 feuilles, ce serait trop fastoch lol
    par ex une ligne qui se trouve en index 15 de la feuille1 peut se trouver en index 35 dans la feuille 2
    sinon uii, g le meme nombre de colonnes

    zeb a dit :
    Bonnes idées, sphynxounet, mais la réponse ultime vient de fopy.
    Il a un identifiant unique !

    (please wait...)

    ui y a un identifiant unique :D 
    Mais pourquoi ça a tellement d'importance cet identifiant unique.
    je demande ça parcque le contenu de la ligne "alpha" de la feuille 1 est exactement la mêm dans la feuille2. c'est juste sa place dans la feuille qui n'est pas la meme d'une feuille à l'autre!

    Bon histoire de bien comprendre : ton "identifiant unique" c'est le numéro de la ligne ou y a une colonne spécifique dans laquelle il y a un nombre qui est censé n'être présent que 2 fois dans ton fichier : 1 fois dans une ligne la feuille 1 et une autre fois dans une ligne d'une autre feuille ?

    sphynxounet a dit :
    Bon histoire de bien comprendre : ton "identifiant unique" c'est le numéro de la ligne ou y a une colonne spécifique dans laquelle il y a un nombre qui est censé n'être présent que 2 fois dans ton fichier : 1 fois dans une ligne la feuille 1 et une autre fois dans une ligne d'une autre feuille ?


    MON identifiant unique est spécifique à chaque ligne; c'est mon numérod d'identifiant client.
    oui il n'est présent que deux fois, comme tu las dit.
    Par contre ce n'est pas le numéro de la ligne. c'est une chaine de caractères (string) qui se trouve précisément dans la colonne d

    Mais c'est pas grave on s'en fou du numéro de la ligne alors. Ça se récupère facilement.
    Une fois que tu connais cet id tu fais une comparaison de la cellule dans la feuille dans laquelle tu veux recherche la ligne puisque l'indice de la colonne est fixe. Une fois que la comparaison est vrai on "récupère" l'indice de la ligne :

    Pour la feuille 1 :

    1. For i = 1 To max_lignes
    2. If feuil1.cells(i, indice_colonne_ID) = ID_unique Then
    3. ... on a i qui correspond à l'indice de la ligne donc on supprime cette ligne
    4. Exit For
    5. End If
    6. Next i


    Pour les autres feuilles faudra rajouter une autre boucle pour passer en revue toutes les feuilles (de la 2ème à la dernière).
    Tu peux aussi rajouter des lignes de codes des fois que ton ID ne se trouve pas dans tes feuilles (ou ne s'y trouve qu'une fois).

    zeb a dit :
    Bon, alors tout d'abord, Excel ne génère pas d'événement spécifique quand on supprime une ligne :/  Et je ne vais pas me lancer dans une explication sur comment le faire. Pour les ceuces qui seraient malgré tout intéressé, voici un aveu d'impuissance de la part de Microsoft, et une solution horrible associée : http://msdn.microsoft.com/en-us/library/aa203089%28v=of...

    Donc on reste sur l'idée d'une macro déclenchée par l'utilisateur :
    1. Dim identifiant As String
    2. Dim ligne_active As Range
    3. Dim lignes_a_suppr() As Range
    4. Dim cell As Range
    5. Dim msg As String
    6. Dim i As Integer
    7.  
    8. ReDim lignes_a_suppr(1 To Worksheets.Count)
    9.  
    10. Set ligne_active = ActiveCell.EntireRow
    11. Set lignes_a_suppr(ligne_active.Worksheet.Index) = ligne_active
    12. identifiant = ligne_active.Columns("D").Text
    13. If identifiant = "" Then
    14. MsgBox "Cette ligne ne contient pas d'identifiant !"
    15. Exit Sub
    16. End If
    17.  
    18. For Each ws In Worksheets
    19. If Not ws Is ligne_active.Worksheet Then
    20. For Each cell In ws.Range("D2", ws.Cells(ws.Rows.Count, 4).End(xlUp))
    21. If cell.Text = identifiant Then
    22. Set lignes_a_suppr(ws.Index) = cell.EntireRow
    23. Exit For
    24. End If
    25. Next
    26. End If
    27. Next
    28.  
    29. msg = "Les lignes à supprimer sont "
    30. For i = 1 To Worksheets.Count
    31. If Not lignes_a_suppr(i) Is Nothing Then
    32. msg = msg & vbCrLf & " * Feuille " & i & ", ligne " & lignes_a_suppr(i).Row
    33. End If
    34. Next
    35. msg = msg & vbCrLf & vbCrLf & "Supprimer ces lignes ?"
    36.  
    37. If vbOK <> MsgBox(msg, vbOKCancel Or vbExclamation) Then Exit Sub
    38.  
    39. For i = 1 To Worksheets.Count
    40. lignes_a_suppr(i).Delete
    41. Next


    RE zeb,
    j'ai affecter cette macro à une commande de ma barre d'outils. et ca fonctionne. :bounce: 

    donc si g bien compris on ne peut affecter une macro à une action de ce genre !! c bien ce que je pensais , mais je me disais qu'il devait y avoir un truc du genre ws_beforerightclik, mais bref....

    Peut etre ca aurait pu etre plus simple si j'avais créé une macro mis a jour qui supprime les lignes qui ne se trouvent pas dans la feuille 1 et vice versa!! qu'en penses tu?

    zeb a dit :
    Lignes 18 et 20, on a les deux boucles qu'évoque Sphinxounet ;) 
    Tout le reste n'est que fioriture.


    oups j'ai parlé trop vite. j'ai une erreur au niveau de la ligne 40
    g un message d'erreur : "variable objet ou variable de bloc with non définie."
    Pourquoi ? :D 
    Expert Programmation

    Oups, c'est moi. Il faut aussi mettre la ligne 31 devant la ligne 40.

    Ça fait :
    1. For i = 1 To Worksheets.Count
    2. If Not lignes_a_suppr(i) Is Nothing Then
    3. lignes_a_suppr(i).Delete
    4. End If
    5. Next

    zeb a dit :
    Oups, c'est moi. Il faut aussi mettre la ligne 31 devant la ligne 40.

    Ça fait :
    1. For i = 1 To Worksheets.Count
    2. If Not lignes_a_suppr(i) Is Nothing Then
    3. lignes_a_suppr(i).Delete
    4. End If
    5. Next


    ui j'ai vu que ca ne collait pas. et donc j'ai pris la ligne 40 et je l'ai mis entre la ligne 32 et 33.

    puis j'ai mis en commentaires la 39 et la 41. ca marchait!!

    Ai-je fais une bétise?

    Expert Programmation

    1° - ARRÊTE DE RECOPIER SYSTÉMATIQUEMENT LE MESSAGE PRÉCÉDANT :fou: 
    (C'est agaçant)

    2° - Euh, ben non, c'est pas bon, si tu fais pas les choses dans l'ordre.
    D'abord tu prépares ton coup, ensuite tu poses la question à l'utilisateur, puis enfin tu agis.

    3° - Étudie le code proposé avant de l'utiliser.

    je fai k ça,
    pff je sui dessus depuis k tu mas filé le code, j'arrive a comprendre certaines choses mais pas tou. du coup je m'aide avec l'aide en ligne, mai on ne trouva pa forcément tou

    désolé pour les copies. je crois k je sais comment faire now :D 

    Bonjour,

    J'ai la même question que fopy12 sauf que je n'y connais rien en code et en macro... J'ai bien compris qu'il y avait du code à faire mais je ne sais pas comment l'intégrer.

    Voici ma demande : j'ai un tableur (qui me permet de gérer des adhérents d'association) avec plusieurs feuilles intitulées "informations générales" (avec le nom et prénom de chaque adhérent) et "émargement" (les noms et prénoms des adhérents s'affichent directement dans cette feuille lorsqu'ils sont tapés dans la feuille informations générales).
    Mon souci est quand je supprime une ligne dans informations générales (car l'adhérent n'existe plus), une erreur s'affiche dans la feuille émargement #REF!.

    La seule solution que j'ai trouvé est de supprimer la ligne à la main dans "émargement". Mais je souhaiterai que lorsque je supprime une ligne dans "infos gales", le message d'erreur n'existe plus.

    Je suis tellement novice que je ne sais pas comment faire pour vous envoyer un exemple...

    Merci d'avance pour vos réponses !

    Delphine
    delphine_573 a édité ce message
    Lassé par la pub ? Créez un compte