Copie de donnée dans un autre Onglet

Bonjour amis utilisateur d'Excel,

Voilà j'ai un fichier à traiter sur Excel et je ne sais pas par où commencer ni comment faire.

Ma situation :

fichier excel 1

(Les données étant peut être sensible j'ai flouté)

Donc j'ai ce tableau général que l'utilisateur rempli jusqu'à la case bleu fluo qui correspond à un délai

Puis :

fichier excel 2

j'aimerai que les lignes entières soit directement copié dans différent onglet par tranche de durée pour l'analyse

Que dois-je faire ? ou sinon vers quoi me tourner pour savoir ?

Merci d'avance

Bonne journée

Piou

Bonjour Piou et bienvenu, bonjour le forum,

Commence par nous envoyer un fichier Excel anonymisé. Ou essaie de régler ton problème sur un forum Photochope avec tes captures d'écran...

Voici le fichier

7fichier-test.xlsx (68.26 Ko)

En gros je voudrais que les lignes de donnée de l'onglet général soit les seules que l'on remplisse et que les autres dans chacun des onglet se remplissent en fonction du délai affiché colonne "Délai de résolution total"

Exemple : la ligne de l'onglet 1 nous donne un délai total de 70 jours

je retrouve donc toute les infos de cette ligne dans l'onglet "Analyse +00 Jours"

Merci déjà pour ton retour sur le premier message

Re,

Le problème est que tu veux ça en automatique et comme la colonne AC contient des formules je suis obligé d'utiliser l'événement Calculate qui agit chaque fois qu'il y a un recalcul dans l'onglet et je crains que ça ne convienne pas car les lignes seront dispatchées plusieurs fois...
De plus tu proposes un fichier sans aucune donnée correspondant à un des trois cas!? N'importe quoi...
Je te propose une solution avec un bouton et en rajoutant colonne avec un marqueur dans l'onglet Données Générales. Ça ne sera plus automatique mais chaque fois que tu cliquera sur sur boutons les données seront dispatchées et marquées. Par la suite, seules les données non marquées seraient dispatchées.
J'attends donc un fichier convenable pour te proposer une solution si celle-ci te convient...

Bonjour,

Merci de ton retour, j'ai supprimé les 3000 lignes et j'ai manqué de regarder que les délais n'étaient pas bon.

Je te renvoie un fichier avec des délais corrects.

Merci déjà pour l'aide que tu m'apportes

2fichier-test.xlsx (41.20 Ko)

Piou

Bonjour Piou, bonjour le forum,

En pièce jointe ton fichier modifié. J'ai remplacé les tableaux par des tableaux structurés (ListObject), rajouté une colonne Marqueur a la fin dans l'onglet Données Générales et rajouté le bouton Dispatcher. Clique sur ce bouton...

Le code :

Option Explicit

Private Sub CommandButton1_Click() 'bouton "Dispatcher"
Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
Dim TS As ListObject 'déclare la variable TS (Tableau Source)
Dim O As Worksheet 'déclare la variable O (Onglet)
Dim T As ListObject 'déclare la variable T (Tableau)
Dim I As Integer 'déclare la variable I (Incrément)
Dim R As Range 'déclare la variable R (Recherche)
Dim LI As Integer 'déclare la variable LI (Ligne)

ActiveCell.Select 'enlève le focus au bouton
Set OS = Worksheets("Données Générales") 'définit l'onglet source OS
Set TS = OS.ListObjects(1) 'définit le tableau source TS
For I = 1 To TS.ListRows.Count 'boucle sur toutes les lignes I du tableau TS
    Select Case TS.DataBodyRange(I, 29).Value 'agit en fonction de la donnée ligne I colonne 29 (Délai de résolution total)
        Case Is > 300 'cas supérieur à 300
            Set O = Worksheets("Analyse +300 Jours") 'définit l'onglet O
            Set T = O.ListObjects(1) 'définit le tableau T
        Case Is > 200 'cas supérieur à 200
            Set O = Worksheets("Analyse +200 Jours") 'définit l'onglet O
            Set T = O.ListObjects(1) 'définit le tableau T
        Case Is > 100 'cas supérieur à 100
            Set O = Worksheets("Analyse +100 Jours") 'définit l'onglet O
            Set T = O.ListObjects(1) 'définit le tableau T
        Case Is > 0 'cas supérieur à 0
            Set O = Worksheets("Analyse +00 Jours") 'définit l'onglet O
            Set T = O.ListObjects(1) 'définit le tableau T
    End Select 'fin de l'action en fonction de la donnée ligne I colonne 29 (Délai de résolution total)
    If Not UCase(TS.DataBodyRange(I, 34).Value) = "X" Then 'condition 1 : si le marqueur en colonne 34 est différent de "X"
        Set R = T.ListColumns(1).Range.Find("") 'définit la recherche (recherche du vide dans la première colonne de T)
        If R Is Nothing Or T.ListRows.Count = 0 Then 'condition 2 : si aucune occurrence n'est trouvée ou si T ne contient aucune ligne
            T.ListRows.Add 'ajoute une ligne à T
            LI = T.ListRows.Count 'définit la ligne LI (dernière ligne de T)
        Else 'sinon (au moj s une occurrence a été trouvée)
            LI = R.Row - T.HeaderRowRange.Row 'définit la ligne LI (ligne de la première occurrence trouvée moins la ligne des en-têtes de T)
        End If 'fin de la condition 2
        TS.DataBodyRange(I, 34).Value = "X" 'écrit X dans la colonne 34 (Marqueur)
        T.DataBodyRange(LI, 1).Resize(1, 33).Value = TS.DataBodyRange(I, 1).Resize(1, 33).Value 'récupère les données de TS dans T
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle
End Sub

Le fichier :

3piou-ep-v01.xlsm (54.47 Ko)

Merci Beaucoup ThauThème,

Ca marche très bien.

Je ne mis connais pas en VBA mais je comprend le code avec tes annotations

Je m'y pencherai plus tard car c'est intéressant.

Bonne continuation à toi et encore merci

Piou

Rechercher des sujets similaires à "copie donnee onglet"