Mise en forme (copier coller) selon différente zone jointe (union)

Bonsoir à tous,

Je suis embêtée sur un "projet" qui me demande la réalisation de formalisme précis à chaque feuille. Sur chaque feuille il y a donc du formalisme, des formules à reprendre et étendre etc. Je ne prendrai que l'exemple d'une des feuilles, feuille A.

L'idée c'est de créer le résultat attendu (ligne 49 à 84 de la feuille A), mon problème se pose clairement pour détecter mes zones précises à reconstruire.

Ce que j'ai penser faire c'était (code VBA aussi en module 1) :

- à partir de nom de colonne existant sur toutes les feuilles, faire de la reconnaissance de texte

- donc récupère les données à partir de "Country code" vers "Service", copie-colle en décaler, puis de "Currency" vers "*Comment*" copie-colle à côté de cette zone créé, etc

1er problème : même si j'arrive à trouver mon texte et à leur donner un nom, la nouvelle zone jointe par une union (appelée "NewAreaU1") me conserve quand même la colonne a, qui n'est pas désirée ici.

2ième problème : sur ce fichier anonymisé j'ai une erreur sur mon code sur les selection multiple, que je n'avais pas dans mon fichier non-anonyme

3ième problème : ... bien sûr que j'y ai passé une grande partie de mon week-end et que ce projet est "urgent" et "pour la semaine dernière" et bien sûr que je me décide à poster cela un dimanche soir 21h40.. et que tout cela est très logique. Bref, j'ai cru que ce serait easy et ben en fait non...

Voilà.

Si quelqu'un passe par là et voit ma lumière, qu'il entre (sans jeu de mot sexuel promis !!! )

Une bonne soirée, bon début de semaine et merci,

Sub a_encours()

Dim UnionRange1, UnionRange2, UnionRange3, NewAreaU1, NewAreaU2, NewAreaU3 As Range
Dim dLigA As Long

Sheets("A").Select
'Call SheetCells

'=========================================================================FIRST PART DATA COPY
'==============================================================================================
Set StartRange = Rows(1).Find(what:="Country Code", LookAt:=xlWhole)
Names.Add Name:="SR", RefersToR1C1:=StartRange

Set EndRange = Rows(1).Find(what:="Service", LookAt:=xlWhole)
Names.Add Name:="ER", RefersToR1C1:=EndRange

Set a = Range(Range("SR").End(xlDown), Range("SR"))
Set b = Range(Range("ER").End(xlDown), Range("ER").End(xlToLeft))
Set UnionRange1 = Union(a, b) 'union of 2 ranges

UnionRange1.Select
Selection.Copy
Cells(Rows.Count, 1).End(xlUp).Offset(10, 0).Select
Selection.PasteSpecial

Set NewAreaU1 = ActiveCell.CurrentRegion
Names.Add Name:="NewAreaU1", RefersToR1C1:=NewAreaU1

'=========================================================================SECOND PART DATA COPY
'==============================================================================================
Set StartRangeB = Rows(1).Find(what:="Currency*", LookAt:=xlWhole)
Names.Add Name:="SRnum2", RefersToR1C1:=StartRangeB

Set EndRangeB = Rows(1).Find(what:="*Comment*", LookIn:=xlValues, LookAt:=xlWhole)
Names.Add Name:="ERnum2", RefersToR1C1:=EndRangeB

Set a2 = Range(Range("SRnum2").End(xlDown), Range("SRnum2"))
Set b2 = Range(Range("ERnum2").End(xlDown), Range("ERnum2").End(xlToLeft))
Set UnionRange2 = Union(a2, b2) 'union of 2 ranges

'LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'LastCol = Cells(Rows.Count, Columns.Count).End(xlToLeft).Column

UnionRange2.Select
Selection.Copy
NewAreaU1.Offset(0, L10).Select
Selection.PasteSpecial

Set NewAreaU2 = Selection
Names.Add Name:="NewAreaU2", RefersToR1C1:=NewAreaU2

'=========================================================================THIRD PART DATA CREATION THIS TIME
'===========================================================================================================
Set StartRangeC = NewAreaU2.Rows.Find(what:="Currency*", LookAt:=xlWhole)
Names.Add Name:="SRnum3", RefersToR1C1:=StartRangeC

Set EndRangeC = NewAreaU2.Rows.Find(what:="*Comment*", LookIn:=xlValues, LookAt:=xlWhole)
Names.Add Name:="ERnum3", RefersToR1C1:=EndRangeC

Set a3 = Range(Range("SRnum3").End(xlDown), Range("SRnum3"))
Set b3 = Range(Range("ERnum3").End(xlDown), Range("ERnum3").End(xlToLeft))
Set UnionRange3 = Union(a3, b3) 'union of 2 ranges

'LastRow = Cells(Rows.Count, 1).End(xlUp).Row
'LastCol = Cells(Rows.Count, Columns.Count).End(xlToLeft).Column

