utilisation de vb sur excel xp

M

Mo

Guest
Salut tout le monde,

Je n'ai jamais utilisé VB avec excel et là je dois écrire un macro qui supprimerait des lignes ayant la même valeur à la premiere colonne.

Les idées ne manquent pas, mais je n'arrive même pas à accéder aux données de l'espace de travail...

Est ce que quelqu'un à envie de prendre le temps pour m'initier?

C'est addez urgent ...

Merci d'avance
 
J

JB

Guest
- Désolé Mo pour le retard mais j'avais mes courses à faire avant d'aller encore travailler.
Voici une petite macro qui supprime les lignes en double.
Deux conditions: trier tes colonnes par ordre alphabétique et qu'il n'y ait pas de ligne vide.
Je l'ai trouvée sur Internet il y a plusieurs semaines et j'ignore qui en était l'auteur (le disciple je crois me souvenir).

Sub TEST()

Dim nouveaumot
Dim motprecedent
Dim nblignes As Integer
Dim i As Integer

nblignes = Range("A2").CurrentRegion.Rows.Count
motprecedent = ""
For i = 2 To nblignes
nouveaumot = Cells(i, 1).Value
If nouveaumot = motprecedent Then Cells(i, 1).EntireRow.Delete
motprecedent = nouveaumot
Next
If Range("a65536").End(xlUp).Value = _
Range("a65536").End(xlUp).End(xlUp).Value Then

Range("a65536").End(xlUp).ClearContents
End If
End Sub

J'espère t'avoir été utile et tiens moi au courant en bien ou en mal.
A+ JB
 
M

Mo

Guest
Il ne faut pas s'excuser je n'en demande pas tant ;-)

J'ai essayé cette routine (c'est exactement la même démarche logique que j'ai tenté d'établir ...) mais maleureusement elle ne fonctionne pas :-(

J'ai essayé de placer des MsgBox un peu partout et j'ai remarqué que le passage entre les données s'effectue comme il se doit mais le script ne détecte jamais une égalité entre le nouveau mot et le mot précédent. Je m'explique :

For i = 2 To nblignes
nouveaumot = Cells(i, 1).Value

// jusque là tout va bien

If nouveaumot = motprecedent Then

//Le script n'arrive jamais ici (le MsgBox ne s'affiche pas)

MsgBox (je passe les detail)
Cells(i, 1).EntireRow.Delete
End If

motprecedent = nouveaumot
Next

Voilà JB, je te remercie déjà de ton aide précieuse (je comprends comment il faut adresser les données maintenant).

Je vais essayer de voir ce qui ne va pas,

Je tiens au courant ceux qui s'y intéressent .
 
@

@+Thierry

Guest
Bonsoir Mo, JB, le Forum

Tout d'abord Bienvenu sur le
ForumXLD.gif


Pour supprimer des doublons dans une base de données par des instruction VBA, il y a plusieurs moyens... en voici un que j'utilise souvent.

JB a tout d'abord raison, il faut faire un tri de la plage, ou en tout cas, de la colonne concernée, admettons la colonne "A".

Ensuite c'est exacte qu'il faut détruire avec "EntireRow.Delete" toutes les lignes dont la valeur de la cellule A ("y") est identique à la valeur de la cellule A ("x")... Hélas la logique veut que si on a déterminé une plage, celle ci va se réduire pendant le déroulement de la macro... ce qui a pour effet de laisser des doublons dans la colonne... Lien supprimé ...

Pour le code fourni par JB, qui est dans le ce principe en passant par des variables de type String ("nouveaumot" & "motprecedent") c'est toujours ce problème de décalage qui ce produit, le code fonctionne, mais il faudrait qu'il y ait qu'un seul doublon dans la base car sinon il y a ce problème de décalage...

Donc il faut un peu ruser avec VBA ... exemple, (toujours sur la colonne "A") :

Option Explicit

Sub KillDuplicate()
Dim L As Integer
Dim i As Integer
Dim Message As String

With Sheets("Feuil1")
.Columns("A").Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess
For i = .Range("A65536").End(xlUp).Row + 1 To 2 Step -1
If .Range("a" & i) = .Range("a" & i - 1) Then
Message = Message & .Range("a" & i - 1).Value & vbCrLf
.Range("a" & i).ClearContents
End If
Next
On Error Resume Next
.Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete

If Message <> "" Then
MsgBox "Doublon Détecté et Détruit : " & vbCrLf & Message, vbCritical, "Thierry's Démo"
Else
MsgBox "Pas de Doublon détecté", vbInformation
End If

End With

End Sub

Si tu veux télécharger une de mes démos, basée sur ce principe, je te conseille le lien dans le Gif ci-dessous

Lien supprimé

...et si tu veux suivre le Fil de Discussion => DEMO UserForm ComboBox Gestion de Database (MAJ Doublon/Supression etc)

Dans le foulée, encore une autre démo pour travailler sur plusieurs colonnes et identifier les doublons sur la valeur de plusieurs cellules linéaires avec gestion de la casse :

Lien supprimé


Bonne Nuit et Bon Samedi
@+Thierry
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 017
Messages
2 104 583
Membres
109 084
dernier inscrit
mizab