• Initiateur de la discussion Initiateur de la discussion hbonnisseur
  • Date de début Date de début

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 !

H

hbonnisseur

Guest
Bonjour,

J'ai un petit soucis avec Excel 2007 et je ne serais pas contre un peu d'aide. Voilà, j'ai une base de données clients assez conséquente (+ de 300 000 lignes) qui me permet de savoir quelles campagnes d'emailing ont-elles été ouvertes. Le problème, c'est que si un client à ouvert des emails de 3 campagnes différentes, j'ai trois lignes par exemple. J'ai joint un tableur pour plus de clarté.

Regarde la pièce jointe Campagne emailing exemple.xlsx

Dans ce tableur, les X représentent une ouverture d'email. On peut voir que le client 1 à ouvert 3 emails de trois campagnes différentes et donc j'ai trois lignes. Ce que je voudrais savoir, c'est comment rassembler ces 3 lignes pour n'en faire plus qu'une en gardant les X.

Je vous remercie par avance pour votre aide.
 
Re : Fusion de ligne

Bonjour hbonnisseur et bienvenu sur le forum.
Une proposition par macro.
Le résultat se trouvera sur la feuille 2.

VB:
Private Sub CommandButton21_Click()
Dim i&, J&, L&
Dim D As Object, T As Variant, TReport As Variant
Set D = CreateObject("Scripting.dictionary")
L = 1
With Sheets("Feuil1")
    T = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(3)(1, 15))
End With

ReDim TReport(1 To UBound(T, 1), 1 To UBound(T, 2))

For i = 2 To UBound(T, 1)
    For J = 2 To UBound(T, 2)
        TReport(1, J) = T(1, J)
        If T(i, J) = "X" Then
           If Not D.Exists(T(i, 1)) Then
                L = L + 1
                TReport(L, 1) = T(i, 1)
                TReport(L, J) = "X"
                D(T(i, 1)) = L
            Else
                TReport(D(T(i, 1)), J) = "X"
            End If
        End If
    Next J
Next i

With Sheets("Feuil2")
    .UsedRange.ClearContents
    .Cells(1, 1).Resize(L, UBound(T, 2)) = TReport
    .Columns.AutoFit
    .Activate
End With
                
End Sub
Cordialement
 

Pièces jointes

Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Triage de listes
Réponses
5
Affichages
661
S
  • Question Question
Réponses
5
Affichages
1 K
K
Réponses
5
Affichages
942
Retour