Extraire des colonnes sur nouvel onglet et traitemeant

bonjour,

J'ai un fichier où je veux copier la colonne A+B sur un nouvel onglet, et ensuite la colonne A+C et ainsi de suite tant que la colonne après A est remplie (dans mon cas 202 colonnes dernière colonne GU). Cette dernière colonne peut varier car elle est le résultat d'un transpose.

Ensuite sur chaque onglet, je ne veux que les lignes qui sont en jaunes sur la colonne B.

Je ne vois pas comment faire.

si vous pouviez m'aider svp ?

Merci d'avance

Bonjour et bienvenu(e),

Un peu de lecture pour commencer.

https://forum.excel-pratique.com/annonces/explications-et-regles-a-respecter-t13.html

Ensuite tu reformules ta question, car ce n'est pas clair. Et comme le point 6 le préconise, tu joins un classeur 'exemple' avec les résultats escomptés

Cdlt.

bonjour

Désolé, j'ai peut être été un peu vite.

Je recommence à zéro, j'ai mis en pièce jointe un fichier exemple.

Le fichier montre ce que je souhaiterai au final.

Le premier onglet est le fichier de départ, je n'ai mis que 3 colonnes après la colonne A mais cela peut varier.

La colonne A est la colonne qui doit se retrouver dans tous le onglets.

1/

La première chose que je souhaiterai est de copier la colonne A+B, A+C et A+D dans 3 onglets différents comme sur l'exemple.

2/

Ensuite dans chaque onglet, je ne souhaite garder après la ligne 7 que les lignes en jaune comme le montre l'exemple.

Voilà j'espère avoir été plus clair et encore désolé pour mon empressement.

Merci de votre aide

10exemple.xlsx (27.23 Ko)

Bonjour,

Une proposition à étudier.

ALT F8 et exécuter la procédure.

Cdlt.

12exemple.xlsm (27.22 Ko)
Option Explicit

Public Sub CopyToWorksheets()
Dim wb As Workbook
Dim ws As Worksheet, wsData As Worksheet, wsNew As Worksheet
Dim lCol As Long, lastCol As Long, lastRow As Long
Dim rng As Range, rng2 As Range, rng3 As Range, Urng As Range
Dim strWs As String

    With Application
        .DisplayAlerts = False
        .ScreenUpdating = False
    End With

    Set wb = ActiveWorkbook
    Set wsData = wb.Worksheets("fichier de départ")

    On Error Resume Next
    For Each ws In wb.Worksheets
        If ws.Name <> wsData.Name Then ws.Delete
    Next ws
    On Error GoTo 0

    Application.DisplayAlerts = True

    With wsData
        lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
        lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
        Set rng = .Cells(1).Resize(lastRow)
        For lCol = 2 To lastCol
            strWs = .Cells(7, lCol)
            Set rng2 = .Cells(lCol).Resize(lastRow)
            Set Urng = Union(rng, rng2)
            Urng.Copy
            Set wsNew = wb.Worksheets.Add(After:=Worksheets(Worksheets.Count))
            wsNew.Name = strWs
            [A1].PasteSpecial xlPasteValues
            [A1].PasteSpecial xlPasteFormats
            Application.CutCopyMode = False
            [A1:B1].EntireColumn.AutoFit
            Set rng3 = Range("A7:B" & lastRow)
            rng3.AutoFilter field:=2, Operator:=xlFilterNoFill
            With wsNew.AutoFilter.Range
                Set rng2 = .Offset(1, 0).Resize(.Rows.Count - 1, 1) _
                           .SpecialCells(xlCellTypeVisible)
                rng2.EntireRow.Delete
            End With
            rng3.AutoFilter field:=2
            [A1].Select
        Next lCol
    End With

    Set rng3 = Nothing: Set rng2 = Nothing: Set Urng = Nothing: Set rng = Nothing
    Set wsNew = Nothing: Set wsData = Nothing
    Set wb = Nothing

End Sub

Merci de l'aide apportée.

