[VBA] gros problème pour moi
Fermé
Roger54
Messages postés
172
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
5 décembre 2009
-
7 sept. 2006 à 22:25
Utilisateur anonyme - 31 oct. 2006 à 17:51
Utilisateur anonyme - 31 oct. 2006 à 17:51
A voir également:
- [VBA] gros problème pour moi
- Find vba - Astuces et Solutions
- Incompatibilité de type vba ✓ - Forum Programmation
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba dernière colonne non vide ✓ - Forum VB / VBA
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
8 réponses
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
856
13 sept. 2006 à 10:47
13 sept. 2006 à 10:47
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+
Roger54
Messages postés
172
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
5 décembre 2009
11
13 sept. 2006 à 13:29
13 sept. 2006 à 13:29
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.
JvDo
Messages postés
1978
Date d'inscription
mercredi 27 juillet 2005
Statut
Membre
Dernière intervention
28 septembre 2020
856
13 sept. 2006 à 14:53
13 sept. 2006 à 14:53
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
Roger54
Messages postés
172
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
5 décembre 2009
11
14 sept. 2006 à 15:59
14 sept. 2006 à 15:59
Je te remercie JvDo, je regarde ça et je te tiens au courant.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
14 sept. 2006 à 23:35
14 sept. 2006 à 23:35
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
elise.f
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
25 mars 2007
1
27 oct. 2006 à 19:11
27 oct. 2006 à 19:11
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
Utilisateur anonyme
>
elise.f
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
25 mars 2007
27 oct. 2006 à 20:16
27 oct. 2006 à 20:16
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
elise.f
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
25 mars 2007
1
>
Utilisateur anonyme
31 oct. 2006 à 11:12
31 oct. 2006 à 11:12
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
elise.f
Messages postés
10
Date d'inscription
vendredi 27 octobre 2006
Statut
Membre
Dernière intervention
25 mars 2007
1
>
Utilisateur anonyme
31 oct. 2006 à 17:13
31 oct. 2006 à 17:13
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
Roger54
Messages postés
172
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
5 décembre 2009
11
15 sept. 2006 à 21:24
15 sept. 2006 à 21:24
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
Utilisateur anonyme
16 sept. 2006 à 13:56
16 sept. 2006 à 13:56
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
'
Roger54
Messages postés
172
Date d'inscription
vendredi 18 août 2006
Statut
Membre
Dernière intervention
5 décembre 2009
11
16 sept. 2006 à 21:00
16 sept. 2006 à 21:00
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