XL 2013 ouvrir feuille avec une macro comportant des designations worksheets

nannord44

XLDnaute Nouveau
bonjour,
mon probleme est le suivant :
Un classeur Excel, (en cours de création) se compose de 15 feuilles dont 12 renomées avec les mois de l'année.
les 3 autres sont destinées :
1 " Ticket " à la saisie des courses par postes catégoiels (boissons, viandes, poissons ...) qui une fois terminée, les totaux seront copié et retranscrit sur la même feuille avec uns spéciale copie "valeur".

2 "Janvier, Fevrier ..soit 12 feuilles." Une fois la saisie des tickets de caisse du mois retranscrits, sur la feuille mensuelle correspondante,, les dépenses seront transcrites sur la feuille Annuelle sur la ligne correspondante au mois concerné.

2 " Annuelle" regroupement des feuilles mensuelles

3 "Charges" Inscription des charges dites fonctionnelles " Eau,electricite, ..."


Voila en gros le tableau.

Mon probleme réside à l'utilisation de la fonction worksheets .
La declaration pour les feuilles 1,2 ,3 et 4 ne pose pas de probleme
set OT = worksheets("Ticket"),
set OA = worksheets("Annuel")
set OC = worksheets("Charges) ,

je bloque pour activer la feuille mensuelleafin de pouvoir transcrire sur cette feuille le resultat de la saisie du ticket de caisse .


'voici le debut du code peut êetre plus parlant que mon exxposé

Private Sub CommandButton5_Click()
'
Dim OT As Worsheet 'feuille ticket
Dim OA As Worksheet 'feuille Annuel
Dim OC As Worksheet 'feuille Charges
Dim MO As Worksheet 'feuille mois

Dim mois As String
Dim jour As Integer
Dim nummois As Integer
Dim reponse2 As Integer
Dim reponse3 As Integer
Dim reponse4 As Integer

Set OT = Worksheets("ticket")
Set OA = Worksheets("Annuel")
Set OC = Worksheets("Charges")
' Le set MO sera defini lors de l'attribution du mois à sa varialble "mois"

OT.Range("A35:S35").Copy ' Copie valeurs des courses avec formules
OT.Range("A40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False ' coller les valeurs en les convertissant
OT.Range("B40:S40").Copy ' copie des valeurs converties pour inscription feuille mensuelle
jour = jour + 3 ' ajuste le jour en numero ligne pour selection ligne sur la feuille mensuelle
nummois = OT.Range("V35") ' mise en mémoire du mois numérique pour mise a jour feuille annuelle
nummois = nummois + 1 ' ajuste le mois en numéro de ligne feuille annuelle
mois = OT.Range("T35") ' mise en mémoire du mois pour selection la feuille mensuelle
MsgBox (mois ) 'Pour verifier la valeur affectée à la varialble mois

'Et à cet endroit ca marche plus pas moyen d'ouvrir la feuille du mois,j'ai lu beaucoup, essayé la varialble est bonne que ce soit Sheets(mois) ou worksheets (mois) rien n'y fait
'vans nul doute un truc qui sauteras aux yeux des pro mais helas pas des miens !!


Set MO = Worksheets(mois)
MO.Range("B" & jour).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


'traitement des données d'un mois en vue de leur inscription sur la feuille recapitulative annuelle, suivant réponse au message
MO.Range("B35:S35").CopyRange("B40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

end sub
 
Bonjour Nannord44, le forum

@nannord44 , il serait bien d'utiliser les balises de code, c'est beaucoup plus pratique (le petit bouton </> dans le haut du post). un fichier exemple ne serait pas non plus de trop, on ne sait pas ce qu'il y a réellement dans vos cellules et dans vos noms de feuille, et donc du coup dans vos variables. Entre ce qui sert, ce qui ne sert à rien et ce qui pourrait vous servir plus tard, on ne sait pas trop ce qui est inutile et ce qu'il faut Garder.

Voila déjà une petite évolution de votre code, placé dans une balise, vous verrez que c'est plus facile à lire, à comprendre, à copier, etc.

Bien cordialement, @+
VB:
Private Sub CommandButton5_Click()
'
Dim OT As Worsheet 'feuille ticket
Dim OA As Worksheet 'feuille Annuel
Dim OC As Worksheet 'feuille Charges
Dim MO As Worksheet 'feuille mois

Dim mois As String
Dim jour As Integer
Dim nummois As Integer
Dim reponse2 As Integer
Dim reponse3 As Integer
Dim reponse4 As Integer

Set OT = Worksheets("ticket")
Set OA = Worksheets("Annuel")
Set OC = Worksheets("Charges")
' Le set MO sera defini lors de l'attribution du mois à sa varialble "mois"

OT.Range("A40:S40").Value = OT.Range("A35:S35").Value ' Copie valeurs des courses avec formules
jour = jour + 3 ' ajuste le jour en numero ligne pour selection ligne sur la feuille mensuelle
nummois = OT.Range("V35") ' mise en mémoire du mois numérique pour mise a jour feuille annuelle
nummois = nummois + 1 ' ajuste le mois en numéro de ligne feuille annuelle
mois = OT.Range("T35") ' mise en mémoire du mois pour selection la feuille mensuelle
MsgBox (mois)  'Pour verifier la valeur affectée à la varialble mois
'Et à cet endroit ca marche plus pas moyen d'ouvrir la feuille du mois,j'ai lu beaucoup, essayé la varialble est bonne que ce soit Sheets(mois) ou worksheets (mois) rien n'y fait
'vans nul doute un truc qui sauteras aux yeux des pro mais helas pas des miens !!
Set MO = Worksheets(mois)
MO.Range("B" & jour & ":S" & jour).Value = OT.Range("B40:S40").Value ' copie des valeurs converties pour inscription feuille mensuelle

'traitement des données d'un mois en vue de leur inscription sur la feuille recapitulative annuelle, suivant réponse au message
Range("B40:S40").Value = MO.Range("B35:S35").Value

End Sub
 

nannord44

XLDnaute Nouveau
bonjour,



il me semble avoir trouve la syntaxe pour régler mon probleme,

Ci joint les deux fichiers correspondants au nouveau code que je joint ici.

Le code se situe dans le fichier Depenses.xlsm
J'ai changé la position de la comande d'initialisation de la varaible mois, et pour l'instant ca fonctionne

Cordialement


Code:
Private Sub CommandButton2_Click()

'sub inscription Globale

'Définition des variables

Dim OT As Worksheet
Dim OM As Worksheet
Dim OA As Worksheet
Dim OC As Worksheet

Dim w As Workbook

Dim jour As Integer 'formule incluse dans le feuille de caclcul ticket
Dim nummois As Integer 'formule incluse dans le feuille de caclcul ticket
Dim mois As String 'formule incluse dans le feuille de caclcul ticket
Dim colo As Integer
Dim reponse1 As Integer
Dim reponse2 As Integer
Dim reponse3 As Integer

Set OT = Worksheets("Ticket")
Set OA = Worksheets("Annuel")
Set OC = Worksheets("Charges")

OT.Activate ' Activations feuille ticket
OT.Range("A35:S35").Copy 'copie,et  conversion des données formules en données valeurs sur la feuille 'ticket
OT.Range("A40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

mois = OT.Range("T35") ' Initialisation de la variable mois, etinitiaalisation d la variable mois
Set OM = Worksheets(mois) ' Inialisation et ouverture de a feuille mensuelle

nummois = OT.Range("V35")
jour = OT.Range("U35")
jour = jour + 3 ' +3 pour faire coincider le jour avec le numéro de ligne'traitement des données ticket en vue de leur inscription dans le mois concerné
OT.Range("B40:S40").Copy 'copie des valeurs de la feuille ticket pour transcription sur la feuille mensuelle

OM.Activate 'Activation de le feuille mensuelle
OM.Range("B" & jour).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False 'Traitement des données d'un mois en vue de leur inscription sur la feuille recapitulative annuelle, suivant réponse au message
OM.Range("B35:S35").Copy ' copie des données du mois et coller les valeurs en vue de la transcription sur la feuille Annuelle
OM.Range("B40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
reponse1 = MsgBox(" Enregistrer" & mois & "dans le bilan annuel ?", vbYesNo) ' Confirmation de l'inscription sur la feuille annuells   If reponse1 = vbYes Then
OM.Range("B40:S40").Copy 'Copier les données, avec formules
OA.Activate 'activation de la feuille recapitulative Annuelle
OA.Range("C" & nummois + 10).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False ' Puis Enregistrement des charges  fonctionnelles
OC.Activate
colo = 2 + nummois
reponse3 = MsgBox(" Enregistrer les charges dans le bilan annuel ? ?", vbYesNo) 'Si la reponse est oui on enregistre les chages fonctionnelled dans recap annuelle
If reponse3 = vbYes Then
OC.Range("B:12").Copy
OC.Range("A15").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
          :=False, Transpose:=True
OC.Range("A15:A26").Copy
OA.Activate
OA.Range("S" & nummois + 10).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
             :=False, Transpose:=False
MsgBox ("Corect") ' si la réponse3 est non on retourne à la feulle ticket
ElseIf reponse3 = vbNo Then
OT.Activate
End If
'ElseIf reponse1 = vbNo Then ' si la réponse2 est non,il sera possible de quitter excel ou de quitter le macro'
reponse2 = MsgBox(" Quitter Excel ?", vbYesNo)
If reponse2 = vbYes Then
OT.Activate
Range("B2").Select
For Each w In Application.Workbooks
w.Save
Next w
Application.quit
Application.DisplayAlerts = True
' ElseIf reponse2 = vbNo Then
End Sub
 

Pièces jointes

  • Depenses.xlsm
    172.6 KB · Affichages: 3
  • Detail repas.xlsm
    140.4 KB · Affichages: 1
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
315 097
Messages
2 116 186
Membres
112 679
dernier inscrit
Yupanki