Fusion de lignes sous plusieurs conditions
Résolu
Pompom974
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
Pompom974 Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
Pompom974 Messages postés 20 Date d'inscription Statut Membre Dernière intervention -
Bonjour tout le monde !
Je fais appel à vous car je ne sais vraiment pas comment faire... Je suis débutante en VBA, mais grâce à mon stage j'ai pu apprendre quelques notions.
Je viens vers vous car j'ai un problème que je n'arrive pas à résoudre, malgré de multiples essais.
J'ai un classeur excel avec plusieurs colonnes : un numéro 1, un nom de produit, un deuxième numéro, des quantités et des dates.
Je voudrais fusionner des cellules si les numéros de la colonne A sont les mêmes, et si les numéros de la colonne C sont les mêmes. Je voudrais également sommer les quantités des cellules que je fusionne, et dans la colonne date, conserver la date la plus récente.
Voici un exemple du fichier de travail (c'est un fichier professionnel, et je ne peux donc pas le partager... Il contient 800 lignes et une 30aines de colonnes) :
A B C D E
Numéro1 Produit Numéro2 Quantité Date
4315955 Produit1 A4546545 1 12/09/2015
1314116 Produit2 B5465452 6 08/07/2015
4157819 Produit3 C6545454 5 04/09/2015
5548455 Produit4 D7874361 8 06/08/2015
4315955 Produit1 A4546545 1 17/05/2015
1314116 Produit2 B5465452 5 15/06/2015
Et voici le code que j'ai commencé à faire, et qui plante, mais je n'ai pas encore trouvé pourquoi (je me suis dit que ça devait être à cause du nombre de lignes présents dans le fichier et du nombre de boucles que je demandais à Excel de faire) :
En vous remerciant d'avance de vos réponses!
Je fais appel à vous car je ne sais vraiment pas comment faire... Je suis débutante en VBA, mais grâce à mon stage j'ai pu apprendre quelques notions.
Je viens vers vous car j'ai un problème que je n'arrive pas à résoudre, malgré de multiples essais.
J'ai un classeur excel avec plusieurs colonnes : un numéro 1, un nom de produit, un deuxième numéro, des quantités et des dates.
Je voudrais fusionner des cellules si les numéros de la colonne A sont les mêmes, et si les numéros de la colonne C sont les mêmes. Je voudrais également sommer les quantités des cellules que je fusionne, et dans la colonne date, conserver la date la plus récente.
Voici un exemple du fichier de travail (c'est un fichier professionnel, et je ne peux donc pas le partager... Il contient 800 lignes et une 30aines de colonnes) :
A B C D E
Numéro1 Produit Numéro2 Quantité Date
4315955 Produit1 A4546545 1 12/09/2015
1314116 Produit2 B5465452 6 08/07/2015
4157819 Produit3 C6545454 5 04/09/2015
5548455 Produit4 D7874361 8 06/08/2015
4315955 Produit1 A4546545 1 17/05/2015
1314116 Produit2 B5465452 5 15/06/2015
Et voici le code que j'ai commencé à faire, et qui plante, mais je n'ai pas encore trouvé pourquoi (je me suis dit que ça devait être à cause du nombre de lignes présents dans le fichier et du nombre de boucles que je demandais à Excel de faire) :
Dim i As Integer
Dim EndLigFusion As Integer
EndLigFusion = .Range("B" & Rows.Count).End(xlUp).Row
Application.DisplayAlerts = False
For NumLig = EndLigFusion To 7 Step -1
For i = EndLigFusion To 8 Step -1
If .Range("B" & NumLig).Value = .Range("B" & i).Value And .Range("D" & NumLig).Value = .Range("D" & i).Value Then
.Range("B" & NumLig, "B" & i).Merge
.Range("D" & NumLig, "D" & i).Merge
.Range("E" & NumLig).Formula = .Range("E" & NumLig).Value + .Range("E" & i).Value
If .Range("O" & NumLig).Value > .Range("O" & i).Value Then
.Range("O" & NumLig).Value = .Range("O" & NumLig).Value
Else
.Range("O" & NumLig).Value = .Range("O" & i).Value
End If
End If
Next i
Next NumLig
En vous remerciant d'avance de vos réponses!
A voir également:
- Fusion de lignes sous plusieurs conditions
- Partage de photos en ligne - Guide
- Mise en forme conditionnelle excel plusieurs conditions - Guide
- Écrire plusieurs lignes dans une cellule excel mac - Guide
- Excel trier par ordre alphabétique en gardant les lignes - Guide
- Formulaire en ligne de meta - Guide
5 réponses
Bonjour,
Est tu obligée de créer des celules fusionnées (les cellules fusionnées sont à éviter dans les automatisations Excel) surtout que l'on pourrait avoir une seule ligne en fonction des numéros...
mais comme on ne sait pas ce qu'il y a dans les 25 autres colonnes....
mais peut-^tre as tu besoin en retour qu'un taableau à 5 colonnes ?
Est tu obligée de créer des celules fusionnées (les cellules fusionnées sont à éviter dans les automatisations Excel) surtout que l'on pourrait avoir une seule ligne en fonction des numéros...
mais comme on ne sait pas ce qu'il y a dans les 25 autres colonnes....
mais peut-^tre as tu besoin en retour qu'un taableau à 5 colonnes ?
Oui, pardon, j'ai créé l'exemple rapidement après avoir écrit le code. Je le renvoie donc ici après l'avoir adapté à mon exemple :
Dim i As Integer
Dim EndLigFusion As Integer
EndLigFusion = .Range("A" & Rows.Count).End(xlUp).Row
Application.DisplayAlerts = False
For NumLig = EndLigFusion To 7 Step -1
For i = EndLigFusion To 8 Step -1
If .Range("A" & NumLig).Value = .Range("A" & i).Value And .Range("C" & NumLig).Value = .Range("C" & i).Value Then
.Range("A" & NumLig, "A" & i).Merge
.Range("C" & NumLig, "C" & i).Merge
.Range("D" & NumLig).Formula = .Range("D" & NumLig).Value + .Range("D" & i).Value
If .Range("E" & NumLig).Value > .Range("E" & i).Value Then
.Range("E" & NumLig).Value = .Range("E" & NumLig).Value
Else
.Range("E" & NumLig).Value = .Range("E" & i).Value
End If
End If
Next i
Next NumLig
Application.DisplayAlerts = True
Bonjour
ci joint proposition
avec durée du traitement 7/100 secondes pour 600 lignes
http://www.cjoint.com/c/EHbjR7xYDiY
ci joint proposition
avec durée du traitement 7/100 secondes pour 600 lignes
http://www.cjoint.com/c/EHbjR7xYDiY
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai besoin de fusionner les cellules pour effectuer un calcul sur un nombre de lignes, et si je ne les fusionne pas je compte donc des "lignes en trop" (à cause du coup des doublons de produit qui ont des quantités et des dates de livraison différente). La seule solution que j'avais trouvé pour éviter de compter ces lignes en trop et récupérer les informations dont j'ai besoin (notamment la date), c'était de fusionner les cellules de mon tableau sous certaines conditions... Mais si vous avez une autre idée, je ne dis pas non :$
Merci de votre réponse
ok
je te propose une solution cet aprem ou demain matin...
edit 12:00h:
ton exemple est faux par rapport àton code !!! :-(
les quantités sont dans colonne D dans ton exemple et en E dans ton code
les dates sont dans colonne E dans ton exemple et O dans ton code...
donc, j'attend; vérifie bien que ta demande est exacte et complète: je ne recommence jamais un code dans le cas contraire