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,

L'onglet Lien est le 3ème du classeur et les autres suivent

En fait, ce qui est important c'est la position des feuilles dans lesquelles tu vas importer les données.

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

Rechercher des sujets similaires à "macro qui ouvre liens hypertexte dynamique"