Macro qui ouvre des liens Hypertexte dynamique
Salut à tous,
Je travaille avec Excel 2016,
J'ai 7 liens hypertexte dont le chemin d'accès est dynamique. Pour chacun des liens ( qui ouvre un autre fichier Excel), J' ouvre, copie et colle les valeurs dans 7 onglets différents du même fichier (fichier ou se trouve l'onglet avec les liens hypertexte). chacun des liens est ensuite refermé.
Je cherche à créer une macro associée à un bouton qui fasse cette procédure.
Je suis débutante en VBA et ce que j'ai trouvé sur le forum ne fonctionne pas dans mon cas.
Auriez-vous une idée ?
Merci d'avance.
zumsl
Bonjour zumsl et
Sur le principe on comprend à peu près ce que tu veux faire ... sauf que:
- on ne sait pas sous quelle forme se présentent les "liens"
- on ne sait pas quelle est l'étendue des plages à copier
- on ne sait pas où il faut les coller: une zone "remise à blanc" à chaque copie, sous les données existantes, ...
Une version allégée et sans données confidentielles de ton classeur de destination, ainsi qu'un (au moins) des classeurs "source" aideraient à "visualiser" !
Tout d'abord merci beaucoup d'avoir répondu si vite !
Désolée pour le manque de précisions.
Les liens (onglet "Liens") sont dynamiques et fonctions de la date saisie sur l'onglet "PENDENZEN" en C3
Les tables d'origine sont sous le format de tableau.
Elle se trouve sous un répertoire et leur nom est fonction de la date.
Onglet "Pendenzen"
J'ai fait une macro qui vide les tables.
Je cherche à faire une macro liée un bouton, qui sélectionne chacun des liens dynamiques.
ouvre, fait un copier / coller valeur dans les onglets concernés du fichier ou se trouve les liens
Je ferme les tables ouvertes et revient sur l'onglet "Pendenzen"
Tu trouveras une version allégée du fichier.
J'espère que cela suffira.
Merci d'avance.
zumsl
Re-bonjour,
Il serait plus simple de faire en sorte que l'ordre des feuilles dans le classeur corresponde à l'ordre dans lequel les liens sont inscrits.
Si le lecteur O:
correspond à un lecteur réseau, il serait prudent d'utiliser le chemin UNC (sous la forme:\\nomDuServeur\répertoire\...)
Tu ne le précises pas, j'ai considéré que les données sont chaque fois dans la première feuille de chaque classeur.
De même, je suis parti du principe que les données y constituaient une (vraie) liste (pas de lignes, ni de colonnes vides), que la liste commençait toujours en A1 et que toutes les lignes et colonnes sont à copier
... Ça fait un paquet d'hypothèses
Dans un module standard, essaie:
Sub importer()
Application.ScreenUpdating = False
With Sheets("Liens")
For lig = 1 To 7
Set cl = Workbooks.Open(Filename:=.Cells(lig, 1).Text, ReadOnly:=True)
cl.Sheets(1).[A1].CurrentRegion.Copy ThisWorkbook.Sheets(lig + 2).[A1]
cl.Close
Next lig
End With
Application.ScreenUpdating = False
End Sub
La première feuille concernée, dans ton classeur Pendenzen doit être en 3e position (suivant l'ordre des liens, des lignes 1 à 7)
Fais des tests sur une copie de ton classeur, si celui-ci contient des données auxquelles tu tiens
Salut
Il s'agit bien d'un serveur et les données sont chaque fois dans la première feuille de chaque classeur.
C'est au format tableau. Il n'y a pas de ligne vide mais des colonnes peuvent être vide.
Comme c'est au format tableau peut être peut-on sélectionner le tableau ??
Les données commence bien en A1
toutes les lignes et colonnes sont à copier.
J'a fait tourner la procédure.
Le premier tableau est bien copié/collé mais le second se colle sur l'onglet Liens.
Il n'est pas non plus copié en valeur.
Merci encore car c'est déjà très bien.
zumsl
Désolé U. Milité !!
J'ai oublié de préciser que j'avais correctement ordonné les onglets.
J'ai changé Copy ThisWorkbook.Sheets(lig +2).[A1]
par Copy ThisWorkbook.Sheets(lig +4).[A1] et ça marche !!!!!
par contre est t'il possible de coller en valeur
Bonjour,
J'ai changé Copy ThisWorkbook.Sheets(lig +2).[A1] par Copy ThisWorkbook.Sheets(lig +4).[A1] et ça marche !!!!!
Tu es certaine que tu avais tenu compte de:
La première feuille concernée, dans ton classeur Pendenzen doit être en 3e position (suivant l'ordre des liens, des lignes 1 à 7)
Mais si tu as adapté et que ça fonctionne, c'est parfait !
Pour ton collage spécial - valeurs, le nombre et les titres des colonnes de tes 7 fichiers à importer variera, d'une fois à l'autre ? Si non, ça veut dire que dans ta Sub Vider_Tables on n'effacerait qu'à partir de la ligne 2 et qu'on collerait ensuite les données des tableaux (sans leurs en-têtes) ... Possible ou pas ?
L'onglet Lien est le 3ème du classeur et les autres suivent
Effectivement, les en-têtes des colonnes ne change pas. On pourrait coller à partir de la ligne 2.
Merci beaucoup !!
Salut,
En fait, ce qui est important c'est la position des feuilles dans lesquelles tu vas importer les données.L'onglet Lien est le 3ème du classeur et les autres suivent
Si ça fonctionne quand tu écris: ThisWorkbook.Sheets(lig +4), c'est que la première de tes 7 feuilles est en 5e position (ordre des onglets) ... Or, là tu sembles dire que la première serait en 4e position (après la 3e qui serait la feuille Liens)
Pour ta Sub Vider_Tables, je propose de la simplifier comme suit:
Sub Vider_Tables()
'
' Vider_Tables Macro
For f = 4 To 10
Sheets(f).[A1].CurrentRegion.Offset(1, 0).ClearContents
Next f
End Sub
Pour le collage spécial, essaie:
Sub importer()
Application.ScreenUpdating = False
For lig = 1 To 7
Set cl = Workbooks.Open(Filename:=Sheets("Liens").Cells(lig, 1).Text, ReadOnly:=True)
With cl.Sheets(1).ListObjects(1)
.DataBodyRange.Copy
ThisWorkbook.Sheets(lig + 3).[A2].Resize(.ListRows.Count, .ListColumns.Count).PasteSpecial Paste:=xlPasteValues
End With
Application.CutCopyMode = False
cl.Close
Next lig
Application.ScreenUpdating = False
End Sub
Attention: une fois de plus, vérifie la position des onglets, ici, j'efface le contenu des feuilles de la 4e à la 10e et je les "remplis" aussi de la 4e (lig + 3) à la 10e.
On peut aussi travailler avec une liste des noms de feuilles à traiter (mais la position me semblait plus simple, si elles se suivent)
Ca marche !!!!!!!!!
Cela dit, j'ai dû mettre pour vider les tables
For f = 5 To 11
et pour importer les tables
ThisWorkbook.Sheets(lig + 4).[A2].Resize(.ListRows.Count, .ListColumns.Count).PasteSpecial Paste:=xlPasteValues
J'ai 3 feuilles masquées. Ca pourrait être une explication ??
T'es vraiment chouette !! cela faisait un moment que j'essayais de trouver une solution
Merci encore et bonne journée
zumsl
Re,
J'ai 3 feuilles masquées. Ca pourrait être une explication ??
Ah oui, bien sûr: des feuilles masquées conservent leur position, même si leur onglet n'est plus visible parmi les autres !
Pour t'en convaincre, exécute le code suivant:
Sub test()
For f = 1 To Sheets.Count
liste = liste & Sheets(f).Name & vbCr
Next f
MsgBox "Liste des feuilles: " & vbCr & vbCr & liste
End Sub
Tes feuilles masquées devraient figurer dans la liste.
Bonne continuation,
PS: pense à ...
Effectivement l'une des 3 feuilles était tout au début et les 2 autres à la fin
Génial ce que tu es capable de faire !!!
et merci encore de ton aide