Bonjour à tous les lecteurs !
Je viens vers vous suite à une macro qui me pose problème (pomper je le confesse sur : Fusionner plusieurs lignes : Excel - VBA).
Cette macro prends plus d'une minute pour faire le boulot (ok c'est toujours mieux qu'à la main...)
Cette dernière fonctionne à merveille mais prends une plombe de temps à effectuer ses actions (pourtant simple non ?).
Petite explication de la mécanique :
Tout d'abord, je sélectionne ma plage (variable mais je définie une grande zone éventuellement à améliorer) et je réalise un collage spécial pour supprimer les formules (réaliser en VBA le triage et rechercheV nécessaire est au dessus de mes capacités).
J'ai une base de donnée variable dans la composition et la longueur mais normé après un traitement tel que présenté(extraction d'un site internet). Pour cela tout va bien.
Je réalise ce traitement pour trier des événements en deux cas (A et B dans mon document anonyme) et les regrouper pour compléter la première ligne (Si la cause A est remplie la B est forcément vide dans une seconde ligne mais il ne peut y avoir qu'une seul ligne cause A ou cause B). Le traitement doit avoir pour référence les valeurs de la colonne "B" à comparer. Le trie de ces valeurs est réaliser avant mais je n'ai pas alourdie la macro car elle rame déjà ^^.
Dans l'absolue mon outil ne prends pas en compte une cause B seule mais rien ne m'oblige à les traiter donc possibilité d'effacement des causes B sans la cause A (l'élément de comparaison restant la colonne "B").
Suite à ce bricolage, je souhaite effacer chaque ligne prélevé (bug dans le code qui laisse présent la colonne A mais c'est pas éliminatoire) pour compléter la précédente et surtout pas supprimer car sinon derrière tout part en vrille (car ce petit bout fait partie d'un grand ensemble).
Bref l'objectif est plus compliquer à expliquer que la lecture du code VB ...
Si je ne suis pas explicite je peu apporté des précisions !
Je vous remercie par avance de prendre un peu de votre temps pour un petit coup de pouce !
Je viens vers vous suite à une macro qui me pose problème (pomper je le confesse sur : Fusionner plusieurs lignes : Excel - VBA).
Cette macro prends plus d'une minute pour faire le boulot (ok c'est toujours mieux qu'à la main...)
Sub Regroupe()
'Attention ! Les données doivent être triées en colonne A
Application.ScreenUpdating = False
Dim Lig As Long, i As Long, j As Long, k As Long
Range("A2:K5000").Activate
Selection.Copy
Range("A2").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
'Dernière Ligne
Lig = Range("A5000").End(xlUp).Row
'De la dernière ligne à la ligne 2
For i = Lig To 2 Step -1
'De la colonne 2 (B) à la colonne 11 (K)
For j = 2 To 11
'Si la valeur de la cellule de la colonne A est égale à la valeur de la cellule de la ligne au-dessus
If Cells(i, 1) = Cells(i - 1, 1) Then
'Si la cellule de la colonne étudiée est non vide
If Cells(i, j) <> "" Then
'On fait un COUPER-COLLER sur la ligne au-dessus
Cells(i, j).Cut Destination:=Cells(i - 1, j)
End If
End If
'Colonne suivante à étudier
Next j
'Ligne suivante à étudier
Next i
End Sub
Cette dernière fonctionne à merveille mais prends une plombe de temps à effectuer ses actions (pourtant simple non ?).
Petite explication de la mécanique :
Tout d'abord, je sélectionne ma plage (variable mais je définie une grande zone éventuellement à améliorer) et je réalise un collage spécial pour supprimer les formules (réaliser en VBA le triage et rechercheV nécessaire est au dessus de mes capacités).
J'ai une base de donnée variable dans la composition et la longueur mais normé après un traitement tel que présenté(extraction d'un site internet). Pour cela tout va bien.
Je réalise ce traitement pour trier des événements en deux cas (A et B dans mon document anonyme) et les regrouper pour compléter la première ligne (Si la cause A est remplie la B est forcément vide dans une seconde ligne mais il ne peut y avoir qu'une seul ligne cause A ou cause B). Le traitement doit avoir pour référence les valeurs de la colonne "B" à comparer. Le trie de ces valeurs est réaliser avant mais je n'ai pas alourdie la macro car elle rame déjà ^^.
Dans l'absolue mon outil ne prends pas en compte une cause B seule mais rien ne m'oblige à les traiter donc possibilité d'effacement des causes B sans la cause A (l'élément de comparaison restant la colonne "B").
Suite à ce bricolage, je souhaite effacer chaque ligne prélevé (bug dans le code qui laisse présent la colonne A mais c'est pas éliminatoire) pour compléter la précédente et surtout pas supprimer car sinon derrière tout part en vrille (car ce petit bout fait partie d'un grand ensemble).
Bref l'objectif est plus compliquer à expliquer que la lecture du code VB ...
Si je ne suis pas explicite je peu apporté des précisions !
Je vous remercie par avance de prendre un peu de votre temps pour un petit coup de pouce !
Pièces jointes
Dernière édition: