A voir également:
- VBA simple
- Iphone 14 simple - Guide
- Simple ocr - Télécharger - Bureautique
- Organigramme simple - Guide
- Excel compter cellule couleur sans vba - Guide
- Mkdir vba ✓ - Forum VB / VBA
10 réponses
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
2 nov. 2017 à 13:59
2 nov. 2017 à 13:59
Bonjour,
déjà :
Regarde la méthode
L'objet target étant la cellule (ou plage de cellules) modifiées.
Et pour cibler la colonne M
Il ne te reste plus qu'à faire un IF pour tester ta condition et à écrire la formule à la colonne souhaitée.
NB: Pour écrire une formule regarde la propriété : formulalocal
déjà :
ne pas devoir appuyer sur un bouton pour activer le macro il faut qu'il s'active en permanenece apres avoir écrit en colonne "M"
Regarde la méthode
Private Sub Worksheet_Change(ByVal Target As Range) End Sub
L'objet target étant la cellule (ou plage de cellules) modifiées.
Et pour cibler la colonne M
If Not Application.Intersect(Target, Range("M:M")) Is Nothing Then 'Tu es en colonne "M" ligne = target.Row 'ligne où tu te trouves '... le reste de ton code End If
Il ne te reste plus qu'à faire un IF pour tester ta condition et à écrire la formule à la colonne souhaitée.
NB: Pour écrire une formule regarde la propriété : formulalocal
Super sympa, cependant c'est le premier code que je vais essayer de faire moi même alors la du coup je sus paumé.
Bon j'ai fait click droit sur ma feuille puis cliquer sur visualiser le code.
Ensuit j'ai choisis "Worksheet"
et la voila mon code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M12:M65")) Is Nothing Then
="Diminution_de_vitesse"
ligne = Target.Row
Range("AL12:AL65") =SI(AG12="";"";(60-(60/(RECHERCHEV(B12;$L$3:$BC$8;41;FAUX)/AG12)))/(60/AJ12))
End If
End Sub
Evidement rien ne fonctionne
Il me faut un gros gros éclaircissement SVP
En clair je me debrouille parfaitement avec les formule mais la partie VBA la j'ai tout a apprendre
Merci d'avance
Bon j'ai fait click droit sur ma feuille puis cliquer sur visualiser le code.
Ensuit j'ai choisis "Worksheet"
et la voila mon code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M12:M65")) Is Nothing Then
="Diminution_de_vitesse"
ligne = Target.Row
Range("AL12:AL65") =SI(AG12="";"";(60-(60/(RECHERCHEV(B12;$L$3:$BC$8;41;FAUX)/AG12)))/(60/AJ12))
End If
End Sub
Evidement rien ne fonctionne
Il me faut un gros gros éclaircissement SVP
En clair je me debrouille parfaitement avec les formule mais la partie VBA la j'ai tout a apprendre
Merci d'avance
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
Modifié le 3 nov. 2017 à 12:28
Modifié le 3 nov. 2017 à 12:28
Déjà...Pour poster du code sur le forum.. merci d'utiliser la coloration syntaxique (les balises de code).
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Ensuite,
hors.. moi je t'ai indiqué :
Et puis.. ton code devrait ressembler à un truc du genre
A voir au niveau des guilllemets si j'ai mis le bon nombre.. j'ai codé de tête
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Ensuite,
et la voila mon code :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
hors.. moi je t'ai indiqué :
Sub Worksheet_Change
Et puis.. ton code devrait ressembler à un truc du genre
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Target, Range("M12:M65")) Is Nothing Then if Target.Value ="Diminution_de_vitesse" Then ligne = Target.Row cells(ligne,"AL").formulalocal = "=SI(AG" & ligne & ="""";"""";(60-(60/(RECHERCHEV(B" & ligne & ";$L$3:$BC$8;41;FAUX)/AG" & lilgne & ")))/(60/A" & ligne & "))" End If End If End Sub
A voir au niveau des guilllemets si j'ai mis le bon nombre.. j'ai codé de tête
Génial Mec tu est un vrai petit génie!!
Effectivement problème de guillement c'est corrigé
Il me reste un dernier problème le code fonctionne bien et ce sur chaque ligne de la sélection. par contre ma formule ne s'étire pas elle reste figée
Or pour moi il faudrait quelle soit évolutive pour les partie mise en gras
12 quand ligne 12
14 quand ligne 14
16 quand ligne 16
.....
=SI(AG12="";"";(60-(60/(RECHERCHEV(B12;$L$3:$BC$8;41;FAUX)/AG12)))/(60/AJ12))
Effectivement problème de guillement c'est corrigé
Il me reste un dernier problème le code fonctionne bien et ce sur chaque ligne de la sélection. par contre ma formule ne s'étire pas elle reste figée
Or pour moi il faudrait quelle soit évolutive pour les partie mise en gras
12 quand ligne 12
14 quand ligne 14
16 quand ligne 16
.....
=SI(AG12="";"";(60-(60/(RECHERCHEV(B12;$L$3:$BC$8;41;FAUX)/AG12)))/(60/AJ12))
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("M12:M65")) Is Nothing Then
If Target.Value = "Diminution_de_vitesse" Then
ligne = Target.Row
Cells(ligne, "AL").FormulaLocal = "=SI(AG12="""";"""";(60-(60/(RECHERCHEV(B12;$L$3:$BC$8;41;FAUX)/AG12)))/(60/AJ12))"
End If
End If
End Sub
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
2 nov. 2017 à 16:16
2 nov. 2017 à 16:16
C'est ce que j'avais fait avec la concaténation de la variable ligne..
Re bonjour,
Et encore merci a toi jordane45
Ehhhhh ... j'ai pas bien compri ton dernier message, "C'est ce que j'avais fait avec la concaténation de la variable ligne.." c'est a dire??
car j'ai fait le test et quelle que soit la ligne il me laisse la même formule.
Y a t-il une astuce qui permetterais d'adapter la formule en fonction de la ligne?
Ou je suis obliger de créer un macro par ligne?
Et encore merci a toi jordane45
Ehhhhh ... j'ai pas bien compri ton dernier message, "C'est ce que j'avais fait avec la concaténation de la variable ligne.." c'est a dire??
car j'ai fait le test et quelle que soit la ligne il me laisse la même formule.
Y a t-il une astuce qui permetterais d'adapter la formule en fonction de la ligne?
Ou je suis obliger de créer un macro par ligne?
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
3 nov. 2017 à 12:28
3 nov. 2017 à 12:28
Je t'avais donné la ligne de code :
Alors que toi tu as remis :
Ne vois tu pas la différence ???
cells(ligne,"AL").formulalocal = "=SI(AG" & ligne & ="""";"""";(60-(60/(RECHERCHEV(B" & ligne & ";$L$3:$BC$8;41;FAUX)/AG" & lilgne & ")))/(60/A" & ligne & "))"
Alors que toi tu as remis :
Cells(ligne, "AL").FormulaLocal = "=SI(AG12="""";"""";(60-(60/(RECHERCHEV(B12;$L$3:$BC$8;41;FAUX)/AG12)))/(60/AJ12))"
Ne vois tu pas la différence ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Pardon,
Effectivement je vois bien la différence.
Je te remercie de ta patience, je vien de trouver pourquoi la tienne ne fonctionnait pas non plus et voici le résultat
1 manque 1 guillement
2 lilgne au lien de ligne
3 A au lieu de AJ
Encore un tout grand merci!!
Globalement je commence un petit peu a comprendre je vais analyser ce code point par point et verrais si il y a des chose a comprendre
Merciiiiiiiiii
Effectivement je vois bien la différence.
Je te remercie de ta patience, je vien de trouver pourquoi la tienne ne fonctionnait pas non plus et voici le résultat
cells(ligne,"AL").formulalocal = "=SI(AG" & ligne & ="""";"""";(60-(60/(RECHERCHEV(B" & ligne & ";$L$3:$BC$8;41;FAUX)/AG" & lilgne & ")))/(60/A" & ligne & "))"
Cells(ligne, "AL").FormulaLocal = "=SI(AG" & ligne & "="""";"""";(60-(60/(RECHERCHEV(B" & ligne & ";$L$3:$BC$8;41;FAUX)/AG" & ligne & ")))/(60/AJ" & ligne & "))"
1 manque 1 guillement
2 lilgne au lien de ligne
3 A au lieu de AJ
Encore un tout grand merci!!
Globalement je commence un petit peu a comprendre je vais analyser ce code point par point et verrais si il y a des chose a comprendre
Merciiiiiiiiii
Bonsoir,
Je fait des heures supp la afin d'essyer de cloturer ma base de donnée pour ce lundi. et je constate deux petit bug dans notre VBA.
1 Le premier est que si la personne qui encode place en colonne "M" diminution de vitesse (via une liste validation de donnée) "Diminution_de_vitesse" et puis pour finir il change d'avis et selectionne autre chose la formule reste dans la colonne "AL"
2 deuxième qui est plus embètant encore, une fois que toutes les donnée sont encodée dans le formulaire, j'ai créer un petit macro qui va les sauvegarder sur une autre page (c'est ok ) et qui pour finir va vider le formulaire (un simple delete) et lorsque l'on fait un Delete en colonne "M" gros bug et voici la ligne qui est ciblée lors du bug : (erreur d'exécution 13)
Alors avez vous encore une idée pour ce petit réglage?
Encore une fois merci d'avance
Je fait des heures supp la afin d'essyer de cloturer ma base de donnée pour ce lundi. et je constate deux petit bug dans notre VBA.
1 Le premier est que si la personne qui encode place en colonne "M" diminution de vitesse (via une liste validation de donnée) "Diminution_de_vitesse" et puis pour finir il change d'avis et selectionne autre chose la formule reste dans la colonne "AL"
2 deuxième qui est plus embètant encore, une fois que toutes les donnée sont encodée dans le formulaire, j'ai créer un petit macro qui va les sauvegarder sur une autre page (c'est ok ) et qui pour finir va vider le formulaire (un simple delete) et lorsque l'on fait un Delete en colonne "M" gros bug et voici la ligne qui est ciblée lors du bug : (erreur d'exécution 13)
If Target.Value = "Diminution_de_vitesse" Then
Alors avez vous encore une idée pour ce petit réglage?
Encore une fois merci d'avance
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
Modifié le 4 nov. 2017 à 23:49
Modifié le 4 nov. 2017 à 23:49
Pour le 1 .. il suffit de mettre un ELSE dans lelquel tu fixes la valeurs de la cellule à vide ( ="")
Et pour le 2 ... il faux boucler sur chaque cellule de la plage correpodnant à l'intersection de la target de de la plage que tu as fixé
par exemple :
Et pour le 2 ... il faux boucler sur chaque cellule de la plage correpodnant à l'intersection de la target de de la plage que tu as fixé
par exemple :
Private Sub Worksheet_Change(ByVal Target As Range) Dim workRng As Range Set workRng = Application.Intersect(Target, Range("M12:M65")) If Not workRng Is Nothing Then For Each C In workRng ligne = C.Row If C.Value = "Diminution_de_vitesse" Then ' le reste de ton code ' ' ' Else Range("AL" & ligne).Value = "" End If Next End If End Sub
Bonsoir Jordane,
Encore une fois merci pour ton code qui fonctionne parfaitement!!
Je commence un peut a comprendre certaine partie des code VBA et grace a toi j'ai reussi a "doubler" le code et ca fonctionne parfaitement!!
Bon par contre quand j'essaye d'ajouter un 3ème et que j'active la conditio, excel plante completement.
Voici ce que j'essaye d'intégrer just avant le end sub final
et voici le code complet
Encore une fois merci pour ton code qui fonctionne parfaitement!!
Je commence un peut a comprendre certaine partie des code VBA et grace a toi j'ai reussi a "doubler" le code et ca fonctionne parfaitement!!
Bon par contre quand j'essaye d'ajouter un 3ème et que j'active la conditio, excel plante completement.
Voici ce que j'essaye d'intégrer just avant le end sub final
If [F3] <> "" Then
[F43] = "=SI(OU(JOURSEM(F3;1)=2;JOURSEM(F3;1)=3;JOURSEM(F3;1)=4;JOURSEM(F3;1)=5);8;SI(JOURSEM(F3;1)=6;6;"à compléter"))"
Else
[F43] = ""
End If
et voici le code complet
Private Sub Worksheet_Change(ByVal Target As Range)
'Mise en place de la formule en colone AL si il fait ecrit diminution de vitesse en colone M
Dim workRng As Range
Set workRng = Application.Intersect(Target, Range("M12:M65"))
If Not workRng Is Nothing Then
For Each C In workRng
ligne = C.Row
If C.Value = "Diminution_de_vitesse" Then
ligne = Target.Row
Cells(ligne, "AL").FormulaLocal = "=SI(AG" & ligne & "="""";"""";(60-(60/(RECHERCHEV(B" & ligne & ";$L$3:$BC$8;41;FAUX)/AG" & ligne & ")))/(60/AJ" & ligne & "))"
Else
Range("AL" & ligne).Value = ""
End If
Next
End If
'Mise en place de la formule en colone AN si il fait ecrit "nimporte quoi" en colone F
Set workRng = Application.Intersect(Target, Range("F12:f65"))
If Not workRng Is Nothing Then
For Each C In workRng
ligne = C.Row
If C.Value <> "" Then
ligne = Target.Row
Cells(ligne, "AN").FormulaLocal = "=SI(F12<>"""";1;"""")"
Else
Range("AN" & ligne).Value = ""
End If
Next
End If
'Mise en place de la formule F8 si "quelque chose" en F3
End Sub
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
5 nov. 2017 à 21:40
5 nov. 2017 à 21:40
Ca plante sur quel ligne ?
tu as essayé de mettre un point d'arrêt dans ton code puis de l'exécuter en mode pas à pas ?
Et puis.. tu écris :
Hors.. il me semble que ça ne fonctionne pas. (j'ai fait une erreur dans mon premier message)
C'est pour ça que j'ai modifié ensuite dans le code que je t'ai donné en :
tu as essayé de mettre un point d'arrêt dans ton code puis de l'exécuter en mode pas à pas ?
Et puis.. tu écris :
Cells(ligne, "AN")
Hors.. il me semble que ça ne fonctionne pas. (j'ai fait une erreur dans mon premier message)
C'est pour ça que j'ai modifié ensuite dans le code que je t'ai donné en :
Range("AN" & ligne)
Ehh et bien pourtant lorsque j'utiliste le "code complet" comme je viens de l'envoyer ca fonctionne parfaitement chez moi.
La ou ca bug c'est quand je rajoute la 3 eme condition :
Je la place just avant le end sub final, lorsque je le place il me met cette ligne en rouge :
et puis je quite le vba je change la valeur en F3 et la boummmm ca bug complètement,je ne sait pas ou, car excel plante complètement.
Et quand tu parle de point d'arret et de "pas a pas" ca me dit rien j'ai jamais entendu parler de ca :s
Encore merci de ta patience mec ;)
La ou ca bug c'est quand je rajoute la 3 eme condition :
Je la place just avant le end sub final, lorsque je le place il me met cette ligne en rouge :
[F43] = "=SI(OU(JOURSEM(F3;1)=2;JOURSEM(F3;1)=3;JOURSEM(F3;1)=4;JOURSEM(F3;1)=5);8;SI(JOURSEM(F3;1)=6;6;"à compléter"))"
et puis je quite le vba je change la valeur en F3 et la boummmm ca bug complètement,je ne sait pas ou, car excel plante complètement.
If [F3] <> "" Then
[F43] = "=SI(OU(JOURSEM(F3;1)=2;JOURSEM(F3;1)=3;JOURSEM(F3;1)=4;JOURSEM(F3;1)=5);8;SI(JOURSEM(F3;1)=6;6;"à compléter"))"
Else
[F43] = ""
End If
Et quand tu parle de point d'arret et de "pas a pas" ca me dit rien j'ai jamais entendu parler de ca :s
Encore merci de ta patience mec ;)
jordane45
Messages postés
38424
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 février 2025
4 734
5 nov. 2017 à 22:09
5 nov. 2017 à 22:09
https://www.commentcamarche.net/contents/1381-debogage
Bonsoir,
Merci pour ces infos très utiles.
Je viens de tester le "pas a pas" et voici sur quelle ligne le code plante :
Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet.
Personnellement ca m'aide pas plus mais j'espere que tu va pouvoir m'éclairer encore une fois
Merci a toi (encore une fois :) )
Merci pour ces infos très utiles.
Je viens de tester le "pas a pas" et voici sur quelle ligne le code plante :
[F43] = "=SI(OU(JOURSEM(F3;1)=2;JOURSEM(F3;1)=3;JOURSEM(F3;1)=4;JOURSEM(F3;1)=5);8;SI(JOURSEM(F3;1)=6;6;""à compléter""))"
Erreur d'exécution '1004':
Erreur définie par l'application ou par l'objet.
Personnellement ca m'aide pas plus mais j'espere que tu va pouvoir m'éclairer encore une fois
Merci a toi (encore une fois :) )