Microsoft 365 Macro Excel pour effectuer des opérations sur les lignes et cellules adjacentes

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 !

Perceval973

XLDnaute Nouveau
Bonjour à tous,

J'ai un classeur contenant énormément de données, sur trois colonnes, que j'ai besoin de comparer et sommer suivant le schéma suivant :

Colonne A : références / Colonne B : Désignations / Colonne C : durées
SI A2=A1 ALORS concaténer B1 et B2 ET sommer C1 et C2

Ceci jusqu'à ce que la cellule An soit vide
Le résultat peut soit remplacer les données du tableau ET supprimer les lignes déjà prises en compte, soit faire l'objet d'un nouveau tableau à coté du premier

Merci pour votre aide 🙂
Perceval
 
Solution
Je n'ai pas voulu réinventer quelque chose de nouveau donc je suis parti de la formule Let comme base.
A toi de compléter la code (ajout d'entête, mise en forme, renommer la feuille...)

VB:
Sub Export()
    Dim objFeuilleActive        As Worksheet
    Dim lgFinTab                As Long     ' N° de la dernière ligne
    Dim strPlageA               As String
    Dim strPlageB               As String
    Dim strPlageC               As String
    Dim rgPlage                 As Range    ' Plage résultat
    Dim tabPlage()                          ' Tableau pour écraser la formule
    
    Application.ScreenUpdating = False
    lgFinTab = [A1].End(xlDown).Row
    strPlageA = "'" & ActiveSheet.Name & "'!A2:A" & lgFinTab
    strPlageB = "'" &...
Je viens de voir que la concaténation n'est pas "top".

Pour une meilleur lisibilité
=GROUPER.PAR(A2:A13;B2:C13;ASSEMB.H(LAMBDA(x;JOINDRE.TEXTE(" > ";VRAI;x)); SOMME);0;0)

ou

=LET(m1r;UNIQUE(A2:A13);
m2r;MAP(m1r;LAMBDA(v;JOINDRE.TEXTE(" > ";VRAI;FILTRE(B2:B13;A2:A13=v))));
m3r;MAP(m1r;LAMBDA(v;SOMME(FILTRE(C2:C13;A2:A13=v))));
ASSEMB.H(m1r;m2r;m3r))
 
Dernière édition:
Je viens de voir que la concaténation n'est pas "top".

Pour une meilleur lisibilité
=GROUPER.PAR(A2:A13;B2:C13;ASSEMB.H(LAMBDA(x;JOINDRE.TEXTE(" > ";VRAI;x)); SOMME);0;0)

ou

=LET(m1r;UNIQUE(A2:A13);
m2r;MAP(m1r;LAMBDA(v;JOINDRE.TEXTE(" > ";VRAI;FILTRE(B2:B13;A2:A13=v))));
m3r;MAP(m1r;LAMBDA(v;SOMME(FILTRE(C2:C13;A2:A13=v))));
ASSEMB.H(m1r;m2r;m3r))
La fonction LET semble bien fonctionner pour mon besoin, mais je voudrai l'intégrer dans une macro plutôt que de l'avoir dans une formule
Est-ce possible ?
 
Ok, peux tu me dire comment tu comptes utiliser cette macro ?

Exemple :
"L'utilisateur sélectionne la plage puis clique sur un bouton, le code demande la destination du résultat..."
Bonjour,
Dans un premier temps je me contenterai d'aller dans l'onglet développeur, de cliquer sur "Macro" puis de lancer la macro depuis la boite de dialogue
Bien entendu la destination du résultat devrait être une nouvelle feuille
 
A toi de choisir :
> Cette macro exporte les données dans une nouvelle feuille : Pas de mise à jour du résultat si l'on modifie les données de départ
> Cette macro génère la formule "=LET(m1r..." dans une nouvelle feuille : Mise à jour du résultat si l'on modifie les données de départ

Concernant le tableau de départ :
> On considère qu'il commence toujours en A1
> Ou que l'utilisateur doit cliquer dedans (peut ainsi être positionné ailleurs que A1)
 
- 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

Retour