Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

pb macro

S

steve

Guest
bonsoir a tous

le code ne fonctione pas
quant la date =2001 ou =2002

merci d' avance


Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Name = [e4]
If Target.Address = "$H$16" Or Target.Address = "$H$17" Or Target.Address = "$H$19" Or Target.Address = "$H$18" Or Target.Address = "$N$20" Or Target.Address = "$N$19" Or Target.Address = "$N$18" Or Target.Address = "$N$17" Or Target.Address = "$N$16" Then
Range("Ad9:As9").Copy
Worksheets("Accueil BILAN").Range("V9").PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
End If

Dim Isect As Range
Set Isect = Application.Intersect(Range("a8"), Target)
If Isect Is Nothing Then Exit Sub
Select Case Target.Value
Case "franck"
Call franck


Set Isect = Application.Intersect(Range("i2"), Target)
If Isect Is Nothing Then Exit Sub
Select Case Target.Value
Case ">2001<"
Call 2001
Case ">2002<"
Call 2002
End Select

End Sub
 
@

@+Thierry

Guest
lol

sacré Steve !!!

bien sur que j'ai vu le fichier de STeplof... au fait où est la date pour faire agir les Select Case 2001 / 2002 ? je n'ai pu faire tourner que Franck et Olivier !!!

Comment çà "je complique les choses c'est incroyable !!!"
non pas du tout, bien au contraire c'est un code vraiment basiquement simple et rationnel où j'ai essayé de faire quelque chose qui fasse une panoplie d'exemples pour ce que tu cherches à faire!!! Tu dois pouvoir y trouver toutes sortes "d'inspiration" c'est tout !! c'est pas compliqué !! et je ne complique rien je te montre juste des exemples...

Dans ce code je n'ai pas essayé de prendre en considération toutes ces lignes de "trash" si dessus mais je suis reparti intégralement à zéro avec tes propres explications ! comme si ce fil avait démarré aujourd'hui à 15:19

Je ne suis pas allé longtemps à l'école (lol) mais j'ai appris au commencement par programmer en basic avec un commodore 64 dans les années 75/80 puis je me suis lancé dans l'aventure Windows... depuis je n'ai jamais décroché, c'est tout.... 500% autodidacte.... et à l'époque pas de net pour avoir de l'aide ou des CD rom pour avoir des exemples rééls...

Ce code n'est absolument pas compliqué, bien au contraire, ce sont des codes trafiqués dans tous les sens qui le sont, car on finit par se mélanger les pinceaux... Mais bon si tu as trouvé ton bonheur grace à Steplof tant mieux...

Tu verras avec le temps et la patience tu trouveras tout çà très simple...

Stepof tu m'expliques quand çà se met en marche ?

Select Case Year(Target.Value)
Case 2001
Call Macro2001
Case 2002
Call Macro2002
End Select

Moi je ne le vois pas marcher, je dois être trop "compliqué" !! lol

@+Thierry
 
@

@+Thierry

Guest
Bon en attendant j'ai pas pu m'empécher de faire quelque chose de compliqué !

Et le code de la macro événementielle fait 4 lignes et gère Franck, Olivier M2001 et M2002... "Just for the fun"

Et toujours pas d'"Intersector".. (y a pas besoin de Mad Max !!) , En plus il n'y a pas l'ombre de Select Case, pas de End If, pas de Call, pas de End Select, pas de Value ... pas grand chose (lol)

Au fait Steve regarde aussi le Module1, c'est pas du chinois, c'est pas compliqué, c'est des boucles basic de chez VBA !! comme çà pas de copié/collé !

Bon allé zou je file me suis mis à la bourre avec cette complication !!
@+Thierry
 

Pièces jointes

  • Steve2.zip
    12.9 KB · Affichages: 22
S

steve

Guest
bonsoir

j'ai toucher ton amour propre?
Finalement je vais prendre ta macro car elle est beaucoup plus compliqué par contre pourrais tu me la simplifier plus car je veux que les macros date fonctionne quand la date de l' annee change.
je t'envoie la modif au niveau de la feuille.

j'espère que tu arrivera a dormir ce soir car je dois te prendre la tete .

ps:merci pour les boucles ou tes boucles je ne s'est plus.
 

Pièces jointes

  • Steve2.xls
    41.5 KB · Affichages: 54
S

steplof

Guest
Salut @+,

je ne doute pas qu'il existe plus simple, juste que n'ayant pas le 1/100e de tes connaissances en VBA, j'ai juste essayé de comprende ce qu'il voulait faire et aider "SON" code à fonctionner.

Il me semble que c'est réalisé, je ne doute pas que tu puisses faire faire ça plus facilement, pour tout t'avouer j'ai toujours pas trouvé a quoi ça pourrait lui être utile...


Bon pour répondre à ta question, la macro année elle se déclenche quand on saisit une date en g2, elle lance la macro correspondant à l'année saisie enfin je crois.

Je te le répète c'est juste adapter son code pour arriver au résultat qu'il souhaite.
Pour moi le VBA c'est juste pour me faciliter la vie professionnelle: j'ai horreur de gratter du papier et ce forum (et toi en particulier) m'a fait découvrir la puissance qu'on pouvait tirer d'Excel (que j'utilisais déjà pas mal avec les formules et les TCD).
Quand je réponds aux gens c'est aussi une façon de vous exposer mes erreurs et de pouvoir progresser un peu plus s vous me les corrigez.c'est pour me permettre de comprendre un peu plus le langage etme familiariser avec ses instructions.

