|
|
|
|
Sub Suppressiondouble()
'
' Suppressiondouble Macro
' Macro enregistrée le 09/01/2008 par Prod4
'
Dim I As Long
Dim Plage_nom As Range
Dim Plage_prenom As Range
Dim Plage_addresse As Range
Set Plage_nom = Range("C2:C" & Range("C2").End(xlDown).Row)
Set Plage_prenom = Range("D2:D" & Range("D2").End(xlDown).Row)
Set Plage_adresse = Range("G2:G" & Range("G2").End(xlDown).Row)
For I = Plage_nom.Cells.Count To 1 Step -1
If Plage_nom.Cells(I).Value = Plage_nom.Cells(I - 1).Value And Plage_prenom.Cells(I).Value = Plage_prenom.Cells(I - 1).Value And Plage_adresse.Cells(I).Value = Plage_adresse.Cells(I - 1).Value Then
Plage_nom.Cells(I).EntireRow.Delete
End If
Next
'
End Sub
Configuration: Windows XP Excel 2003 Internet Explorer 7.0
bonjour
Tu as une erreur de réservation : Dim Plage_addresse As Range =>un seul d utilisé ensuite. Pour éviter cela, je te conseille de mettre : "Option Explicit" en début de feuille VBA. Tu peux remplacer :
Plage_nom.Cells(I).EntireRow.Delete
par
Rows(I).Delete
Tu utilises "cells" sans mettre le paramètre colonne et cela peux peut-être poser problème et pour supprimer une ligne, pourquoi écrire plus que nécessaire ? Autre petit souci, dans tes réservations de plage :
Set Plage_prenom = Range("D2:D" & Range("D65536").End(xlUp).Row)
et non
Set Plage_prenom = Range("D2:D" & Range("D2").End(xlDown).Row)
En effet si tu as une cellule vide, D10 par exemple, tu t'arrêtes en D9 si tu part du haut. Sinon bravo pour la conception très compacte et très efficace de ton code car c'est rare de voir une telle qualité en débutant. toujours zen |
EXCEL N'EST PAS UNE BASE DE DONNEES
|
parcequ'il va s'arracher le cheveux. une fois que tu commences (et tu réussis) c'est business qui va venir et demander "un peu plus" par ci "un peu plus par là". ça commence petit et 6 mois après tu est dans la merde parcequ'on a seulement hacké une soluce au lieu de trouver une vraie solution.
n'oublions pas puor le management il n'y a qu'une seule règle : le dernier qui a touché le programme est responsable s'il y a un bug |
bonjour
Que tu n'apprécies pas les méthodes de management n'a rien à faire dans une discussion informatique. Chacun dans l'entreprise se positionne à sa façon et ce ne sont pas forcément toujours ceux qui ne touchent à rien pour ne rien casser qui sont récompensés et c'est heureux : tous les managers ne sont pas obligatoirement bornés comme tu as l'air de le penser. Pour gérer une liste de participants à un événement il n'est peut-être pas nécessaire d'installer un serveur raid avec un temps de réponse ultra performant et des sauvegardes en temps réel à l'autre bout de la planète au cas où les tours s'effrondrent. Il faut savoir raison garder et ne pas tout mélanger. En tout cas Terek a fait un très bon début et je pense qu'il est préférable de l'aider et non de profiter de l'occasion pour déverser tes déboires malheureux et vécus (même si je compatis à ton souci) . toujours zen |
Bonjour,
Merci pour ta réponse gbinforme tu m'aides énormement. J'ai rajouter quelque lignes qui mettent en majuscules afin qu'il compare vraiment des données équivalente. Les deux D à adresse était une faute de frappe stupide ^^ chaud a trouver. J'ai fait un DUT informatique donc j'ai quelques notion de programmation (bien que ça ne soit pas une matière dans laquelle j'excelais) c'est d'ailleur pour ca que je continue pas dans l'info :P. Ma mise en majuscule est un gros Paté Immonde mais je ne savais pas trop comment m'y prendre autrement. En tout cas je te remercie grandement pour ton aide précieuse. Voila mon code final si ca peut aider quelqu'un. Je pense qu'il est légèrement améliorable (surtout dans la partie que j'ai fais seul XD) Option Explicit
Sub suppression()
Dim I As Long
Dim Plage_nom As Range
Dim Plage_prenom As Range
Dim Plage_adresse As Range
Set Plage_nom = Range("C2:C" & Range("C2").End(xlDown).Row)
Set Plage_prenom = Range("D2:D" & Range("D2").End(xlDown).Row)
Set Plage_adresse = Range("G2:G" & Range("G2").End(xlDown).Row)
For I = Plage_nom.Cells.Count To 1 Step -1
Plage_nom.Cells(I).Value = UCase(Plage_nom.Cells(I).Value)
Plage_nom.Cells(I - 1).Value = UCase(Plage_nom.Cells(I - 1).Value)
Plage_prenom.Cells(I).Value = UCase(Plage_prenom.Cells(I).Value)
Plage_prenom.Cells(I - 1).Value = UCase(Plage_prenom.Cells(I - 1).Value)
Plage_adresse.Cells(I).Value = UCase(Plage_adresse.Cells(I).Value)
Plage_adresse.Cells(I - 1).Value = UCase(Plage_adresse.Cells(I - 1).Value)
If Plage_nom.Cells(I).Value = Plage_nom.Cells(I - 1).Value And Plage_prenom.Cells(I).
Value = Plage_prenom.Cells(I - 1).Value And Plage_adresse.Cells(I).Value = Plage_adresse.
Cells(I - 1).Value Then
Rows(I).Delete
End If
Next
End Sub
Eu j'ai un petit problème. J'ai rajouter une coloration sans suppression de la ligne afin de vérifier quel ligne était supprimé. Quand je lance la macro, c'est la ligne I-1 qui s'en va pour moi. Je m'explique 1 Bob 2 Hernest 3 Michel 4 Michel 5 Roger Ici je voudrai que Michel (numero 4 soit supprimé) allant de bas en Haut, Michel (numéro 4) = Cells(I) et donc Michel (numéro 3) serait donc égale a Cells(I-1) non ?? A moins que je n'ai pas compris :(. |
"A moins que je n'ai pas compris :(."
t'as compris. le delete dans Excel supprime la ligne courante et ramène celles d'en-dessous vers le haut (I + 1 devient I). Excel n'est pas une bdd. c'est une feuille de calcul pas plus |
"Ici je voudrai que Michel (numero 4 soit supprimé) allant de bas en Haut,
Michel (numéro 4) = Cells(I) et donc Michel (numéro 3) serait donc égale a Cells(I-1) non ?? " Mon problème c'est que avec ma macro, ce n'est pas Michel (num 4) qui est supprimé mais c'est Michel (num 3). C'est ce que je ne comprend pas... |
bonjour
le delete dans Excel supprime la ligne courante Pas du tout, Excel supprime la ligne qu'on lui demande : Rows(I).Delete c'est-à-dire la ligne I. Mais en fait, tes tests sont effectués sur ta plage qui commence en ligne 2 et donc il faut mettre pour être en cohérence
Plage_nom.Rows(I).EntireRow.Delete
au temps pour moi qui ai trop simplifié car j'ai l'habitude du mode ligne. toujours zen |
Ok merci pour toutes vos réponses
Bon au final mon code qui marche ressemble a ca. Je testerai avec le Plage_nom.Rows(I).EntireRow.Delete voir si ca differe. Option Explicit
Sub Mise_en_forme()
Dim I As Long
Dim Plage_nom As Range
Dim Plage_prenom As Range
Dim Plage_adresse As Range
Dim Plage_TVF As Range
Set Plage_nom = Range("C2:C" & Range("C2").End(xlDown).Row)
Set Plage_prenom = Range("D2:D" & Range("D2").End(xlDown).Row)
Set Plage_adresse = Range("G2:G" & Range("G2").End(xlDown).Row)
Set Plage_TVF = Range("A2:A" & Range("A2").End(xlDown).Row)
For I = Plage_nom.Cells.Count To 2 Step -1
Plage_nom.Cells(I).Value = UCase(Plage_nom.Cells(I).Value)
Plage_nom.Cells(I - 1).Value = UCase(Plage_nom.Cells(I - 1).Value)
Plage_prenom.Cells(I).Value = UCase(Plage_prenom.Cells(I).Value)
Plage_prenom.Cells(I - 1).Value = UCase(Plage_prenom.Cells(I - 1).Value)
Plage_adresse.Cells(I).Value = UCase(Plage_adresse.Cells(I).Value)
Plage_adresse.Cells(I - 1).Value = UCase(Plage_adresse.Cells(I - 1).Value)
Plage_TVF.Cells(I).Value = UCase(Plage_TVF.Cells(I).Value)
Plage_TVF.Cells(I - 1).Value = UCase(Plage_TVF.Cells(I - 1).Value)
If Plage_nom.Cells(I).Value = Plage_nom.Cells(I - 1).Value And Plage_prenom.Cells(I).Value = Plage_prenom.Cells(I - 1).Value And Plage_adresse.Cells(I).Value = Plage_adresse.Cells(I - 1).Value Then
Rows(I + 1).Delete
End If
'suppression si meme nom prenom adresse
Rows(I).Interior.ColorIndex = 6
'Ligne déjà traité JAUNE FONCé
If Plage_nom.Cells(I).Value = Plage_nom.Cells(I - 1).Value And Plage_prenom.Cells(I).Value = Plage_prenom.Cells(I - 1).Value And Plage_adresse.Cells(I).Value <> Plage_adresse.Cells(I - 1).Value And Plage_TVF.Cells(I).Value <> Plage_TVF.Cells(I - 1).Value Then
Rows(I + 1).Interior.ColorIndex = 40
Rows(I).Interior.ColorIndex = 22
End If
'adresse diffère ROSE
If Plage_nom.Cells(I).Value = Plage_nom.Cells(I - 1).Value And Plage_prenom.Cells(I).Value <> Plage_prenom.Cells(I - 1).Value And Plage_adresse.Cells(I).Value = Plage_adresse.Cells(I - 1).Value And Plage_TVF.Cells(I).Value <> Plage_TVF.Cells(I - 1).Value Then
Rows(I + 1).Interior.ColorIndex = 20
Rows(I).Interior.ColorIndex = 42
End If
'prénom diffère BLEU
If (Plage_nom.Cells(I).Value <> Plage_nom.Cells(I - 1).Value Or Plage_TVF.Cells(I).Value <> Plage_TVF.Cells(I - 1).Value) And Plage_prenom.Cells(I).Value = Plage_prenom.Cells(I - 1).Value And Plage_adresse.Cells(I).Value = Plage_adresse.Cells(I - 1).Value Then
Rows(I + 1).Interior.ColorIndex = 34
Rows(I).Interior.ColorIndex = 36
End If
'Nom ou TVF Différent JAUNE
Next
End Sub
Merci pour tout et à bientôt.
|
| 06/02 00h35 | bureautique | Excel |
| 15/09 10h59 | [Excel] Colorer des cellules sur conditions | Excel |
| 14/12 15h08 | [Word] Supprimer tous les liens hypertextes | Word |
| 05/01 18h57 | Sed - Supprimer une ou plusieurs lignes d'un fichier | Sed |
| 28/08 09h15 | Proteger vos documents Words contre les macrovirus | Virus |
| 26/06 14h06 | Supprimer doublons et additionner (Excel) | 7 |
| 17/12 14h53 | [EXCEL] macro suppression | 4 |
| 10/09 16h31 | Doublons à supprimer sur excel | 3 |
| 10/07 17h46 | Supprimer doublons fichier excel | 0 |
![]() | MOREFUNC (Macro complémentaire EXCEL) - Morefunc est une macro complémentaire proposant 67 nouvelles fonctions de feuille de calcul pour Excel. Ces fonctions sont... | Catégorie: Tableur Licence: Freeware/gratuit |
![]() | Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même... | Catégorie: Tableur Licence: Freeware/gratuit |
![]() | Support IPX pour Vista - Le protocole IPX/SPX sert à de nombreux anciens jeux pour pouvoir jouer en réseau (Red Alert, Command & Conquer, etc.). ... | Catégorie: Librairies (DLL) Licence: Freeware/gratuit |
![]() | Ms Word Excel Cracker - Ms Word Excel Craker est une application permettant de retrouver les mots de passe perdus ou oubliés pour les fichiers.xls... | Catégorie: Suite bureautique Licence: Freeware/gratuit |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 72.51 € Amazon.fr |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 16.74 € Misco FR |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 23.85 € Amazon.fr |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 38.99 € PriceMinister |