Nommer onglet avec une variable

Résolu/Fermé
arigold - Modifié par arigold le 19/05/2016 à 17:09
 arigold - 20 mai 2016 à 08:51
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

via55 Messages postés 14401 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 17 avril 2024 2 701
19 mai 2016 à 17:21
Bonjour arigold

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


Cdlmnt
Via
0
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
via55 Messages postés 14401 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 17 avril 2024 2 701 > arigold
19 mai 2016 à 18:09
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
arigold > via55 Messages postés 14401 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 17 avril 2024
20 mai 2016 à 08:51
Merci pour tes explications Via. Je vais tester ta méthode et celle de JvDo pour voir laquelle est la plus rapide.
0
JvDo Messages postés 1978 Date d'inscription mercredi 27 juillet 2005 Statut Membre Dernière intervention 28 septembre 2020 856
19 mai 2016 à 18:34
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
super merci c'est ce que je cherchais
0