Nommer onglet avec une variable

Résolu
arigold -  
 arigold -
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. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    Bonjour arigold

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


    Cdlmnt
    Via
    0
    1. arigold
       
      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
      0
      1. via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention   2 759 > arigold
         
        Ben 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
        0
      2. arigold > via55 Messages postés 14391 Date d'inscription   Statut Membre Dernière intervention  
         
        Merci pour tes explications Via. Je vais tester ta méthode et celle de JvDo pour voir laquelle est la plus rapide.
        0
  2. JvDo Messages postés 1924 Date d'inscription   Statut Membre Dernière intervention   859
     
    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
    0
    1. arigold
       
      super merci c'est ce que je cherchais
      0