Selection onglet et Variable pour nom xls

Résolu
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

  1. Modérateur
    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

    1. 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
      1. Modérateur
        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...
      2. 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
      3. Modérateur
        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).
      4. 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 () )
      5. Modérateur
        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...