|
|
|
|
Posté par
Boon, le vendredi 27 juillet 2007 à 15:45:05Configuration: Windows XP Firefox 2.0.0.5
Bonjour,
2 possibilités ! soit : vous declarez une fonction personnalisé !
Public Function MaFonction (ByVal Cible As Range) As Variant
Application.Volatile
MaFonction = Cible.Value + 10
End Function
soit : vous utlisé l'évènement derrière la feuille :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Range("A2").value = Target.Value + 10
End Sub
Lupin |
Merci!
Je vais essayer de ce pas! |
Re Salut!
J'ai mis ce code dans "this Workbook" , mais rien ne se passe! ----------------------------- Private Sub Worksheet_Change(ByVal Target As Range) Cells(20, 2) = Target.Address Range("A25").Value = Target.Value * 10 End Sub ---------------------------- Normalement, avec un code comme ca, la cellule A25 devrait m'afficher 10 fois la cellule B20 quand je change sa valeur, non? Qu'est ce que je n'ai pas compris? |
re:
en fait, au lieu de placer ce code derrière une feuille, celui-ci a été placé dans le module [ThisWorkbook]. ici, cela ne s'adresse pas à une simple feuille mais à tous le classeur ( toutes les feuilles ), il faut donc un paramàtre supplémentaire. Les évènements dans le module [ThisWorkbook] sont plutôt :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' Code
' ...
End Sub
'
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
' Code
'...
End Sub
ou la feuille est désigné par [ Sh As Object ]. Lupin |
Arf!
Je débute dans la programmation donc j'ai pas tout capté, dsl! Voici le code que je viens de rentrer (j'ai remplacé le Private Sub mais je suis pas sur que c'est ca que j'aurai du faire...) ------------------------------------ Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Cells(25, 1).Value = Target.Value End Sub ------------------------------------- Et maintenant, la cellule A25 me donne...l'heure!!!!! J'y comprends plus rien! Dany |
------------------------------------
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Cells(25, 1).Value = Target.Value End Sub ------------------------------------- La feuille Sh ainsi que Target sont passé en paramètres Sh est la feuille qui détecte le changement Target est la cellule pointé par le changement ( la sélection ) Ce que tu modifie t'es renvoyé à la cellule A25 selon le format d'affichage qui lui est propre. disons pour effectuer une demo : Postulat : Place une valeur numérique en A1 pour 3 feuille :
Option Explicit
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Select Case (Sh.Name)
Case "Feuil1": Routine1 Target
Case "Feuil2": Routine2 Target
Case "Feuil3": Routine3 Target
End Select
End Sub
'
Sub Routine1(ByVal Cible As Range)
Cells(5, 1).Value = "Valeur = " & Cible.Value
End Sub
'
Sub Routine2(ByVal Cible As Range)
Cells(5, 1).Value = "Adresse = " & Cible.Address
End Sub
'
Sub Routine3(ByVal Cible As Range)
Cells(5, 1).Value = "Formule = " & Cible.Formula
End Sub
'
Lupin |
Merci, j'ai enfin compris comment ca marchait!
Mais je me rend compte que je suis confronté à un autre problème: En fait, je voudrais avoir plusieurs target, et dans mon cas, elles sont dépendantes. Je m'explique: Si je change B15, je veux que B16 change, mais si je change B16, je veux que B15 change aussi. J'ai donc mis ce code: (ne pas se préocupper des boucles, c'est rien du tout) ------------------------------------ Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Double B15 = Target.Address a = 33 Do While Cells(a, 1).Value <> Cells(15, 2).Value a = a + 1 Loop Range("B16").Value = Range("B" & a).Value B16 = Target.Address a = 33 Do While Cells(a, 2).Value <> Cells(16, 2).Value a = a + 1 Loop Range("B15").Value = Range("A" & a).Value End Sub -------------------------------------------------- Mais quand j'execute la macro, mon programme tourne en boucle, car si je change B15, ca change B16 qui change B15 qui change B16, etc... Comment faire pour contourner ce problème??? Merci encore!!! |
re :
bonne nouvelle, je sais c'est pas toujours évident ! Il m'arrive de chercher aussi des heures ! bon pour le nouveau problème, si on s'en refère à la théorie, les changements que tu dois détecter doivent provenir de l'extérieur, ceux de l'intérieur étant contrôlé par la routine elle-même. Par conséquent, je dirais qu'il ne te suffit que de désactivé les évènements durant le cycle de la routine.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim a As Double
Application.EnableEvents = False
' Code ...
' ...
Application.EnableEvents = True
End Sub
'
Lupin |
Merci encore!
Je vais essayer ca! |
Re!
Je viens d'essayer de mettre les Application.EnableEvents , mais je peux maintenant seulement changer la cellule B16: Si je change la cellule B15, elle reste comme elle est (c'est à dire comme calculée à partir de la cellule 16) Voilà le code que j'ai mis, en même temps, je suis pas du tout sûr d'avoir bien su utilisé les Application.EnableEvents = True: ---------------- Private Sub Worksheet_Change(ByVal Target As Range) Dim a As Double Application.EnableEvents = False B16 = Target.Address a = 33 Do While Cells(a, 2).Value <> Cells(16, 2).Value a = a + 1 Loop Range("B15").Value = Range("A" & a).Value B15 = Target.Address a = 33 Do While Cells(a, 1).Value <> Cells(15, 2).Value a = a + 1 Loop Range("B16").Value = Range("B" & a).Value Application.EnableEvents = True End Sub --------------------------- |
re salut,
2 choses qui m'apparaissent ! Si tu arrête la macro en cours d'utilisation et que l'instruction de réactivation ne passe pas, il te faut réactiver les évènements :
Sub ActiveEvenements()
Application.EnableEvents = True
End Sub
'
et pour bien cibler la cellule et le travail a effectuer :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Intersection As Range
Set Intersection = Application.Intersect(Target, Range("B15"))
If Intersection Is Nothing Then
MsgBox "Pas dans la plage de B15"
Set Intersection = Application.Intersect(Target, Range("B16"))
If Intersection Is Nothing Then
MsgBox "Pas dans la plage de B16"
Else
' Ici le code pour B16
' ...
End If
Else
' Ici le code pour B15
' ...
End If
End Sub
'
Lupin |
Merci!!!!!
Tout marche parfaitement!! Merci beaucoup!! |
| 03/01 11h08 | [Windows] Exécution automatique à l'insertion d'un CD / clé USB | Windows |
| 06/10 10h24 | Désactiver l'exécution automatique du CD-Rom | Windows |
| 17/06 18h29 | Désactivez l'exécution de certains programmes au démarrage | Windows |
| 28/05 13h05 | Rétablir le démarrage et les menus de l'application par défaut | Access |
| 23/05 12h00 | Lancer des commandes en mode Administrateur sous Vista | Windows Vista |
| 10/07 15h22 | [VBA, EXCEL] - Macro | 3 |
| 24/05 18h46 | [vba excel] macro initiales nom | 2 |
| 08/02 16h13 | VBA Excel - macro d'ouverture de répertoires | 1 |
| 23/01 10h42 | Vba excel macro aujourd'hui | 3 |
![]() | avast! Virus Cleaner - Tout le monde connaît l' antivirus gratuit Avast . Son éditeur propose avast! Virus Cleaner, un nettoyeur de virus... | Catégorie: Antivirus Licence: Freeware/gratuit |
![]() | Atomix MP3 - ATOMIX MP3 est un logiciel de Mixage de son MP3, WAV et WMA fort surprenant. Les connaisseurs remarqueront sa ressemblance... | Catégorie: Création musicale Licence: Shareware |
![]() | EasyFactures - Easyfactures est un logiciel capable de gérer les factures et les devis, il a été développé sur Excel. Easyfactures... | Catégorie: Comptabilité/Paie Licence: Freeware/gratuit |
![]() | Excel Viewer - Avec Microsoft Office Excel Viewer 2003, vous pouvez ouvrir, afficher et imprimer des classeurs Excel (fichiers XLS ), même... | Catégorie: Tableur Licence: Freeware/gratuit |
![]() | Iris Pen Executive 2 | Catégorie: Scanner | 164.64 € Grosbill.com |
![]() | Iris Pen Executive 6 | Catégorie: Scanner | 198.54 € Misco FR |
![]() | Card Scan Executive V/8 | Catégorie: Scanner | 289.00 € Pixmania |
![]() | Sony Micro Vault Excellence | Catégorie: Carte Mémoire / Clé USB | 16.74 € Misco FR |