Nommer onglet avec une variable

Résolu
Bonjour, Je débute en programmation vba et j'ai un problème.
Je vous l'explique avec un exemple de programme

Dim principal As Workbook
Dim test1, test2 As Worksheets

Set principal = ThisWorkbook
Set test1 = Sheets("test1")

principal.test1.range("A1") 'ne fonctionne pas alors que
principal.Sheets("test1").range("A1") 'fonctionne


Je vais pas mal changer d'onglet dans ma macro du coup j'aimerai pouvoir utiliser une variable test1 au lieu d'avoir à écrire sheets("test1") à chaque fois

J'imagine que c'est assez basique mais je ne sais pas comment ça marche donc si quelqu'un peut me filer un ptit conseil ça serait super sympa. Merci d'avance

2 réponses

  1. Bonjour arigold

    Ce sera plutôt :
    Set t1 = "test1"
    principal.Sheets(t1).range("A1")


    Cdlmnt
    Via
    1. Ah mince, il n'est pas possible d'appeler un onglet par une variable?
      c'est histoire d'éviter de réécrire sheets("...") à chaque fois.
      En tout cas merci pour ton aide Via
    2. @arigoldBen si tu l'appelles bien par une variable
      Au départ tu déclares par exemple 2 noms de feuilles t1="test1" et t2="test2"

      Apres dans ta macro soit tu as Sheets(t1).Range("A1") qui fait référence à la feuille test1 ou sheets(t2).range("A1") qui fait reference à la feuille test2

      ou bien tu as une instruction avec comme variable par exemple nomf et tu indiques précédement (par exemple en fonction d'une condition) quelle valeur doit prendre nomf

      ex
      If reponse=1 then nomf=t1 else if reponse=2 then nomf=t2
      sheets(nomf).range("A1") etc

      Mais tu peux aussi faire référence aux feuilles non pas d'après leurs noms mais d'après leur ordre dans le classeur
      ainsi sheets(3).select selectionne la 3eme feuille du classeur

      Cdlmnt
      Via
    3. @via55Merci pour tes explications Via. Je vais tester ta méthode et celle de JvDo pour voir laquelle est la plus rapide.
  2. Bonjour à tous,

    essaye ce code :
    Sub toto()
        Dim principal As Workbook
        Dim test1 As Worksheet, test2 As Worksheet
        
        Set principal = ThisWorkbook
        Set test1 = principal.Sheets("test1")
        Set test2 = principal.Sheets("test2")
        
        test2.Activate
        [A1].ClearContents
        [D8].Select
        
        a = principal.Sheets("test1").Range("A1") 'fonctionne
        With test1
            b = .Range("A1")
            .Range("A1").Copy Destination:=test2.Range("A1")
        End With
        
        test1.Activate
        Range("A1").Select
    End Sub

    en résumé : worksheets sans le "s" à la fin, déclarer test1 au même titre que test2, utiliser With...End With et le Activate pour que ça fonctionne.

    cordialement
    1. super merci c'est ce que je cherchais

Discussions similaires

alternative à winzip ?

4 réponses