Formule ou macro
Résolu
Joie
-
Joie -
Joie -
Bonjour,
Voilà mon petit souci j'aurais souhaité que lorsque je choisis "nouveau prix" dans la cellule B5 et que par la suite dans la cellule B6 je choisis "Même tarif ou Promotion" qu'il fussionne les cellules D5 à D6. Si je choisis encore "Même tarif ou promotion qu'il me la fusionne de D5 à D7 et ainsi de suite. Il ne fusionne pas les montants uniquement s'il s'agit d'un nouveau client. Ca devrait donné ca! :-) Je serai vraiment reconnaissante à la personne qui pourra m'aider.
Je sais que je peux le faire moi-même mais si c'était automatiser ce serait vraiment pratique car il y a beaucoup de données et j'oublie quelquefois de fusionner les cellules et des les additionner.
https://www.cjoint.com/?jEwiAkISW2
:-) Help
Voilà mon petit souci j'aurais souhaité que lorsque je choisis "nouveau prix" dans la cellule B5 et que par la suite dans la cellule B6 je choisis "Même tarif ou Promotion" qu'il fussionne les cellules D5 à D6. Si je choisis encore "Même tarif ou promotion qu'il me la fusionne de D5 à D7 et ainsi de suite. Il ne fusionne pas les montants uniquement s'il s'agit d'un nouveau client. Ca devrait donné ca! :-) Je serai vraiment reconnaissante à la personne qui pourra m'aider.
Je sais que je peux le faire moi-même mais si c'était automatiser ce serait vraiment pratique car il y a beaucoup de données et j'oublie quelquefois de fusionner les cellules et des les additionner.
https://www.cjoint.com/?jEwiAkISW2
:-) Help
Configuration: Windows XP Internet Explorer 7.0
4 réponses
-
bonjour,
si, chez moi ca défusionne; je teste toujours avant de fournir une réponse
ci dessous nouvelle macro pour "un tableau très grand " et qui recopie les données colonnes B et D (ce n'était pas précisé dans ta demande et pourrait être fait par formule si pas "tableau très grand" )
Option Explicit Const dep As Byte = 5 'ligne départ tableau Const texto As String = "nouveau pix" ' texte séparateur Sub fusionner_cellule() Dim derlig As Long, nbre As Long, lig As Long, cptr As Long Dim tablo 'initialisation derlig = Range("B65536").End(xlUp).Row Application.ScreenUpdating = False 'fige le défilement de l'écran Range(Cells(dep, 6), Cells(65535, 8)).Clear 'défusionne col H et nettoie col F, G,H nbre = Application.CountIf(Range(Cells(dep, 2), Cells(derlig, 2)), texto) ReDim tablo(nbre) 'collecte les numéros des lignes comportant texto lig = dep - 1 For cptr = 1 To nbre tablo(cptr - 1) = Columns(2).Find(texto, Cells(lig, 2)).Row lig = tablo(cptr - 1) Next tablo(cptr - 1) = derlig + 1 'restitue For cptr = 1 To UBound(tablo) With Range(Cells(tablo(cptr - 1), 8), Cells(tablo(cptr) - 1, 8)) .Merge 'fusionne les cellules .Value = Application.Sum(Range(Cells(tablo(cptr - 1), 4), Cells(tablo(cptr) - 1, 4))) 'somme nouveau prix End With Next 'recopie les nouvelles données Range(Cells(dep, 6), Cells(derlig, 6)) = Range(Cells(dep, 2), Cells(derlig, 2)).Value Range(Cells(dep, 7), Cells(derlig, 7)) = Range(Cells(dep, 4), Cells(derlig, 4)).Value ' met en forme le tableau With Range(Cells(dep, 6), Cells(derlig, 8)) .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .Borders.Weight = xlThin End With End Sub
-
-
Coucou,
Juste une dernière question il faut que j'adapte ta formule que je mette les chiffres dans la colonne V et que le les fusionnes dans la colonne X. pour que ca fussionne en colonne X j'ai compris mais par contre je n'arrive pas à modifier la formule pour que ça me prenne les résultats dans la colonne X au lieu de la colonne D. Peux-tu juste m'expliquer comment faire? :-(
-
-
Bonjour,
regarde si cette macro te convient:
Option Explicit Const dep As Byte = 5 'ligne départ tableau Const texto As String = "nouveau pix" ' texte séparateur Sub fusionner_cellule() Dim derlig As Long, nbre As Long, lig As Long, cptr As Long Dim tablo 'initialisation derlig = Range("B65536").End(xlUp).Row nbre = Application.CountIf(Range(Cells(dep, 2), Cells(derlig, 2)), texto) Range(Cells(dep, 8), Cells(derlig, 9)).Clear ReDim tablo(nbre) 'collecte les numéros des lignes comportant texto lig = dep - 1 For cptr = 1 To nbre tablo(cptr - 1) = Columns(2).Find(texto, Cells(lig, 2)).Row lig = tablo(cptr - 1) Next tablo(cptr - 1) = derlig + 1 'restitue For cptr = 1 To UBound(tablo) With Range(Cells(tablo(cptr - 1), 8), Cells(tablo(cptr) - 1, 8)) .Merge 'fusionne les cellules .HorizontalAlignment = xlCenter 'présentation .VerticalAlignment = xlCenter 'présentation .Borders.Weight = xlThin 'présentation .Value = Application.Sum(Range(Cells(tablo(cptr - 1), 4), Cells(tablo(cptr) - 1, 4))) 'somme nouveau prix End With Next End Sub
tite demo:
https://www.cjoint.com/?kbkrFICjXB-
Salut,
Tout d'abord merci pour ta réponse rapide c'est effectivement ce que je voulais mais l'ennui c'est que si je modifie quelque chose par exemple j'ai utilisé la macro mais je me rends compte que je me suis trompé dans la cellule F13 ou B13. Je devais mettre nouveau pris et bein ca ne le corrige pas! Il devrait défusionner la cellule...
C'est que le tableau est vraiment très grand et desfois j'ai aussi des mauvaises informations que je dois corriger... est-ce que tu as une solution? :-(
-
-
Il faut que tu relances la macro...
les cellules fusionnées sont détruites au départ dans le paragraphe initialisation par cette instruction:
Range(Cells(dep, 8), Cells(derlig, 8)).Clear
C'est que le tableau est vraiment très grand
Tu aurais pu le préciser AVANT: le raisonnement est souvent différent suivant le nombre de lignes prévisible (très grand est subjectif et ne veut rien dire: 1000 ou 10000 ou 50000 lignes est un renseignement exploitable ...)
Ainsi, il faut ajouter une instruction figeant le défilement de l'écran:rapidité et confort
Application.ScreenUpdating = False
donc le groupe initialisation de vient celui-ci à copier coller à la place (accès VBA: Alt+F11)
'initialisation derlig = Range("B65536").End(xlUp).Row nbre = Application.CountIf(Range(Cells(dep, 2), Cells(derlig, 2)), texto) Application.ScreenUpdating = False Range(Cells(dep, 8), Cells(derlig, 8)).Clear ReDim tablo(nbre)-
Oui pardon! C'est vrai que maintenant que tu le dis ca me paraît logique! :-)
Mais il ne me le défusionne pas! :-( Est-ce que je fais quelque chose de faux?
Je t'ai envoyé le lien avec un exemple de correction. :-)
https://www.cjoint.com/?kcjtnKGiIu
Merci pour ton aide
-
-
C'est possible mais ca me fait refaire pratiquement toute la procédure, alors pitié!