tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006
-
9 sept. 2006 à 17:14
tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006
-
10 sept. 2006 à 18:22
Bonjour tout le monde, <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /??>
je vous écris par rapport à un problème que j'ai rencontré en VBA :
J'ai une feuille excel sur laquelle figure dans une colonne (A) différentes chaînes de caractère classées par ordre alphabétique. Il y a 2000 lignes, et certaines chaînes de caractère sont parfois présentes plusieurs fois.
J'ai essayé de créer une macro qui permet supprimer les chaînes de caractères qui apparaissent plusieurs fois (afin de n'en laisser qu'une).
Mon programme devrait permettre de sélectionner la première cellule de la colonne, la comparer avec les autres.
- dans le cas où elle trouve d'autres cellules identiques elle les supprime
- dans le cas où aucune autre cellule n'est identique, elle sélectionne la deuxième cellule du tableau pour commencer une nouvelle comparaison...
i = 1
j = 1
selection1 = Cells(i, 1).Select
message1 = selection1
Do
j = j + 1
selection2 = Cells(j, 1).Select
message2 = selection2
If message1 = message2 Then Cells(j, 1).delet
Else: GoTo line11
Loop While j < 2000
Do
i = i + 1
j = i
selection1 = Cells(i, 1).Select
message1 = selection1
Do
j = j + 1
selection2 = Cells(j, 1).Select
message2 = selection2
If message1 = message2 Then Cells(j, 1).delet
Else: GoTo Line19
Loop While j < 2000
Loop While i < 2000
Celui-ci ne marche pas malgré tout, je rencontre un pbm avec le else (le commentaire me dit qu'il n'y a pas de if... :s )
Je remercie celui qui pourra me débloquer.
Aussi, pensez-vous que ce programme puisse fonctionner correctement?
tibss
Messages postés21Date d'inscriptionmercredi 26 avril 2006StatutMembreDernière intervention12 septembre 2006 10 sept. 2006 à 11:47
Merci à tous les deux pour vos réponses,
Mortalino, j'aurais quelques questions à propos de ton code :
'Tu définis ci-dessous deux feuilles : sNomFeuille et sNomFeuilleActu. Cela permet d'utiliser le programme quelque soit le nom des deux première feuilles Excel c'est ça? :) Je ne connaissais pas merci
Sub Test()
Dim sNomFeuille As String
Dim sNomFeuilleActu As String
sNomFeuilleActu = ActiveSheet.Name
Sheets.Add
sNomFeuille = ActiveSheet.Name
'Tu sélectionnes la première feuille
Sheets(sNomFeuilleActu).Select
'cela signifie que tu sélectionnes la première colonne
Columns("A:A").Select
'Je ne comprends pas cette ligne :( Pourquoi ligne 1 à 40 de la colonne A...?
Range("A1:A40").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
Columns("A:A").Select
'tu copies et colle la sélection et la colle sur la feuille sNomFeuille
Selection.Copy
Sheets(sNomFeuille).Select
ActiveSheet.Paste
'tu sélectionnes la feuille sNomFeuilleActu et ej ne comprends pas ce que fait ShowAllData
Sheets(sNomFeuilleActu).Select
ActiveSheet.ShowAllData
'Tu prends le résultat de la feuille sNomFeuille pour les copier sur l'autre
Sheets(sNomFeuille).Select
Columns("A:A").Select
Selection.Copy
Sheets(sNomFeuilleActu).Select
ActiveSheet.Paste
Application.DisplayAlerts =
False
'tu supprimes les infos de la feuille sNomFeuille
Sheets(sNomFeuille).Delete
Application.DisplayAlerts =
True
End Sub
En tout cas, je te remercie énormément pour ton aide mortalino ,
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 10 sept. 2006 à 15:00
Salut,
ben en fait, ne connaissant pas le nom de ta feuille où cela se passe, je le récupère et le place dans la variable sNomFeuilleActu
, puis j'insère une nouvelle feuille temporairement, et pareil, ne connaissant pas le nombre de feuilles que tu as, je ne peux deviner le nom de cette feuille, ce qui fait qu'après création, je récupère également son nom que je place dans la variable sNomFeuille
afin de pouvoir travailler avec.
C'est juste pour travailler avec les feuilles, avec peu de risque de plantages.
@++
<hr size="2" width="100%" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
mortalino
Messages postés6786Date d'inscriptionvendredi 16 décembre 2005StatutMembreDernière intervention21 décembre 201118 10 sept. 2006 à 17:21
pour le Range("A1:A40").
c'était une erreur (par rapport à mes test) mais je t'avais mis la correction un peu plus haut ^^
Il faut le remplacer par Selection.
Concernant la fonction ").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
C'est pour faire une extraction de données sans doublons et sur place,
mais en fait, il ne fait que masquer les cellules contenant ces doublons.
On les copie donc sur une nouvelle feuille et on revient sur la page initiale :
Il faut donc ensuite les rendre à nouveau visible (les lignes masquées):
Sheets(sNomFeuilleActu).Select
ActiveSheet.ShowAllData
puis coller les nouvelles données (donc sans doublons) par dessus.
Pour avoir un aperçu de ce que ça fait, place cette procédure dans un modules, réduit la fenêtre de VB en plus pétit et décalé (de façon à voir excel), place le curseur dans la procédure Test et appuie sur F8, cela exécute la procédure pas à pas.
@++
<hr width="100%" size="2" />
--Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
/DIV>