[VBA] gros problème pour moi
Roger54
Messages postés
172
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonsoir à tous,
Débutant en la matière, j'ai quelques soucis a faire ce que je voudrais. Je vous demande un peu d'aide.
Ma première petite question:
Est-ce qu'il est possible qu'une macro s'actualise toute seule?
Je m'explique, j'ai 2 colonnes dans lesquelles on insère des valeurs toute la journée (elles sont sur 2 feuilles différentes) et une case qui me permet de faire la somme.
J'ai réussi à faire une macro mais à chaque fois qu'une valeur est rajoutée, je suis obligé d'effectuer la macro pour actualiser.
Est-ce que c'est possible que cela soit fait automatiquement?
En esperant avoir été clair et en vous remerciant pour votre aide.
Débutant en la matière, j'ai quelques soucis a faire ce que je voudrais. Je vous demande un peu d'aide.
Ma première petite question:
Est-ce qu'il est possible qu'une macro s'actualise toute seule?
Je m'explique, j'ai 2 colonnes dans lesquelles on insère des valeurs toute la journée (elles sont sur 2 feuilles différentes) et une case qui me permet de faire la somme.
J'ai réussi à faire une macro mais à chaque fois qu'une valeur est rajoutée, je suis obligé d'effectuer la macro pour actualiser.
Est-ce que c'est possible que cela soit fait automatiquement?
En esperant avoir été clair et en vous remerciant pour votre aide.
A voir également:
- [VBA] gros problème pour moi
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
8 réponses
Bonjour,
pourquoi as-tu une macro pour faire une somme?
tu pourrais le faire avec la fonction SOMME() que tu appliquerais à 2 zones nommées dynamique.
précision : une zone nommée dynamique se redimensionne automatiquement en fonction du nombre de ligne remplies.
A+
pourquoi as-tu une macro pour faire une somme?
tu pourrais le faire avec la fonction SOMME() que tu appliquerais à 2 zones nommées dynamique.
précision : une zone nommée dynamique se redimensionne automatiquement en fonction du nombre de ligne remplies.
A+
Salut JvDo,
Non en fait c'est plus compliqué. Je vais essayé d'expliquer.
En fait j'ai 2 feuilles dans mon classeur.
La première :
C'est une feuille de poste, il y a la date du jour (= aujourd'hui), l'agent en poste et ses heures de postes.
2 possibilité soit 7h00-14h00 soit 14h00-21h00.
Donc cette première feuille est utilisée par l'agent du matin puis par celui de l'après midi.
Ces agents encaissent des abonnement en CB (également en chéque et en éspece, mais cela ne fait pas parti de mon problème).
Donc j'ai une colonne sur cette feuille de poste dédiée aux encaissemnts en CB avec la somme en bas.
Ce qui se passe c'est donc qu'à chaque fin de poste, l'agent imprime ça feuille puis il efface ses données (par l'intermédiaire d'un bouton RAS) rendant la feuille vierge pou l'agent suivant.
Les données effacées sont insérées dans la feuille 2.
La date, le nom, soit matin soit soir et la somme encaissée.
A chaque fin de poste les données sont enregistrées les unes en dessous des autres dans la feuille 2.
( j'aimerais par la suite insérer d'autres fonctions sur cette feuille)
Sur la feuille 1, il ya également une case dédiée au recapitulatif de la journée (somme encaissée durant la journée).
Pour le matin c'est la somme du matin, pour l'après midi c'est la somme du matin pris dans la feuille 2 puis la somme encaissée dans l'après-midi.
J'ai réussi (avec mon peu de connaissance, heureusement que vous ne voyez pas le programme) a faire une macro qui effectue ça. Mon problème pour le moment c 'est que je suis obligé de la lancé pour que ma somme soit indiquée et actualisée (si des encaissements sont effectués durant la journée).
Est-ce qu'il est possible donc de faire en sorte que le résultat soit indiqué directement sans être obligé d'appuyer sur un bouton.
Voila c'est ça, si j'ai réussi à me faire comprendre.
Merci pour l'aide apportée.
Non en fait c'est plus compliqué. Je vais essayé d'expliquer.
En fait j'ai 2 feuilles dans mon classeur.
La première :
C'est une feuille de poste, il y a la date du jour (= aujourd'hui), l'agent en poste et ses heures de postes.
2 possibilité soit 7h00-14h00 soit 14h00-21h00.
Donc cette première feuille est utilisée par l'agent du matin puis par celui de l'après midi.
Ces agents encaissent des abonnement en CB (également en chéque et en éspece, mais cela ne fait pas parti de mon problème).
Donc j'ai une colonne sur cette feuille de poste dédiée aux encaissemnts en CB avec la somme en bas.
Ce qui se passe c'est donc qu'à chaque fin de poste, l'agent imprime ça feuille puis il efface ses données (par l'intermédiaire d'un bouton RAS) rendant la feuille vierge pou l'agent suivant.
Les données effacées sont insérées dans la feuille 2.
La date, le nom, soit matin soit soir et la somme encaissée.
A chaque fin de poste les données sont enregistrées les unes en dessous des autres dans la feuille 2.
( j'aimerais par la suite insérer d'autres fonctions sur cette feuille)
Sur la feuille 1, il ya également une case dédiée au recapitulatif de la journée (somme encaissée durant la journée).
Pour le matin c'est la somme du matin, pour l'après midi c'est la somme du matin pris dans la feuille 2 puis la somme encaissée dans l'après-midi.
J'ai réussi (avec mon peu de connaissance, heureusement que vous ne voyez pas le programme) a faire une macro qui effectue ça. Mon problème pour le moment c 'est que je suis obligé de la lancé pour que ma somme soit indiquée et actualisée (si des encaissements sont effectués durant la journée).
Est-ce qu'il est possible donc de faire en sorte que le résultat soit indiqué directement sans être obligé d'appuyer sur un bouton.
Voila c'est ça, si j'ai réussi à me faire comprendre.
Merci pour l'aide apportée.
Bonjour,
voilà une proposition, sans macro qui s'appuie sur une organisation des données qui, je l'espère, cadre avec ton projet.
https://www.cjoint.com/?jno0hio33y
regarde surtout les 3 cellules cumul en feuille 1
cordialement
voilà une proposition, sans macro qui s'appuie sur une organisation des données qui, je l'espère, cadre avec ton projet.
https://www.cjoint.com/?jno0hio33y
regarde surtout les 3 cellules cumul en feuille 1
cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Une autre solution est de convertir la macro en fonction
personnalisé accroché sur une cellule qui est mise à jour.
En début de fonction, tu rajoute
Application.Volatile
et le lancement de la "fonction", ancienne macro sera
automatique sur chaque maj.
attention, c'est plus lourd si la fonction est plus lourde !
Si tu as besoin d'aide pour transformer, dépose ton code !
@+
Lupin
Une autre solution est de convertir la macro en fonction
personnalisé accroché sur une cellule qui est mise à jour.
En début de fonction, tu rajoute
Application.Volatile
et le lancement de la "fonction", ancienne macro sera
automatique sur chaque maj.
attention, c'est plus lourd si la fonction est plus lourde !
Si tu as besoin d'aide pour transformer, dépose ton code !
@+
Lupin
bonjour A.Lupin!
A propos des fonctions volatiles dans vba, pourrais-tu stp m'envoyer un exemple?
la fonction volatile est-elle lancée quand une cellule en particulier est modifiée, ou quand toute cellule de la feuille de calcul est modifiée?
ça fait plusieurs fois que je tente d'en créer une et je galère!
Un exemple tout bête qui ne marche pas :
pour tester la fonction volatile, j'ai créé dans le code de ma feuille1 la fonction suivante :
Sub test()
Application.Volatile
Cells(1, 2).Value = Cells(1, 1).Value
End Sub
Pourtant, quand je modifie la valeur de la cellule A1, rien ne change.
où est le problème?
si tu peux m'aider, merci!!
Elise
A propos des fonctions volatiles dans vba, pourrais-tu stp m'envoyer un exemple?
la fonction volatile est-elle lancée quand une cellule en particulier est modifiée, ou quand toute cellule de la feuille de calcul est modifiée?
ça fait plusieurs fois que je tente d'en créer une et je galère!
Un exemple tout bête qui ne marche pas :
pour tester la fonction volatile, j'ai créé dans le code de ma feuille1 la fonction suivante :
Sub test()
Application.Volatile
Cells(1, 2).Value = Cells(1, 1).Value
End Sub
Pourtant, quand je modifie la valeur de la cellule A1, rien ne change.
où est le problème?
si tu peux m'aider, merci!!
Elise
Bonjour,
en cellule A2 :
//Menu/Insertion/Fonction
Choisir dans la liste déroulante [ Personnalisées ]
Par ordre alphabétique, vous devriez voir la fonction [ AA_Test ].
La fonction demande de sélectionner une cellule, si la
cellule est non-vide, son contenu sera renvoyé en A2.
Sur tout changement de la cellule visé, la fonction sera déclenché.
Lupin
Function AA_Test(Plage As Range) As Variant Application.Volatile If (Plage.Value <> "") Then AA_Test = Plage.Value End If End Function
en cellule A2 :
//Menu/Insertion/Fonction
Choisir dans la liste déroulante [ Personnalisées ]
Par ordre alphabétique, vous devriez voir la fonction [ AA_Test ].
La fonction demande de sélectionner une cellule, si la
cellule est non-vide, son contenu sera renvoyé en A2.
Sur tout changement de la cellule visé, la fonction sera déclenché.
Lupin
Merci beaucoup Lupin,
mais j'ai un autre problème : si je veux qu'une Sub (et non pas une Function) se lance toute seule à chaque modication d'une cellule, est-ce que c'est faisable? Je voudrais par exemple avoir une cellule où j'entre un nombre, et en fonction du nombre ça me rajoute n lignes à tel emplacement. Et ce, à chaque fois que je modifie ma cellule. Je peux bien-sûr créer un bouton au lieu d'avoir une cellule à renseigner, mais j'aimerais procéder autrement.
Merci d'avance,
Elise
mais j'ai un autre problème : si je veux qu'une Sub (et non pas une Function) se lance toute seule à chaque modication d'une cellule, est-ce que c'est faisable? Je voudrais par exemple avoir une cellule où j'entre un nombre, et en fonction du nombre ça me rajoute n lignes à tel emplacement. Et ce, à chaque fois que je modifie ma cellule. Je peux bien-sûr créer un bouton au lieu d'avoir une cellule à renseigner, mais j'aimerais procéder autrement.
Merci d'avance,
Elise
re:
exemple :
à placer derrière la feuille visé :
Lupin
exemple :
à placer derrière la feuille visé :
Private Sub Worksheet_Change(ByVal Target As Range) Dim Region As Range Application.ScreenUpdating = False 'Lors d'un changement sur la cellule [B5] Set Region = Application.Intersect(Range("B5"), Target) If Region Is Nothing Then MsgBox "La cible n'est pas dans la plage visé." 'MsgBox Target.Row & vbcrlf & Target.Value Else MsgBox "La cible est dans la plage visé." 'MsgBox Target.Row & vbcrlf & Target.Value End If Application.ScreenUpdating = True End Sub '
Lupin
ok, merci encore une fois!
Je vais voir si je m'en sors avec ça.
Une toute dernière question, parce que tu as l'air d'en connaître un rayon, et après je me calme :
j'ai un problème avec les boutons que je crée.
Par exemple, dans le cas d'un bouton vrai/faux, appelé Bouton, créé sur la feuille 1. Quand je veux récupérer la valeur du bouton depuis une Sub se trouvant sur la même feuille, aucun problème. Par contre, dès que ma Sub se trouve dans un module, je n'arrive pas récupérer la valeur du Bouton (et du coup mon booléen est toujours faux, au lieu de dépendre de l'état du bouton). J'ai essayé en changeant "Private" par "Public" dans le code du bouton, mais ça ne change rien. Que faut-il faire?
Elise
Je vais voir si je m'en sors avec ça.
Une toute dernière question, parce que tu as l'air d'en connaître un rayon, et après je me calme :
j'ai un problème avec les boutons que je crée.
Par exemple, dans le cas d'un bouton vrai/faux, appelé Bouton, créé sur la feuille 1. Quand je veux récupérer la valeur du bouton depuis une Sub se trouvant sur la même feuille, aucun problème. Par contre, dès que ma Sub se trouve dans un module, je n'arrive pas récupérer la valeur du Bouton (et du coup mon booléen est toujours faux, au lieu de dépendre de l'état du bouton). J'ai essayé en changeant "Private" par "Public" dans le code du bouton, mais ça ne change rien. Que faut-il faire?
Elise
Bonsoir Lupin.A,
Je vais essayer de faire les 2 (en même temps ça me fera apprendre).
Je me suis planté avec l'exemple que JvDo ma donné, je vais le refaire soit ce soir soit demain. Je tenterai de faire ta méthode après (je pense que j'aurais besoin d'aide).
Une petite question au passage, comme fait t'on pour faire apparaître les bordures autour d'une cellule lorsque l'on insére une valeur dedans (comme dans l'exemple de JvDo).
Merci encore pour votre aide.
Bonne soirée
Je vais essayer de faire les 2 (en même temps ça me fera apprendre).
Je me suis planté avec l'exemple que JvDo ma donné, je vais le refaire soit ce soir soit demain. Je tenterai de faire ta méthode après (je pense que j'aurais besoin d'aide).
Une petite question au passage, comme fait t'on pour faire apparaître les bordures autour d'une cellule lorsque l'on insére une valeur dedans (comme dans l'exemple de JvDo).
Merci encore pour votre aide.
Bonne soirée
re :
ce genre là !
Dim Reponse As Boolean
Reponse = CadrageCellule( Activecell.offset(0,0).Address )
Function CadrageCellule(ByVal Plage As String) As Boolean
'
CadrageCellule = False
Range(Plage).Select
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
CadrageCellule = True
End Function
'
ce genre là !
Dim Reponse As Boolean
Reponse = CadrageCellule( Activecell.offset(0,0).Address )
Function CadrageCellule(ByVal Plage As String) As Boolean
'
CadrageCellule = False
Range(Plage).Select
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlMedium
End With
CadrageCellule = True
End Function
'
Merci Lupin pour ta réponse, je vais essayer.
Par contre avec la méthode de JvDo, je n'arrive pas à faire fonctionner l'après-midi, je donne le lien:
https://www.cjoint.com/?jquZZWO0qU
Et voici celui avec mes super macro:
https://www.cjoint.com/?jqu2KWcfeC
Par contre avec la méthode de JvDo, je n'arrive pas à faire fonctionner l'après-midi, je donne le lien:
https://www.cjoint.com/?jquZZWO0qU
Et voici celui avec mes super macro:
https://www.cjoint.com/?jqu2KWcfeC