Résolu Suppression de la meme ligne dans plusieurs feuilles en meme temps

fopy12

Habitué
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

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

quelqu'un aurait il une idée.
Merci
 

zeb

Modérateur
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...
 

fopy12

Habitué

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

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

fopy12

Habitué


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)
 

zeb

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



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

Modérateur
Quand tu auras répondu à mon questionnaire, il te faudra répondre encore à cette question :

Sur quelles colonnes veux-tu faire ta comparaison ?
 

fopy12

Habitué

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

zeb

Modérateur
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.
 

fopy12

Habitué

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

sphynxounet

Habitué
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.
 

zeb

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

(please wait...)
 

fopy12

Habitué


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
 

fopy12

Habitué

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!
 

sphynxounet

Habitué
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 ?
 

fopy12

Habitué


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
 

sphynxounet

Habitué
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 :

[cpp]
For i = 1 To max_lignes
If feuil1.cells(i, indice_colonne_ID) = ID_unique Then
... on a i qui correspond à l'indice de la ligne donc on supprime cette ligne
Exit For
End If
Next i
[/cpp]

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

Modérateur
Meilleure réponse
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 :

Donc on reste sur l'idée d'une macro déclenchée par l'utilisateur :
Code:
Dim identifiant      As String
Dim ligne_active     As Range
Dim lignes_a_suppr() As Range
Dim cell             As Range
Dim msg              As String
Dim i                As Integer

ReDim lignes_a_suppr(1 To Worksheets.Count)

Set ligne_active = ActiveCell.EntireRow
Set lignes_a_suppr(ligne_active.Worksheet.Index) = ligne_active
identifiant = ligne_active.Columns("D").Text
If identifiant = "" Then
    MsgBox "Cette ligne ne contient pas d'identifiant !"
    Exit Sub
End If

For Each ws In Worksheets
    If Not ws Is ligne_active.Worksheet Then
        For Each cell In ws.Range("D2", ws.Cells(ws.Rows.Count, 4).End(xlUp))
            If cell.Text = identifiant Then
                Set lignes_a_suppr(ws.Index) = cell.EntireRow
                Exit For
            End If
        Next
    End If
Next

msg = "Les lignes à supprimer sont "
For i = 1 To Worksheets.Count
    If Not lignes_a_suppr(i) Is Nothing Then
        msg = msg & vbCrLf & " * Feuille " & i & ", ligne " & lignes_a_suppr(i).Row
    End If
Next
msg = msg & vbCrLf & vbCrLf & "Supprimer ces lignes ?"

If vbOK <> MsgBox(msg, vbOKCancel Or vbExclamation) Then Exit Sub

For i = 1 To Worksheets.Count
    lignes_a_suppr(i).Delete
Next
 

zeb

Modérateur
Lignes 18 et 20, on a les deux boucles qu'évoque Sphinxounet ;)
Tout le reste n'est que fioriture.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 162
Messages
6 718 628
Membres
1 586 456
Dernier membre
Deverlord
Partager cette page
Haut