seb59bes
Messages postés4Date d'inscriptionvendredi 25 septembre 2009StatutMembreDernière intervention 9 octobre 2009
-
8 oct. 2009 à 16:12
seb59bes
Messages postés4Date d'inscriptionvendredi 25 septembre 2009StatutMembreDernière intervention 9 octobre 2009
-
9 oct. 2009 à 14:22
Bonjour tout le monde
Je suis grand débutant en VBa, au file de mes recherches sur la toile j'ai réalisé des codes sans prétentions, avec le Visual Basic, qui me permettent de gagner un peu de temps sur Excel dans le cadre de mon travail.
Je suis coincé sur une macro et je sollicite votre aide .
Descriptif:
Un bouton doit générer une nouvelle feuille dans mon classeur en lui donnant le nom d'une valeur contenue dans une cellule. Je dois créer une condition qui permette de vérifier si la feuille n'existe pas déjà. J'ai trouvé au cours de mes recherches des indices qui m'ont permis d'élaborer ce code test:
Sub BoutonGénérateur()
Dim WS As Worksheet
For Each WS In ActiveWorkbook.Worksheets
' Permet de faire la recherche sur toutes les feuilles du classeur
If WS.Name = "Valeur de la celulle" Then
' La condition, je ne sais par quoi remplacer "Valeur de la celulle = coordonnées de la celulle qui donne le nom de la feuille"
MsgBox "Ce réferentiel existe déjà"
' Message envoyer si la feuille existe
Else
MsgBox "Ce réferentiel n'existe pas"
' Message si la condition n'est pas respectée, ce message sera remplacé par le code de création d'un nouvel onglet dont le nom est tiré de la valeur de la celulle précédemment cité
Exit For
End If
Next
End Sub
If WS.Name = "Valeur de la celulle" Then
Dans cette partie, ne sachant pas comment remplacer "Valeur de la celulle" j'ai réaliser le test avec un nom fixe d'onglet, la macro n'entre pas en débogage seulement elle ne réalise pas ce que j'attends, j'obtiens à tous les coups le message "Ce référentiel n'existe pas" meme si la feuille existe...
J'espère avoir été clair, sinon n'hésitez pas Vous l'aurez sans doute compris j'avance par tatonnement et vous demandes d'etre indulgeant Merci
bigfish_le vrai
Messages postés1835Date d'inscriptionvendredi 13 mai 2005StatutMembreDernière intervention20 novembre 201315 8 oct. 2009 à 16:49
Salut,
c'est pas du VB.net ... ben non puisque c'est de l'excel
Bref tu n'es pas dans le bon theme ... donc la prochaine fois fait gaffe quand même!
Pour récupérer le contenu d'une cellule on fait comme ceci:
Range("A1").Value (cas générale)
Range("A1").Text
ActiveSheet.Cells(1,1).Value
etc.
Le moyen le plus rapide pour vérifier si une feuille existe est ,plutot que de boucler sur toutes les feuilles, de tenter de selectionner la feuille, Si elle existe pas de probleme on continu par contre si elle n'existe pas ben... plantage .
Ne nous affolons pas il suffit en fait d'anticiper ce plantage et de le gerer.
Un bon exemple vaut tout aussi bien qu'un long discours... si si :
On Error Resume Next 'ici on anticipe
Worksheets(Range("A1").Value).select 'ici on tente la selection
If Not Err=0 then Msgbox "La feuille " & Range("A1").Value & " n'existe pas ! ", VbExclamation ' ici on gere
A savoir que Err renvois le numeros de l'erreur si erreur il y a ou 0 si pas d'erreur
seb59bes
Messages postés4Date d'inscriptionvendredi 25 septembre 2009StatutMembreDernière intervention 9 octobre 2009 8 oct. 2009 à 19:08
Re
Désolé pour le mauvais thème
Merci de ton aide, alors je viens de tester ton code qui me donne exactement le même résultat que le miens, c'est à dire que le message apparait même si la feuille existe. Y-a t'il un morceau de code à ajouter?
Pour rappel, le but de cette macro est de créer une feuille à condition qu'elle n'éxite pas, une cellule (A4) sert de référence pour nommer la feuille à créer.
Clique sur le bouton:
Sub Macro
Vérifie qu'aucune feuille ne porte le nom contenue dans la celulle A4
- Si la feuille existe -> message "la feuille (valeur A4) existe ! (clique "ok" et rien ne se fait)
- Si elle n'éxiste pas -> crétion d'une nouvelle feuille (nom = valeur A4)
End Sub
userrrqi115
Messages postés181Date d'inscriptionmardi 18 novembre 2008StatutMembreDernière intervention 4 février 2011 9 oct. 2009 à 11:58
Re,
je crois que :"Worksheets(Range"A1").Value).select"
génère la selection d'une feuille via son n° d'index.
Peut être que cela fonctionnerait :
Worksheets("" & Range("A1").Value & "").select
BR
USERRRQI115
Simple user
Great brain
seb59bes
Messages postés4Date d'inscriptionvendredi 25 septembre 2009StatutMembreDernière intervention 9 octobre 2009 9 oct. 2009 à 14:22
Re
Great brain indeed !!
Tu as trouvé c'était bien le n° d'index qui posait souci, merci à vous 2 pour votre aide
Voici donc le code entier si par hasard ca interesse quelqu'un:
Sub Test()
On Error Resume Next
Worksheets("" & Range("A4").Value & "").Select
If Not Err = 0 Then
Sheets("Calendrier").Select
Sheets("Calendrier").Copy After:=Sheets(1)
ActiveSheet.Name = Range("A4")
End If
End Sub