Importer des données d'un onglet Excel à un autre

Bonjour,

J'ai trouvé cette macro qui peut être utile pour le travail que j'effectue. Je l'ai trouvé sur le post suivant :

https://forum.excel-pratique.com/excel/macro-pour-alimenter-un-onglet-a-partir-d-autre-onglet-t27974.html

Je vous fais un copier-coller de la macro avec ce que j'ai compris, donc si j'ai tords vous pouvez me corriger

Sub Creation() 'bouton pour créer la macro

Dim Nom As String 'variable

Dim Ws As Worksheet 'variable

Dim I As Integer 'variable

Set Ws = ActiveSheet 'activer la feuille active (ex : si vous êtes sur la feuille1)

Nom = Ws.Name & "1"

If FeuilleExiste(Nom) Then

If MsgBox("La feuille existe déjà" & vbCr & "Voulez-vous la refaire ?", _ 'ici vous allez indiqué un message pour l'utilisateur

vbCritical + vbYesNo, "Suppression de la feuille") <> vbYes Then Exit Sub

Application.DisplayAlerts = False

Sheets(Nom).Delete

Application.DisplayAlerts = True

End If

Application.ScreenUpdating = False

Sheets("Modèle").Copy after:=Ws

ActiveSheet.Name = Nom

Range("E2") = Ws.Range("C8")

Range("H2") = DateAdd("m", 1, Range("E2")) - 1

Ws.Range("F8:H22").Copy

Range("B5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=True

Ws.Range("F23:H38").Copy

Range("B11").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, _

SkipBlanks:=False, Transpose:=True

Application.CutCopyMode = False

Range("A1").Select

Ws.Select

End Sub

Function FeuilleExiste(Nom As String) As Boolean

On Error Resume Next

FeuilleExiste = Sheets(Nom).Name <> ""

On Error GoTo 0

End Function

L'objectif pour moi est d'adapter cette formule pour mon travail. En effet, il faut que certaines données d'un onglet excel aille dans un autre onglet excel (on est toujours dans le même fichier), sauf que certaines données qui seront récupérés ne seront pas l’exhaustivité.

Exemple : sur l'onglet "base de travail" nous avons 12 colonnes remplis hebdomadairement par un gestionnaire. Ces données une fois remplis font être récupérer de façon automatique (grâce à un bouton) sur un autre onglet du même fichier Excel, sauf qu'au lieu d'avoir 12 colonnes, nous en aurons que 6 (le reste des informations n'est pas utile). Maintenant le problème constaté, c'est que sur l'onglet "base de travail" des champs (lignes) peuvent être supprimées car elles n'ont plus de valeur au sein du service. Ces données quant elles seront reportés sur l'autre onglet que nous appelerons "xxxx", n'apparaitront plus. Hors, il faut savoir que sur cette autre fichier, un travail de précision est effectué grâce au informations rapportées par l'onglet "base de travail". Ces données ne doivent pas disparaître car sinon la personne en charge de l'onglet devra recommencer son boulot.

Est-ce seulement possible ?

Si non, je prendrais la formule cité plus haut et clôturerais le fichier tel quel.

Bonjour

BLANC a écrit :

Est-ce seulement possible ?

C'est vraisemblablement possible.

Mais il faudrait que tu joignes une fichier indiquant ce que tu as au départ et montrant ce que tu veux obtenir....

Bye !

Bonjour,

Désolé du retard.

Voici un exemple joint (copier-coller du TDB Technique). Sur ce fichier, il y a 2 onglets : S.Technique et S.Comptable ; ces deux onglets sur le TDB Technique ont un mot de passe différents afin d'empêcher des utilisateurs d'autres services d'accéder à une autre source que leur service. Vu qu'ici, nous sommes dans un exemple pas utilité à verrouiller les onglets.

