Mettre en variable une feuille pour y revenir

andrekn13

XLDnaute Occasionnel
BONJOUR
Je ne sais pas si mon titre correspond exactement à ma réalité :
je fait une macro "transfert" qui me prend une feuille x, qui peut être à n'importe où, dans un classeur "1" , vérifie certaines conditions si c'est possible, et ensuite la met en 6ème position de mon classeur "2", puis la transforme;
Mon problème se situ entre ces 2 possibilités :
j'ai un cas contradictoire :
au moment où la feuille est copiée je peux être en conflit avec le même N° d'onglet, auquel cas je mets avant:
ActiveSheet.Copy After:=Workbooks("BASE FACT.xlsm").Sheets("FACT 2")
'si pas de confli dans N° de facture, renomme le devis,sinon passe à IF
On Error Resume Next
ActiveSheet.Name = Format(Range("Num_Fact"), "000")

If Sheets(7).Name = Format(Range("Num_Fact"), "000") Then

MsgBox "ERREUR , VOTRE PRECEDENTE FACTURE N' A PAS ETE VALIDEE" & vbCr & " VOUS DEVEZ D'ABORD VALIDEZ CETTE FACTURE OU L' ANNULER " & vbCr & _
" OU VEUILLEZ VERIFIER VOTRE COMPTEUR FACTURE " & vbCr & _
" CETTE FEUILLE VA ETRE SUPPRIMEE ! "
ActiveSheet.Delete
'comme le transfert a été annulé,il faut réactiver la palque "transfert",et peut provenir de n'importe quel feuille DEVIS ActiveSheet.Shapes.Range(Array("plaque devis transfert")).Select
Selection.OnAction = ""
Exit Sub
End If

et c'est ici mon problème, COMMMENT REVENIR A MA FEUILLE EN QUESTION
Peut-on la définir avant en "variable" pour lui dire : " sur cette feuille , réactive la macro de cet objet

Merci de votre aide
 

andrekn13

XLDnaute Occasionnel
Re : Mettre en variable une feuille pour y revenir

Bonjour
j'ai parcouru ta page, cela ne me répond pas : me renvoie que ma syntaxe est pas bonne

Dim a As Sheets
Sub a()
Dim WkA As Workbook, WkB As Workbook
Set WkA = Workbooks("DEPART.xlsx"): Set WkB = Workbooks("ARRIVE.xlsx")

WkA.ActiveSheet.Select
a = WkA.ActiveSheets
a Copy After:=WkB.Sheets(6)
'Sheets("1").Name = "1"
End Sub
help !!
 
Dernière édition:

Yaloo

XLDnaute Barbatruc
Re : Mettre en variable une feuille pour y revenir

Bonjour André,

Pas tout lu, mais ceci devrait t'aider :
VB:
'Déclaration de la variable
Dim sh As Worksheet
'Attribution de la feuille active à la variable
Set sh = ActiveSheet
'Blabla.... ton code qui va bien
'Activation de la feuille correspondant à la variable
sh.Select

A+

Martial
 

andrekn13

XLDnaute Occasionnel
Re : Mettre en variable une feuille pour y revenir

ça alors
je ne m'attendais pas à te voir !!!
Je voulais te faire la surprise de t'envoyer mon fichier fini, car depuis ta réponse géniale , je voulais , pour le final te faire la "surprise" et avec mes mille remerciements
C'est loupé !
je vois avec ce que tu viens de me donner comme info et si j'y arrive pas je t'envoie, en privé mon fichier !
très cordialement
 

andrekn13

XLDnaute Occasionnel
Re : Mettre en variable une feuille pour y revenir

car même le " activesheets" il aime pas
Sub a()
Dim WkA As Workbook, WkB As Workbook
Set WkA = Workbooks("DEPART.xlsx"): Set WkB = Workbooks("ARRIVE.xlsx")
Dim mafeuille
'WkA.ActiveSheets.Select
mafeuille = ActiveSheets
'mafeuille.Copy After:=WkB.Sheets(6)
ActiveSheets.Copy After:=Workbooks("ARRIVE.xlsx").Sheets(6)
 

