[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
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.

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
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+
0
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
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.
0
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
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
0
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
Je te remercie JvDo, je regarde ça et je te tiens au courant.
0

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

Posez votre question
Utilisateur anonyme
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
0
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
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
0
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
Bonjour,

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
0
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
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
0
Utilisateur anonyme > Utilisateur anonyme
31 oct. 2006 à 15:39
re:

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
0
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
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
0
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
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
0
Utilisateur anonyme
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
'
0
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
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
0