Sur cette exemple, vous allez remarquer que sur l'onglet S.Technique des lignes sont soulignés en Rouge (cela veut dire qu'elle font être supprimé sur ce fichier et automatiquement supprimé sur l'onglet S.Comptable). A l'époque, ces lignes étaient valides mais il a été décidé plus tard (on va dire au bout de 5 mois) de ne plus faire ce type de travaux pour faute de budget par exemple.

L'objectif est de permettre à la Comptabilité de récupérer mensuellement toutes les nouvelles données remplis et celles qui ont été supprimé, sans que leur travail fait en amont pour chaques lignes étudiés soient supprimées.

Merci à vous

Bonjour

Pour être sûr de bien comprendre :

* les lignes rouges doivent être reportées sur la feuille "S.Comptable"

* les lignes rouges sont celles où la colonne "N°Fact" est vide

* Les lignes rouges doivent être supprimées sur la feuille "S.Tech"

Merci de me confirmer ou infirmer.

Bye !

Tout d'abord merci de ton retour Gmb et de ton aide. Pour répondre à tes questions, toutes les informations contenus dans le S.Technique sont reporté sur l'onglet S.Comptabilité, sauf que dans ce dernier onglet certaines colonnes ne sont pas repris car cela n'est pas utile à ce service pour leurs activités.

Afin d'être plus claire dans mes explications (ayant du mal à m'exprimer), je continue ici-bas mon exemple :

Sur le fichier joint tout à l'heure, vous avez le miroir des informations obtenues par le S.Comptabilité grâce au S.Technique à un instant T (on va dire avril-17).

Après plusieurs semaines, le S.Technique décide de supprimer les lignes rouges dans leur onglet de travail. Toutes les nouvelles données remplis (dont la suppression) seront reportés dans l'onglet S.Comptabilité. Vu que maintenant des lignes ont été supprimées, celles-ci disparaîtront de cet onglet et les données pouvant être remplis par ce service aussi. Cela n'a aucune incidence puisque ces données n'ont plus de valeur à l'heure actuel, mais pour toutes les autres données les informations complémentaires remplis par le S.Comptable (colonne S à V) ne devront pas être impacté par les suppressions de lignes.

Je vous rejoins le modèle Excel modifié.

Merci

Bonjour

Un essai à tester.

Bye !

Bonjour,

Génial la formule. Mais est-ce seulement possible lorsque nous cliquons sur le bouton lié a l'onglet S.Comptable pour importer les informations de l'onglet S.Technique de garder les données remplis dans les colonnes S à xxxxx qui correspondent à l'analyse du produit?

Merci.

BLANC a écrit :

Mais est-ce seulement possible lorsque nous cliquons sur le bouton lié a l'onglet S.Comptable pour importer les informations de l'onglet S.Technique de garder les données remplis dans les colonnes S à xxxxx

Pourquoi cette question ? Ne restent-elles pas sur la feuille S.Comptable ?

Bye !

Si c'est tout bonnement géniale, même si j'avoue que je ne comprends pas comment comprendre la macro écrite

Mais je me demandais s'il était possible dans le cas de figure, où nous supprimons des champs dans l'onglet S.Technique d'avoir la possibilité de garder les informations écrites à partir de la colonne S dans l'onglet S.Comptable qui sont des données non extrait du 1er onglet mais une analyse plus approfondis du service comptable.

En effet, ces données sont analysés selon la ligne extrait du S.Technique et donc varieront selon les lignes extraites futures.

Merci encore à toi, car tu m'as bien aidé.

Désolé mais je ne vois pas.

Bye !

Tu m'as vraiment bien aidé sur ce coup-là, et cela je ne remercierais jamais assez.

J'aimerais comprendre la formule VBA que tu as écrite. Par exemple, comment insérer de nouvelles colonnes provenant de l'onglet S.Technique?