UnionRange3.Select
Selection.Copy
NewAreaU2.Offset(0, L10).Select
Selection.PasteSpecial

Set NewAreaU3 = Selection
Names.Add Name:="NewAreaU3", RefersToR1C1:=NewAreaU3

End Sub
18class1.xlsm (33.41 Ko)

Bonjour

Tu as quoi au départ ? Car là avec un même tableau dupliqué n fois ce n'est pas clair...

A priori faisable par PowerQuery plus simplement que par VBA

Les titres des colonne sont vraiment des lettres ? Si non il faut les véritables titres.

Hello 78chris,

Tous les tableaux des feuilles sont en mode plage (pas de mise en forme tableau ici) mais commence tous par la colonne "Item ID" en A1.

bonjour solidsnack29, 78chris salut,

une proposition pour votre fichier en PJ, pas encore pour le vrai fichier. Je ne comprends pas les formules que vous utilisez.

macro "a_encours2" (j'ai caché plusieurs lignes)

16class1.xlsm (41.96 Ko)

RE

Tous les tableaux des feuilles sont en mode plage (pas de mise en forme tableau ici) mais commence tous par la colonne "Item ID" en A1.

Tu ne réponds pas aux questions :

  • pourquoi en A la plage A1:F36 est répétée en A94:F129 et A139:F194 ?
  • quid des titres réels

...

Bonjour solidsnack29, le fil, le forum,

Une proposition à améliorer ...

À savoir : le code supprime les lignes de 90 à 190 avant le traitement.

Les noms des champs nommés sont supprimés au début, puisqu'ils sont créés par la suite.

Bizz

Bonjour à tous,

1/78chris bonjour,

  • pourquoi en A la plage A1:F36 est répétée en A94:F129 et A139:F194 ? Tout simplement car c'est le formalisme strictement attendu et demandé
  • quid des titres réels => que je ne peux partager malheureusement mais cela aurait pu s'appeler "toto" "titi" peu importe

merci pour ton temps,

2/ BsAlv salut et merci pour ta solution !

euh.. je reste honnête j'ai pas pu l'appliquer sur mon fichier source non anonymisé à cause; je présume; du type de donnée "country code" qui est visiblement reconnu comme du numérique.. frustrant parce que je suis certaine que ton travail marche parfaitement..je m'y repencherai plus tard promis :)

Et, par soucis de temps, j'ai tenté la solution de Bizarre.

3/ Coucou Bizarre !

Merci ! j'ai pu appliquer ta solution sur mon fichier non anonymisé. J'y ai rajouté une modification d'un de tes codes pour créer la zone GeneralDiscountArea
lié à la feuille B. Personne n'avait compris l'utilité, désolé, j'ai expliqué avec mes pieds :)

L'idée était de récupérer dans la formule le discount appliqué selon le pays en colonne 2 de NewAreaU1 et donc j'ai pu utiliser une recherchev avec la nouvelle zone créé :

'=========================================================================GeneralDiscountArea PART
'==============================================================================================
Dim StartRangeC As Range, EndRangeC As Range

Sheets("B").Activate

Set StartRangeC = Rows(1).Find(what:="Country", LookAt:=xlWhole)
Names.Add Name:="SRnum3", RefersToR1C1:=StartRangeC

Set EndRangeC = Rows(1).Find(what:="General discount*", LookAt:=xlWhole)
Names.Add Name:="ERnum3", RefersToR1C1:=EndRangeC

Set UnionRange4 = Range(Range("SRnum3"), Range("ERnum3").Rows(dLigA)) ''Union(a3, b3) 'union of 2 ranges

UnionRange4.Select

Set GeneralDiscountArea = Selection
Names.Add Name:="GeneralDiscountArea", RefersToR1C1:=GeneralDiscountArea

'=========================================================================

exemple pour retrouver le montant initial avant le discount : =G92+(G92*(RECHERCHEV(B92;GeneralDiscountArea;5;0)%))

Vraiment merci à tous et vais appliquer la dernière solution le plus vite possible sur le reste de mes feuilles :)

Bonjour solidsnack29, le fil, le forum,

Je suis bien heureux d'avoir pu aider un tantinet.

J'ai bien aimé cette façon d'utiliser des champs nommés, c'était intéressant.

En tant qu'amateur Vba d’Excel, je mets cette méthode dans ma besace.

Bon projet.

Au plaisir,

Bizz

Bonjour solidsnack29, le fil, le forum,

Évitons les ".Sélect" tant que c'est possible.

Donc :

UnionRange4.Select

Set GeneralDiscountArea = Selection
Names.Add Name:="GeneralDiscountArea", RefersToR1C1:=GeneralDiscountArea

Devient :

'''UnionRange4.Select

Set GeneralDiscountArea = UnionRange4       'Selection
Names.Add Name:="GeneralDiscountArea", RefersToR1C1:=GeneralDiscountArea

Bizz

Rechercher des sujets similaires à "mise forme copier coller differente zone jointe union"