Repérage des doublons

fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009 - 18 janv. 2009 à 15:39
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 19 janv. 2009 à 20:18
Bonjour à tous ,
j'ai fais un programme qui me met en forme selon qu'il y a un chiffre de la colonne d identique à un chiffre de la colonne c et qui efface cette mise en forme si cette "identité" est supprimé, le petit problème c'est que le programme est très lent, d'ou m'a démarche y à-t-il une solutions pour ne pas ralentir le processus ? merci d'avance.
ci-dessous le code qui me met en forme
Sub MarqueLesremplacer()
Dim Nom1 As String
Dim Nom2 As String
Dim NomF As String
Dim nbl As Variant, i As Variant, j As Variant

NomF = ActiveSheet.Name                         ' nom de la feuille actuellement utilisée
nbl = Sheets(NomF).UsedRange.Rows.Count         ' nombre de lignes utilisées dans la feuille
For i = 1 To nbl                                ' la variable i sera incrementée jusqu'à nbl

Nom1 = Sheets(NomF).Cells(i, "c").Value         ' je recupère le premier nom de la liste
For j = i + 1 To nbl                            ' boucle de la ligne "i" jusqu'à la fin du tableau
Nom2 = Sheets(NomF).Cells(j, "d").Value
If Range("c" & i).Value = "" Then Exit SubIf Nom1 Nom2 Then                              ' Test maintenant si le nom1 nom2
With Range("a" & i, "d" & i)
      .Interior.Color = RGB(255, 234, 102)
      With .Font
         .Color = RGB(0, 0, 255)
         .Italic = True
         .Bold = True
      End With
End With
End If                                          ' fin de la condition
Next                                            'fin de ma deuxieme boucle
Next                                            ' fin de ma première boucle
End Sub

ci-dessous le code qui me l'efface
Sub Reset()
Dim i As Variant
For i = 1 To Range("a1").End(xlDown).Row
    Range("A1:d" & i).Select
    Selection.Font.Bold = False
    Selection.Font.Italic = False
    With Selection.Font
        .ColorIndex = xlAutomatic
        .TintAndShade = 0
    End With
    With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
Next i
End Sub

et ci-dessous l'événement qui déclenche le tout
 Private Sub Worksheet_Change(ByVal Target As Range)
Dim e As Variant
Reset
For e = 1 To Range("d1").End(xlDown).Row
If Cells(e, 1).Value <> "" Then
Remplacer
Else: Exit For
End If
Next e
Range("A1").End(xlDown).Offset(1, 0).Select
End Sub

3 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
18 janv. 2009 à 23:57
Salut
Tu programmes dans le VB de Excel : C'est du VBA, pas du VB6
Catégorie question modifiée

Je n'ai pas tout détaillé dans ton code, mais si tu dois rechercher un doublons entre deux colonnes (c et d), mieux vaut faire une seule boucle sur les données de la colonne c et les rechercher avec la fonction RechercheV dans la colonne d.
Cela devrait être beaucoup beaucoup plus rapide.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
fne67 Messages postés 17 Date d'inscription samedi 29 septembre 2007 Statut Membre Dernière intervention 19 septembre 2009
19 janv. 2009 à 03:55
Salut Jack
Le fichier Excel a pour but de recenser les travaux fait tout les jours, le programme a pour but de marquer le ou les travaux qui ont été remplacés, et on doit pouvoir enlever le marquage de la ligne d'où le "RESET", voila ce que je fais avec se programme je recherche juste une syntaxe pour le rendre un peut plus rapide n'étant ni informaticien ni spécialiste macro.
A+
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
19 janv. 2009 à 20:18
Bah je t'ai dit quoi faire :
Garder la première boucle "For i" pour prendre item après item, mais avec Nom1, faire une "RechercheV" (fonction Excel documentée dan l'aide vace exemple) pour rechercher son cousin dans la deuxième colonne.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
Rejoignez-nous