Par-rapport à ma dernière question d'hier, je n'ai peut être pas été assez claire (attention grâce à ton aide je ferais autrement si jamais mes explications sont peu claires où que cela n'est pas possible).

Comme tu as pu le constater, nous importons des données du S.Technique au S.Comptable (certains champs). Ces données sont rapportées mensuellement par le S.Comptable. Lorsqu'elle arrive sur ce fichier, ces données sont ensuite analysées par le service à partir de la colonne S jusqu'à Z si besoin. Cette analyse se base sur la ligne étudiée.

Hors lorsqu'on supprime des lignes dans le S.Technique et qu'on réimporte la base dans S.Comptable, nous perdons l'analyse des lignes étudiées à partir de la colonne S ; cela est normal mais le fait est que la Comptabilité doit tout le temps recommencer son travail. J'aimerais donc savoir s'il était possible de laisser les études effectuées à partir de la colonne S à Z?

Cdt,

encor merci à toi

Bonsoir,

Merci en tout cas de ton aide sur ce sujet. J'avais cru avoir répondu ce matin, mais mon post n'a pas été envoyé.

Peut-tu m'expliquer la formule VBA que tu as créer? En effet, j'ai essayé de la comprendre mais pas avec bps de succés. J'essaye d'ajouter des colonnes pour reporter sur l'onglet et cela rate.

Je continue à chercher. Mais encore à mille merci à toi.

Bonjour

J'avoue ne toujours pas comprendre ta demantde.

Si tu ajoutes des colonnes dans la feuille STech, il faudra aussi ajouter une colonne correspondante dans la feuille S.Comptable et adapter la macro en conséquence.

Peut-tu m'expliquer la formule VBA que tu as créer?

Je peux essayer.

Il s'agit d'une macro qui commence par copier toutes les données de la feuilles la feuille STech dont les colonnes correspondent à celles des colonnes que la feuille S.comptable et à les coller sur cette dernière feuille, à la suite.

Puis on élimine dans le tableau obtenu les lignes qui sont identiques pour les colonnes A à R, en commençant par le bas du tableau.

C'est tout.

Bye !

Bonjour,

J'ai beau essayer de comprendre la formule je crois n'avoir pas pu la gérer.

Je te rejoins le nouveau modèle afin de pouvoir apprendre comment tu as fait par-rapport à l'ancienne fichier.

J'ai ajouté des colonnes à la fois sur le fichier VBA et les onglets excels, j'ai changé la source de données et malgré tout il ne récupérè pas les nouvelles données.

La modification de ton code :

Option Explicit

Dim ft As Worksheet, fc As Worksheet, tabloT, tabloC(), colT, colC, dico As Object

Dim i&, j&, lgn&, v$

Sub ImporterDeSceTech()

Set ft = Sheets("S.Tech")

Set fc = Sheets("S.Comptable")

Set dico = CreateObject("Scripting.Dictionary")

colT = Array(1, 2, 3, 4, 5, 6, 11, 12, 13, 15, 16, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)

colC = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22)

tabloT = ft.Range("A2:Z" & ft.Range("A" & Rows.Count).End(xlUp).Row)

ReDim tabloC(1 To UBound(tabloT, 1), 1 To 22)

For i = 1 To UBound(tabloT, 1)

For j = 0 To 17

tabloC(i, colC(j)) = tabloT(i, colT(j))

Next j

Next i

lgn = fc.Range("A" & Rows.Count).End(xlUp)(2).Row

fc.Range("A" & lgn).Resize(UBound(tabloC, 1), 22) = tabloC

Erase tabloC

tabloC = fc.Range("A2:V" & fc.Range("A" & Rows.Count).End(xlUp).Row)

For i = 1 To UBound(tabloC, 1)

v = ""

For j = 1 To 22

v = v & tabloC(i, j)

Next j

dico(v) = dico(v) + 1

Next i

For i = UBound(tabloC, 1) To 1 Step -1

v = ""

For j = 1 To 22

v = v & tabloC(i, j)

Next j

If Not dico(v) = 1 Then

fc.Rows(i & ":" & i).Delete

dico(v) = dico(v) - 1

End If

Next i

End Sub

Rechercher des sujets similaires à "importer donnees onglet"