besoin d'aide sur macro

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

fred94000

XLDnaute Junior
bonsoir le forum et les VBistes,
j'ai besoin d'un coup de main pour cette macro.
je vous joins un fichier pour plus d'explication.
je pense que pour vous cela va être du gâteau contrairement a moi.

j'ai fais une ébauche de macro dans la feuil4(Alerte) de VBA
dans l'attente je vous en remercie.
 

Pièces jointes

Re : besoin d'aide sur macro

Bonsoir,

je voudrais créer une alerte ?
en copiant dans cette feuille (Alerte !)
les NOMS de la feuiileBD (si>3 fois) pourquoi a 3 c'est pas a deux ? (mais sans doublon ou triple ?)
ainsi que les dates en B2:K2 (Quelle date si pas de doublon et par rapport a quoi ?)
, mais sans doublon ou triple

Je n'ai pas vraiment compris le poste pour vous aider

la macro se trouve dans la feuil4(Alerte) elle est a coriger a a reprendre ? diiférement.

laurent
 
Re : besoin d'aide sur macro

bonsoir laurent950,
ce que je souhaite, copier dans la feuille Alerte les noms qui apparaissent plus de trois fois et leurs dates en date1, date2..........etc
dans le fichier joins, le nom MOI ne devrais apparaitre qu'une seul fois et ainsi de suite.
en espérant avoir été clair.
cordialement
 
Re : besoin d'aide sur macro

bonsoir,
Code:
Sub MaJ2()
Dim coll As New Collection, ta, tb
Dim rng As Range, i%, j%, x%
With Sheets("BD")
    Set rng = .Range("B2:D" & .Range("B65000").End(xlUp).Row)
    ta = rng.Value
End With
For i = 1 To UBound(ta, 1)
    If Application.CountIf(rng, ta(i, 3)) >= 3 Then
    On Error Resume Next
    coll.Add ta(i, 3), ta(i, 3)
    End If
Next
If coll.Count = 0 Then Exit Sub
ReDim tb(coll.Count - 1, 9)
For i = 0 To coll.Count - 1
    tb(i, 0) = coll(i + 1)
    For j = 1 To UBound(ta)
        If ta(j, 3) = coll(i + 1) Then
            x = x + 1
            tb(i, x) = ta(j, 1)
        End If
    Next
    x = 0
Next
With Sheets("Alerte")
    .Range("A2").Resize(UBound(tb, 1) + 1, UBound(tb, 2) + 1) = tb
End With
End Sub
A+
kjin
 
Re : besoin d'aide sur macro

Bonjour KJIN,
je te remercie infiniment pour cette macro qui fonctionne a merveille.
malgré mes explications peu clair mais que tu as su déchiffrer
je n'aurai jamais pu trouver seul.

Ce forum est une aubaine pour les novices.
MERCI
 
Re : besoin d'aide sur macro

Bonjour,
Un peu plus compliqué...
Code:
Sub alerte()
Dim ta, tb() As Variant
Dim rng As Range
Dim i%, j%, k%, x%, y%, m%, n%
Dim dl#
n = 3
With Sheets("BD")
    Application.ScreenUpdating = False
    Set rng = .Range("A2:G" & .Range("B65000").End(xlUp).Row)
    rng.Sort Key1:=.Range("D2"), Order1:=xlAscending, Key2:=.Range("E2"), _
    Order2:=xlAscending, Key3:=.Range("B2"), Order2:=xlAscending, Header:=xlGuess
    ta = rng.Value
    rng.Sort Key1:=.Range("B2"), Order1:=xlAscending, Header:=xlGuess
    For i = 2 To UBound(ta, 1)
        k = i - 1
        If ta(i, 4) = ta(k, 4) And ta(i, 5) = ta(k, 5) Then
            For j = k To UBound(ta, 1)
                If ta(j, 4) = ta(k + 1, 4) And ta(j, 5) = ta(k + 1, 5) Then
                    y = y + 1
                Else: Exit For: End If
            Next
            If y > 3 Then
                x = x + 1
                ReDim Preserve tb(1 To 12, 1 To x)
                tb(1, x) = ta(k, 4)
                tb(2, x) = ta(k, 5)
                For m = k To k + y - 1
                    tb(n, x) = ta(m, 2)
                    n = n + 1
                Next
                n = 3
                i = m
            End If
            k = 0
            y = 0
        End If
    Next
End With

With Sheets("Alerte")
 'ou effacer les données existantes
 'et inscrire les nouvelles à partir de A3  --> décocher(1)et(2) et cocher(3)
    .Range("A3:L65000").ClearContents           '(1)
    dl = 3                                      '(2)
 'ou les rajouter après la derniere ligne   --> décocher(3) et cocher(1)et(2)
    'dl = .Range("A65000").End(xlUp).Row + 1    '(3)
    For i = 1 To UBound(tb, 2)
        .Cells(dl, 1) = tb(1, i)
        .Cells(dl, 2) = tb(2, i)
        For j = 3 To UBound(tb, 1)
            If Not IsEmpty(tb(j, i)) Then
                .Cells(dl, j) = CDate(tb(j, i))
            Else: Exit For: End If
        Next
        dl = dl + 1
    Next
End With
End Sub
Attention la plage A:G de la feuille BD est triée pendant la procédure donc il faudra étendre la plage de tri au delà de la colonne G si nécessaire, mais ça prend un peu plus de temps
A+
kjin
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL 2021 Macro
Réponses
6
Affichages
243
  • Question Question
Réponses
7
Affichages
308
Retour