Là en l'occurence, je me suis satisfait de ne pas me faire virer par le compilateur et a priori d'obtenir ce que voulait Steve, n'oublie pas je ne suis que dans mes premiers pas en VBA (y a un mois je ne savais pas faire apparaitre une Msgbox et écrire une valeur dans une cellule en VBA...).

En l'occurence, merci de me dire si mon code ne fait pas ce que j'ai compris qu'il devait faire?

Dim IsectA8 As Range
Dim isectG2 As Range
'ça permet de sortir du prog si on a une range qui fait plus d'une cellule

If Target.Columns.Count > 1 Or Target.Rows.Count > 1 Then Exit Sub
'ce qui evite l'erreur incompatibilité de types quand on compare target.value
'car seule une cellule a une value pau une plage de plusieurs cellules

Set IsectA8 = Application.Intersect(Range("a8"), Target)
' target =cellule cliquée si c'est a8 il aura la valeur en a8 issue de la liste de validation
'appelle la macro correspondant à la valeur de a8

If Target.Value = "franck" Then Call franck

If Target.Value = "olivier" Then Call olivier

Set isectG2 = Application.Intersect(Range("g2"), Target)
'idem pour la cellule G2

'si g2 n'est pas la cellule cliquée on sort du prog
If isectG2 Is Nothing Then Exit Sub

'sinon on lance la macro correpondant à l'année de la date en g2
Select Case Year(Target.Value)
Case 2001
Call Macro2001
Case 2002
Call Macro2002

End Select

Si je suis dans l'erreur dans une interprétation merci de me corriger, je suis d'accord avec toi ça me parait stupide en l'espèce d'utiliser Intersect mais ...


Ben bonne soirée

Steplof
 
@

@+Thierry

Guest
Ouh Là là !!

Quel Fil !! on va battre celui que j'ai eu avec Fab !! quoiqu'avec lui c'était un double fil avec une trentaine de post en synchronisation !! lol il doit s’en souvenir autant que moi !! (voir ses souhaits pour Noël !!)

Bon alors pour Toi StepLof,
Sutout ne pense pas du tout que je voulais te critiquer en quoi que ce soit et j'ai très bien compris que ton but était d'essayer de faire marcher ce truc qui était en état de bric et de broc... Tu y es pas trop mal arrivé... Moi j'ai carrément rennoncé.. car je trouvais vraiment pas l'utilité de se compliquer la vie (c'est le cas de le dire et pas un jeu de mot, vu ce que Steve à dit plus tard)
Pour ce qui est de la date en G2, non çà ne marche pas...
Primo la macro cherche une string "2001" ou "2002" et pas une valeur date. Secondo même en tapant 2001 ou 2002 en G2, rien ne se passe... Je ne pourrais te dire pourquoi vu que je ne me suis pas cassé la tête à essayer de comprendre ce code. ce doit sûrement être le intersect avec la variable qui te fait éjecter comme la dit Ti bien plus haut, il a compris d'ailleurs que ce fil était parti pour faire un serpent à neud !!

En vrac pour tes commentaires
Dim => Non ça ne permet pas de sortir du prog ! c'est juste la déclaration de la variable en Range (c'est a dire que ta variable sera Une Cellule ou bien Une Plage de Cellule)

Pour le Target.Columns.Count...etc Euf là c'est proche du plantage d'ailleurs essaies juste une macro comme çà et tu comprendras :
Sub test()
If target.Columns.Count > 1 Or target.Rows.Count > 1 Then
MsgBox "toto"
Exit Sub
End If
Pour le reste j'arrête car ça va me donner mal à la tête !! lol
Mais pour conclure tu es un « Excellent » éleve !!

Maintenant à nous deux Steve,
Tu penses avoir touché mon amour propre... Sacré Steve, si je devais être touché dans mon amour propre à chaque fois qu'il y a un post désobligeant dans les forums... je ne les fréquenterais pas... et si je suis encore dans cette ficelle en train d'essayer de dépatouiller ce sac de nœuds c’est que ce qui me touche à cœur c’est surtout de tenter de t’aider... Car j'essaie (difficilement) de te faire comprendre que le VBA n'est pas compliqué c'est tout...
Quand à me prendre la tête, tu n'y arriveras pas... aucun ordi n'y est arrivé !!! y a que les filles qui y arrivent (lol)
Sinon, oui, envoie nous la feuille pour les années avec l'explication "détaillée" de ce que tu veux ...

Bonne Nuit à tous les deux !!
@+Thierry
 
@

@+Thierry

Guest
Tiens STeve
Pas vrament compliqué...
çà change comme tu veux : "je veux que les macros date fonctionne quand la date de l' annee change"

Cette fois ci tu devrais enfin comprendre
et beaux rêves en VBA !!
@+Thierry
 

Pièces jointes

  • Steve3.zip
    11.3 KB · Affichages: 22
S

steve

Guest
re bonsoir

j'avais oublier de preciser que mon classeur fait 4.10 MO difficile de le mettre en piece jointe il y a de quoi si perdre.
Merci pour tes applications tu me sauve.

bonne nuit.

steve
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…