Bonjour à tous,
je suis pas un performeur dans le vba..
pouvez vous m'aider s'il vous plait
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A8:A26")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
If Cells("A8;A26").Value > 0 Then
Range("B8:C8:D8:E8:F8:G8:H8:I8:J8:K8:L8:M8:P8:W8:Y8:Z8:AA8:AB8") = Worksheets("Janvier 21").Range("AD8:AE8:B8:C8:D8:E8:F8:G8:H8:I8:J8:K8:L8:M8:P8:U8:W8:X8:AD8").Value
Range("B9:C9:D9:E9:F9:G9:H9:I9:J9:K9:L9:M9:P9:W9:Y9:Z9:AA9:AB9") = Worksheets("Janvier 21").Range("AD9:AE9:B9:C9:D9:E9:F9:G9:H9:I9:J9:K9:L9:M9:P9:U9:W9:X9:AD9").Value
Else
If Range("A8:A26").Value = "0" Then
Range("B8:C8:D8:E8:F8:G8:H8:I8:J8:K8:L8:M8:N8:P8:W8:Y8:Z8:AA8:AB8:AD8").Value = ""
End If
End If
End If
End Sub
Fais ce petit test en sirotant ton thé
(oui c'est l'heure du thé )
VB:
Sub Ceci()
MsgBox Range("B8:C8:D8:E8:F8:G8:H8:I8:J8:K8:L8:M8:P8:W8:Y8:Z8:AA8:AB8").Address
End Sub
Sub N_Est_Pas_Cela()
MsgBox Range("B8:M8,P8,W8,Y8:AB8").Address
End Sub
Il faut lancer les deux macros (pour voir la différence)
(car oui il y avait deux macros dans mon message)
NB: Je n'ai pas écrit que c'était une solution ou une réponse.
Mais je t'ai simplement suggéré de faire un test.
(motivé par ce que tu indiques en début de message)
Je m'en doutais que c'était un petit test pour savoir ou je me situe en connaissance de vba... donc je suis en bas , au plus bas
de ce que j'ai compris la première fonction me dit: de la cellule B8 jusqu'a la AB8
alors que l'autre identifie chaque cellule mentionnées ... j'ai bon ?
donc il y a une erreur de cells ? ou dans mes ,;: entre chaque cellules ?
le but de ma fonction est la suivante:
dès que dans la colonne A8;A26 le contenu change
j'applique la formule si la cellule changeante est supérieure a 0 je renvoie les valeurs des cellules indiquées de la feuille précédente vers les cellules indiquées
et si la cellule changeante est égale à 0 les cellules seront vides...
j'ai l'impression de comprendre le fonctionnement de vba mais je n'arrive pas a écrire ce langage ...;(
Question:
Quelle plage de cellules exactement doit être traitée par ta macro
Pour la savoir, j'utilise un MsgBox
C'est la macro nommée Ceci
Et qu'observe-t-on quand on l'exécute ?
Tu peux me le dire?
Oui, il peut le dire
Quand je l'exécute elle me dit : $B$8:$AB$8
alors il faut savoir que lorsque ma cellule change de valeur (sans que je clique manuellement: formule exécutant un résultat sur la cellule A8) ma fonction Worksheet_Change(ByVal Target As Range) ne s'active pas... j'ai l'impression de tomber dingue des fois
tu as du taf ...
pour je devienne un performeur
Alors un second test (pour que tu comprennes ce que j'essaie de te faire comprendre)
VB:
Sub Ceci_Cela()
Dim Chapi As Range, Chao As Range
Set Chapi = Range("B8:C8:D8:E8:F8:G8:H8:I8:J8:K8:L8:M8:P8:W8:Y8:Z8:AA8:AB8")
Set Chapo = Range("B8:AB8")
xx = Chapi.Address: yy = Chapo.Address
MsgBox "Chapi= " & xx & Chr(13) & "Chapo: " & yy
MsgBox xx = yy, vbExclamation, "Chapi Chapo Patapo Chapo Chapi Patapi"
End Sub
Bon ce que j'ai compris
quand je veux mettre des cellules qui se suivent je mets A8:AB8
si je veux des cellules bien précises je mets A8:G8,I8:AB8 la le cellule H8 n'est prise en compte ..
j'ai bon ?
ce qui veut dire que toutes les cellules que j'ai écrites avec les : ne savent a rien car cela prend en compte la première et la dernière...
ouffff je crois avoir bon )))))
Voila, nous y sommes
Ton écriture "à rallonge" est équivalente au final à Range("B8:AB8")
Ceci dit, est-ce bien la bonne plage de cellules?
Car là on va de la cellule B8 à AB8.
Sub Test_3()
Dim Plage As Range, c As Range
Set Plage = Range("B8:AB8"): Plage = "=COLUMN()": Plage.Columns.AutoFit: [A1].Select
For Each c In Plage
MsgBox c.Address(0, 0) & " | " & c, vbInformation, " Adresse | Valeur"
Next
End Sub
Donc reste à savoir, quelles sont les réelles plages de cellules que tu dois traiter dans ta macro.
J'ai testé le test3 qui a donné les valeurs 1:28 dans les cellules B8:AB8...
les plages a traiter sont
Range("B8:M8,P8,W8,Y8:AB8") = Worksheets("Janvier 21").Range("AD8,B8:M8,P8,U8,W8:X8,AD8").Value
deuxième épisode a suivre )))
Pour éviter des épisodes à rallonge, je t'invite à joindre un fichier Exemple (sans données confidentielles)
Ca sera plus rapide pour faire nos tests avant de te répondre.
je te remercie pour cette formation et compréhension différente.
ci joint le fichier
le code est pour le moment sur la feuille février
merci par avance.
Thierry