Selection onglet et Variable pour nom xls

Résolu/Fermé
Messages postés
87
Date d'inscription
lundi 21 juillet 2014
Statut
Membre
Dernière intervention
14 octobre 2015
-
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
-
Bonjour,
Je dois automatisé un système qui prend des valeur sur une feuille , les valeurs sont toujours au même endroit et doivent aller toujours a la même place sur une feuille d'analyse.
Ayant commencer le VBA excel depuis peu je suis un peu perdu.

Cells(a, 18).Select
ActiveCell.FormulaR1C1 = "='[Nom.xls]SS2'!R29C17"

( a est une variable déjà défini dans mon code )


J'aimerai changer SS2 par sheet(1) ou un autre truc ce qui me permettrai de se baladé entre les onglet en fonction de ma boucle.

J'aimerai également savoir si c'est possible d'obtenir le lien du excel exemple E:\Dossier3\Dossier2\Nom.Xls
Et juste extraire le Nom.xls une fois que la personne a rentrer le chemin complet ( en partant du fait que sa ne sera jamais le même chemin ni le même nombre de caractère pour le nom du classeur)


Je suis désolé de ne pas pouvoir donner plus d'information mais toute mes données sont confidentiel , je vous ai donner un exemple d'utilisation , j'espère avoir donner asser d'info pour trouver une solution

Cordialement

2 réponses

Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 678
Bonjour,

Voici un code qui devrait répondre à tes deux questions :

Sub test()
Dim Feuille As Variant

For Each Feuille In Array("Feuil1", "Feuil2", "Feuil3")
    Debug.Print "='[Nom.xls]" & Feuille & "'!R29C17"
Next

Dim NomFic As String
NomFic = Split("E:\Dossier3\Dossier2\Nom.Xls", "\")(UBound(Split("E:\Dossier3\Dossier2\Nom.Xls", "\")))
MsgBox NomFic
End Sub

Messages postés
87
Date d'inscription
lundi 21 juillet 2014
Statut
Membre
Dernière intervention
14 octobre 2015

Bonjour ,
Merci pour cette réponse rapide .
Je voudrai quelque information sur la boucle car le nombre de feuil n'est pas défini ( j'avoue n'avoir jamais vu de boucle for each mise a par en web avec les tableaux ) j'ai fais des boucle basique jusqu'à maintenant for et DO
J'ai exécuté le code , ça me fait toujours 1 seule ligne mais cette fois sans les valeurs , admettons la j'ai 5 feuille différente et je dois recopier 5 valeur au même endroit de ces 5 feuille différente sur un autre classeur. donc j'ai fais ceci


Sub Macro4()
Dim a As Integer
Dim Feuille As Variant

a = 43

For Each Feuille In Array("Feuil1", "Feuil2", "Feuil3")


Cells(a, 18).Select
Debug.Print "='[Nom.xls]" & Feuille & "'!R29C17"
Cells(a, 19).Select
Debug.Print "='[Nom.xls]" & Feuille & "'!R38C11"
Cells(a, 20).Select
Debug.Print "='[Nom.xls]" & Feuille & "'!R67C14"
Cells(a, 21).Select
Debug.Print "='[Nom.xls]" & Feuille & "'!R67C15"
Cells(a, 23).Select
Debug.Print "='[Nom.xls]" & Feuille & "'!R17C17"

Next
End Sub

Je n'ai pas encore mis la fonction pour définir Nom.Xls , j'utilise le vrai nom d'un classeur mais pour éviter les problème je l'ai modifier , j'automatiserai avec ton code une fois que la parti fonctionnera

En tout cas je te remercie infiniment

Cordialement
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 678
Debug.Print
écrit ce qui le suit dans la fenêtre d'exécution...
Remplace donc par
ActiveCell.FormulaR1C1 =

Ensuite, For each n'était qu'un exemple. A toi à adapter avec ta propre boucle...
Messages postés
87
Date d'inscription
lundi 21 juillet 2014
Statut
Membre
Dernière intervention
14 octobre 2015

Cela serai possible d'utiliser

For i = 1 To Sheets.Count

Cells(a, 18).Select
ActiveCell.FormulaR1C1 = "='[Nom.xls]" & Feuille & "'!R29C17"

next i

Et remplacer feuille par quelque chose qui permettrai de suivre via par exemple un sheet(i)

Je suis vrai désoler j'ai toujours fais du VBA access objet , d'un seul coup passer sur excel ça change et j'ai perdu mes petit repère
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 678
Bien sur que oui.

Supposons que les noms de tes feuilles soient "Sheet1", "Sheet2", "Sheet3" etc... Tu peux écrire comme ceci :

For i = 1 To Sheets.Count

    Cells(a, 18).Select
    ActiveCell.FormulaR1C1 = "='[Nom.xls]Sheet" & i & "'!R29C17"

next i


*L'important dans ce code est de différencier le nom en "dur" Sheet (qui de ce fait se retrouve entre les guillemets) et la partie variable de ce nom (qui doit être sortie des guillemets).
Messages postés
87
Date d'inscription
lundi 21 juillet 2014
Statut
Membre
Dernière intervention
14 octobre 2015

En faite mon gros problème c'est ça feuil1(SS2) , le feuil1 reste et le SS2 est totalement variable , du coup je voulais me balader dans les feuilles avec un sheet() qui aurai reconnu peu importe le nom de la feuille ( celle qui est entre () )
Messages postés
12257
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
3 septembre 2021
2 678
Boudiou, on va y arriver...

Dim Feuille As String
For i = 1 To Sheets.Count
    Feuille = Sheets(i).Name
    Cells(a, 18).FormulaR1C1 = "='[Nom.xls]" & Feuille & "'!R29C17"
next i


On en a profité également pour virer la sélection de cellule inutile...