La macro bloque après avoir créer 28 sheets sur le code (voir l'image).

Etant un novice en VBA, je ne comprend pas tout de ce code.

Auriez vous une idée du pourquoi de ce blocage svp?

Merci de vos éclaircissements.

Patrick


J'ajoute que le code fonctionne parfaitement pour l'exemple donné.

L'erreur apparaît sur le fichier réel de 202 colonnes après la colonne A.

Si cela peut aider.

2016 03 21 134351

Re,

strWs est le nom de la nouvelle feuille créée.

Le nom de la feuille est égale à la valeur de la cellule en ligne 7 (numéro de colonne variable)

Si tu crées une nouvelle feuille qui porte déjà ce nom, il y a erreur.

Tu dois de plus avoir un message d'erreur. Quel est-il?

Cdlt.

effectivement bien vu; j'ai le cas qui se présente où je peux avoir le même nom ce qui fait la différence c'est la ligne 4 comme te le montre l'image attachée.

Est il possible d'adapter le code svp ?

je vs remercie par avance.

image2

Re,

Remplace

strWs = .Cells(7, lCol)

par

strWs = Trim(.Cells(7, lCol) & " " & .Cells(4, lCol))

A te relire.

Cdlt.

Jean-Eric

Merci cela fonctionne parfaitement maintenant.

Je vais essayer maintenant de décortiquer le code afin de comprendre le mécanisme.

N'ayant pas un niveau élevé en VBA, cela va être ardu !!!

Peut-être reviendrai-je vers vous pour de plus amples renseignements, si cela ne vous dérange pas ?

Je ne manquerai pas de dire votre contribution à la résolution de mon pb.

Patrick

Re,

Je te propose de commenter la procédure.

Mais en fin de journée.

Cdlt.

Jean Eric,

Désolé de t'importuner encore une fois mais j'ai une cellule qui est comme l'image jointe.

Cette cellule ne peut elle pas être concatener en plusieurs cellules (une ligne par cellule ? svp

Car mon soucis est que mon soft de comparaison excel me donnera la cellule de modifiée et pas la partie à l'intérieure de la cellule qui est modifiée!

Voilà mon autre soucis?

Merci

image3

Re,

Je crains de ne pas comprendre.

Quelle est la relation avec le sujet en cours?

Cdlt.

Re,

Car cette cellule au final fera partie de mon fichier de départ.

Et qu'il sera difficile d'isoler la difference.

Car le fichier 1 aura:

Note

1. The maximum allowable stoke time shall be 10 secs.

Et le fichier 2 aura:

Note

1. The maximum allowable stoke time shall be 10 secs.

2. Operating viscosity : 0.019 cP

Par contre, le fichier de comparaison me mettra en jaune toute la cellule du fichier 2, et non juste le point 2.

J'ai cherché sur le forum à concatener et copier dans une autre cellule, une cellule par le Alt+Entrée mais je n'ai rien trouvé.

Merci de votre aide précieuse.

Patrick

Re,

Essaie d'envoyer les éléments nécessaires à une bonne compréhension.

C'est dire un fichier représentatif de tes données d'entrées et le résultat escompté...

Je ne promets rien.

Cdlt.

Re

voilà je vous joins un fichier exemple.

Il comporte 4 onglets, le 5e est plus pour voir le résultat final que j'obtiendrai avec le comparaison.

En fait je veux mettre un note qui est en ligne en colonne afin de pouvoir comparer.

le Alt + Entrée étant le facteur de séparation.

J'espère que cela est plus clair ? svp

Merci

Patrick

Bonjour,

J'ai réussi à remplacer le Alt+Entrée par ** grâce à '=SUBSTITUTE(B237;CHAR(10);"*")'

"Note

*1. The maximum allowable stoke time shall be 10 secs.

*2. Operating viscosity : 0.019 cP "

Maintenant il faut créer une colonne à chaque * pour avoir

Note │ 1.xxxxxxx │ 2.xxxxxxx

Cette requête devant être effectuée avant celle qui a été crée hier.

Mais déjà pour copier chaque chaine de caractère dans un cellule, je coince !

Merci à tous ceux qui pourraient m'apporter un peu d'aide svp

Patrick

Le soucis est que le Alt+entrée est parfois remplacer par ** ou * ou **** cela dépend du nb de Alt Entrée !!

Si encore l'* etait unique entre chaque phrase...

Je ne vois pas comment faire pour scinder et recopier dans les cellules adjacentes ? svp

Bonjour,

Peux-tu joindre un fichier avec les types différents de chaînes que tu rencontres.

Cdlt.

bonjour Jean-Eric

Où alors est il possible de comparer 2 cellules et d'en extraire la difference dans une troisième ?svp

je vs joins un fichier

Merci de votre aide

bonjour

une fois le traitement fait, est il possible après de reprendre chaque onglet et de remettre tous les résultats dans un seul et en ligne ? svp

merci de ta réponse


L'aide apportée m'a été vraiment importante et je tiens particulièrement à te remercier pour le temps que tu y as accordé.

pour faire simple après qu'il ait fait le traitement de mettre chaque colonne dans un onglet d'avoir fait le traitement de ne garder que les lignes jaunes, je souhaiterai avoir un seul onglet final avec le résultat comme sur le fichier joint svp.

MErci d'avance

PAtrick

resultat final
Rechercher des sujets similaires à "extraire colonnes nouvel onglet traitemeant"