Macro private ne fonctionne pas

Fermé
nannor - 15 déc. 2021 à 13:27
joupir Messages postés 13 Date d'inscription dimanche 26 janvier 2020 Statut Membre Dernière intervention 11 février 2024 - 17 déc. 2021 à 15:10
Bonjour,

Je desire faire une gestion du budget ave bien sur excel .
au début je faisais des macros avec l'enregistreur de macro. Puis je bidouillais pour améliorer raccourcir les codes . enfin rien de bien compliqué.
Les boutons de commande réalisés avec les modèles de commande de formulaire fonctionnaient parfaitement.
Puis j'ai vouloir en utilisant les macro private ce que cela donnait. Ca plante lorsque je veux transcrire une série de données du genre

range ("B1:U1").select
selection .Copy
Worksheets(mois).select
range ("B40").paste

la feuille mois est bien selectionnée mais ca ne veut pas coller les cellules.
voila si ceraians on une idées accessible à mon niveaus de developperur ce serait super.
merci pour vos réponses
A voir également:

9 réponses

ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
15 déc. 2021 à 14:39
La règle d'or en VBA c'est éviter autant que tu le peux les Select. Ils ne font que rallonger l'exécution du code et sont source de nombreux bugs.
Un copier/coller se fait en une seule ligne en spécifiant les onglets respectifs, du style :
Worksheets("Onglet Source").Range("MaPlageSource").Copy Worksheets("Onglet Destination").Range("MaPlageDestination")
dans ton cas :
Worksheets("??").Range("B1:U1").Copy Worksheets(mois).Range("B40")

mois étant une variable définie au préalablement. Si tu veux désigner l'onglet "mois" il faut mettre les guillemets...
0
mercci je vais voir cela ce soir et je donne résultat
0
bonsoir, la modif effectuée plante lorsque je veux transcrire les données copiées sun une autre feuille du meme classeur. pourtant, lorsque l'esseur survient , c'et bien pointé sur la feuille de destination mais sans tenir compte de le ligne. Et, si j'aappuie sur la touche entrée, les données s'inscrivent bien dans l'orde.. Je me demande sije ne devraitpas reinstaller office. en gros classeur 15feuilles dont 12 pour les mois de l'année, une saisie des tickets, une pour les depenses des charges et une recapitulatif pour l'année.
je vous joint mon code c'est un travail d'amateur, mais avec l'hiver ca fait passer le temps et travailler un peu la mémoire. Merci de votre attention.
a noter que je n'ai as tennu a apporter la modif j'atends que le private fonctionne s'il m'est possible d'y arriver
cordialement
0
joupir Messages postés 13 Date d'inscription dimanche 26 janvier 2020 Statut Membre Dernière intervention 11 février 2024
16 déc. 2021 à 05:28
bonjour, j'ai oublié le code le voici
Sub convcourses()

'Définition des variables

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 reponse As Byte

' conversion dedonnée formules en données valeurs sur la feuille 'ticket'
Range("A35:S35").Select
Selection.Copy
Range("A40").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' initialisation des variables
mois = Range("T35")
nummois = Range("V35")
jour = 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é
Range("B40:S40").Select
Selection.Copy
Worksheets(mois).Select
Range("B" & jour).Select
Selection.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
Range("B35:S35").Select
Selection.Copy
Range("B40").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
reponse = MsgBox(" Enregistrer dans le bilan annuel ?", vbYesNo)


' si réponse est oui
If reponse = vbYes Then
Range("B40:S40").Select
Selection.Copy
Sheets("Annuel").Select
Range("C13").Select
ActiveSheet.Paste

' si la réponse est non,il sera possible de quitter excel ou de quitter le macro
ElseIf reponse = vbNo Then
reponse = MsgBox(" Quitter Excel ?", vbYesNo)
If reponse = vbYes Then
Dim w As Workbook
For Each w In Application.Workbooks
w.Save
Next w
Application.quit
Application.DisplayAlerts = True
ElseIf reponse = vbNo Then
Exit Sub
End If
End If

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
16 déc. 2021 à 14:08
Bonjour Nannor/Joupir, bonjour le forum,

Peut-être comme ça :
Sub convcourses()

'Définition des variables
Dim OT As Worksheet
Dim OM As Worksheet
Dim OA As Worksheet
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 reponse1 As Integer
Dim reponse2 As Integer
Dim w As Workbook

Set OT = Worksheets("ticket")
Set OA = Worksheets("Annuel")
' conversion dedonnée formules en données valeurs sur la feuille 'ticket'
OT.Range("A35:S35").Copy
OT.Range("A40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' initialisation des variables
mois = OT.Range("T35")
Set OM = Worksheets(mois)
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
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
OM.Range("B40").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
reponse1 = MsgBox(" Enregistrer dans le bilan annuel ?", vbYesNo)
' si réponse est oui
If reponse1 = vbYes Then
    OM.Range("B40:S40").Copy OA.Range("C13")
' si la réponse est non,il sera possible de quitter excel ou de quitter le macro
ElseIf reponse1 = vbNo Then
    reponse2 = MsgBox(" Quitter Excel ?", vbYesNo)
    If reponse2 = vbYes Then
        For Each w In Application.Workbooks
            w.Save
        Next w
        Application.Quit
        Application.DisplayAlerts = True
    ElseIf reponse2 = vbNo Then
        Exit Sub
    End If
End If
End Sub

0
joupir Messages postés 13 Date d'inscription dimanche 26 janvier 2020 Statut Membre Dernière intervention 11 février 2024
16 déc. 2021 à 15:31
bonjour à tous les forumeurs,

merci a tous, Thau Theme un code super qui marche super bien . Et surtout qui confirme mon manque de connaissance en matiere de developement dans ce langage.
Faut dire que j'ai developper en DBase 3 et Dbase 4 il y a plus de 25 ans mais plus rien à voir et puis c'est loin.
Encore une fois merci je vais continuer, pour ajouter les charges fixes et ce sera terminé.
Je vais devoir trouver un autre passe temps.
Bonnes fetes de fin d'année a tous les lecteurs et lectrices.
0
joupir Messages postés 13 Date d'inscription dimanche 26 janvier 2020 Statut Membre Dernière intervention 11 février 2024
17 déc. 2021 à 08:35
bonjour,

une petite question a Thau Theme le code impec, par contre est il possible à chaque connection à une feuille differente la feuille de départ étant OT, elle reste visible durant le court laps de temps d'excution de la macro.
J'aimerai si possible les visualiser. ne serait-ce que pour verifier qu'il n'y a pas eu de trucs dus à une mise a jour d'office ou windows.
Merci par avance
0
ThauTheme Messages postés 1442 Date d'inscription mardi 21 octobre 2014 Statut Membre Dernière intervention 29 juillet 2022 160
17 déc. 2021 à 10:35
Bonjour Joupir, bonjour le forum,

Rajoute :
OT.Activate

en dessous de la ligne : Set OT = Worksheets("ticket")
0
joupir Messages postés 13 Date d'inscription dimanche 26 janvier 2020 Statut Membre Dernière intervention 11 février 2024
17 déc. 2021 à 15:10
Re bonjour
merci , ca marche c'etait pourtant pas compliqué .

Et à tout le forum Passez de bonnes fetes de fin d'année
0