andrekn13

XLDnaute Occasionnel
Re : Mettre en variable une feuille pour y revenir

RE
oui jlavais vu mais impossible
je pense que quand on quitte un classeur, le activesheet n'a plus d'effet donc la variable perd cette constante
 

Pièces jointes

  • DEPART.xlsm
    16.9 KB · Affichages: 23
  • ARRIVEE.xlsx
    11.5 KB · Affichages: 22
  • DEPART.xlsm
    16.9 KB · Affichages: 26
  • DEPART.xlsm
    16.9 KB · Affichages: 30

Efgé

XLDnaute Barbatruc
Re : Mettre en variable une feuille pour y revenir

Bonjour à tous,
Problème de compréhension de l'objet WorkSheet
SI on fait
VB:
Set mafeuille = WkA.ActiveSheet
On dis que mafeuille est l'objet Feuille active du classeur Wka
Quand on fait
VB:
mafeuille.Copy After:=Workbooks("arrivee[1].xlsx").Sheets(6)
On copie bien la feuille active du classeur Wka, MAIS, juste après la copie, la feuille active n'est plus mafeuille puisqu'on n'est plus dans le classeur Wka.
Donc:
VB:
Sub A_2()
Dim mafeuille As Worksheet
Dim WkA As Workbook, WkB As Workbook
Set WkA = Workbooks("DEPART.xlsm"): Set WkB = Workbooks("arrivee.xlsx")
Set mafeuille = WkA.ActiveSheet

mafeuille.Shapes("Rectangle 1").OnAction = ""
mafeuille.Copy After:=WkB.Sheets(6)

ActiveSheet.Shapes("Rectangle 1").OnAction = "A"
WkB.Sheets(6).Delete
End Sub

Autant se servir des variables déclarées....

Cordialement
 

andrekn13

XLDnaute Occasionnel
Re : Mettre en variable une feuille pour y revenir

Merci beaucoup de m' avoir donc très bien répondu
je viens de comparer ce que je ré-essayais et franchement je crois que je bug trop à cette compréhension:
car entre :
mafeuille.Copy After:=WkB.Sheets(6)

ActiveSheet.Shapes("Rectangle 1").OnAction = "A"
j' avais compris qu'il change de classeur, donc "perd" le "activesheet, puisqu'il ne l'est plus; donc après il faut lui ré-adressé où se trouve le activesheet

parceque, si j'ai bien compris ton plan, y a même plus besoin de mettre le activesheet en variable,puisqu'il ne s'est jamais déplacé !
C'est bien cela ?
Pourtant, quand il y a la confirmation de suppression de la feuille, il s'est bien déplacé et a perdu sin "repère"

Merci de bien vouloir m' éclairer encore une fois, je galère trop avec cette notion
 

Efgé

XLDnaute Barbatruc
Re : Mettre en variable une feuille pour y revenir

Re
Tout dépend de ce que tu veux faire.
Si il faut "remettre" A au rectangle présent sur le classeur de départ, alors tu peux utiliser
VB:
mafeuille.Shapes("Rectangle 1").OnAction = "A"
si tu utilise
VB:
ActiveSheet.Shapes("Rectangle 1").OnAction = "A"
C'est le rectangle de la feuille nouvellement copiée dans le classeur de destination que tu manipule.

Cordialement
 

andrekn13

XLDnaute Occasionnel
Re : Mettre en variable une feuille pour y revenir

le temps que j'assimile ce que tu viens de me répondre (je suis lent!)
j'étais en train de vouloir te poser la question suivante et finalement elle se renforce avec ce que tu viens de m'envoyer, et peut être c'est là , le point que je ne saisi pas :
j'avais essayé : ActiveSheet.Copy After:=WkB.Sheets(6) et rien à faire , ça bug
et pourtant :
ActiveSheet.Shapes("Rectangle 1").OnAction = "A"
le activesheet est reconnu, je nage, bon, je refechi entre temps à ta réponse
cordialement
 

Discussions similaires

Statistiques des forums

Discussions
312 501
Messages
2 089 014
Membres
104 005
dernier inscrit
Maxence