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 :
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,
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.
Pourquoi cette question ? Ne restent-elles pas sur la feuille S.Comptable ?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
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.
Je peux essayer.Peut-tu m'expliquer la formule VBA que tu as créer?
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