Ne comprend pas ce code

Bonjour à tous,

Mon souci est que je ne connai pas du tout le "systeme" pour coder sous visual basic editor, j'ai certe essayer mais sans résultat!

Ou me faut-il ecrire le code puis est-ce à partir de ma feuille1 ou 2?

car quand j'ai essayer, et, que j'ai ecrit mon code en voulant l'executer, ca m'ouvrait une autre fenetre nommée Module1(par défaut je pense) avec ce meme code, et donc je me retrouve avec 2 fenetres contenant le meme code.

Ce que j'aimerait savoir donc , c'est comment accéder a la bonne fenetre pour coder!

Merci.

normalement ce conde est bon non?

Il est ecrit dans le code de la feuil1

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Feuil2.Range(A4) = " " Then

Feuil1.Range(A4) = " "

End If

End Sub

Pourquoi cela ne marche pas?

Bonjour,

Clique droite sur l'onglet puis "visualiser le code" te permet de faire un code qui sera actif pour les actions à effectuer dans la feuille.

Si tu enregistres ta macro via l'enregistreur automatique (Outils / Macro / Nouvelle Macro), le code sera enregistré dans un module.

Tu peux aussi créer un module en VBA par toi même comme ceci :

  • ALT + F11 pour aller dans VBA
  • Insertion / Module pour afficher une fenêtre vide te permettant de completer.

Sache que tu peux toujours coder dans un module et appeler un code depuis un autre code se trouvant dans ta feuille. C'est le mieux à faire d'ailleurs.

Amicalement

Dan

4fernand-xlp.xlsm (34.30 Ko)

Oui ca je sais comment faire pour y aller.

En ecrivant mon code dans le module bien qu'il soit correct (enfin il me semble) rien ne se passe?

re,

Normal qu'il ne fonctionne pas car :

  • Quelques erreurs de code
  • tu places ce code dans un module alors qu'il doit être placé dans la feuille 2.

Pour t'expliquer :

Les macros PRIVATE sont placées dans les feuilles. Les macro SUB (PUBLIC SUB) sont placées dans un module et exécutées via un bouton ou un appel d'une autre macro.

Donc clique droite sur la feuille 2 puis place ton code corrigé :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("A4") = "" Then Sheets("Feuil1").Range("A4") = ""
End Sub

Amicalement

Dan

PS :

Si tu veux placer ce code dans la feuille 1, change "feuil1" par "feuil2"

2classeur1-1.xlsm (28.79 Ko)

Merci Dan!

Mais biensur quand une chose marche d'autres chose ne vont pas!!! lol

Donc en fait maintenant quand je laisse ma combox de ma feuil2 vide, la cellule de ma feuil1 est vide, ca c'est bon

mais si je choisi quelque chose dans ma combobox et que donc je la remplie, ma cellule de la feuil1 reste vide, ca moins bien lol

Une idée du pourquoi?

Et a chaque fois que j'execute le code(que tu ma passé) ca m'ouvre une autre fenetre Module1, me faut-il écrire quelque chose entre ce qui suit?

Sub test()

End Sub

re,

Tu parles de combo. Là c'est moins clair par rapport au code.

Il s'agit d'une liste déroulante en A4 et dans quelle feuille ? Explique mieux ce que tu cherches à faire.

A te relire

Dan

J'ai ma feuil2 ou j'ai une comboBox et quand je choisi un truk de la liste ca me l'ecrit dans une cellule de ma feuil1, ca j'y arrive.

Mais le probleme est que si je veux laisser la comboBox vide ca me marque un "0" dans la cellule de la feuil1, et moi j'aimerai qu'elle soit vide.

je te joins un fichier au cas ou j'expliquerai pas trop bien!

https://www.excel-pratique.com/~files/doc2/testd_osmoz.xls

Re,

Merci de tes précisions. C'est plus clair.

On fait autrement.

Chaque fois que tu complètes ta colonne A en feuille 2, cela inscrira la même chose dans la feuille 1. Iden si tu supprimes une donnée de la feuille 2.

Code à placer dans la feuille 2 :

Private Sub Worksheet_Change(ByVal Target As Range)
'Macro Dan pour Kris0311 le 19/08/09
'http://forum.excel-pratique.com/viewtopic.php?t=12870
If Target.Column > 1 Then Exit Sub
If Not Intersect(Target, Range("A2:A" & Range("A65536").End(xlUp).Row + 1)) Is Nothing Then
Sheets("Feuil1").Range(Target.Address) = Target
End If
End Sub

Amicalement

Dan

c'est super!!!!

Un grand MERCI a toi d'avoir pris du temps pour m'aider!!!

PS: je risquais pas de sortir un code comme ca!!!

Re-bonjour a tous,

Dsl de revenir sur le sujet mais j'ai 2 petits problèmes:

1)Le code n'a pas l'air de marcher tout le temps, car si je fais plusieurs fois l'opération mettre quelque chose puis rien dans ma comboBox, après la derniere ligne modifier na change pas dans l'autre feuille!

2)j'ai essayer d'adapter le code à un autre fichier(numero de colonne qui change), mais bien qu'essayant de comprendre ton code Dan je n'arrive pas à voir ou tu specifie les colonne et de quelle feuille!

Merci.

Bonjour a tous,

Est-ce que quelqu'un pourrait m'expliquer ce code car comme dit auparavant je n'arrive pas a l'adapter a mon fichier, et donc j'aimerais le comprendre afin de pouvoir l'adapter?

Merci d'avance.

Private Sub Worksheet_Change(ByVal Target As Range)

'Macro Dan pour Kris0311 le 19/08/09

'https://forum.excel-pratique.com/viewtopic.php?t=12870

If Target.Column > 1 Then Exit Sub

If Not Intersect(Target, Range("A2:A" & Range("A65536").End(xlUp).Row + 1)) Is Nothing Then

Sheets("Feuil1").Range(Target.Address) = Target

End If

End Sub

Re

1)Le code n'a pas l'air de marcher tout le temps, car si je fais plusieurs fois l'opération mettre quelque chose puis rien dans ma comboBox, après la derniere ligne modifier na change pas dans l'autre feuille!

Donne moi un exemple pour comprendre le souci que tu as. Sinon tu peux changer la ligne

If Not Intersect(Target, Range("A2:A" & Range("A65536").End(xlUp).Row + 1)) Is Nothing Then 

par

If Not Intersect(Target, Range("A2:A65536")) Is Nothing Then

Vérifie bien que le code se trouve dans la feuille où tu as ta liste déroulante (ici feuille 2 dans ton fichier)

2)j'ai essayer d'adapter le code à un autre fichier(numero de colonne qui change), mais bien qu'essayant de comprendre ton code Dan je n'arrive pas à voir ou tu specifie les colonne et de quelle feuille!

Tu dois uniquement changer les références colonne A dans le code.

A te relire

Dan

Alors j'avais deja "reduit" le code et ca marche comme ce qui suit

If Not Intersect(Target, Range("A2:A4" )) Is Nothing Then

Donc pour mon premier probleme je pense que c'est bon!

Mais pour mon second(soit l'adaptation) :

J'ai ce code ecrit dans la feuil2 mais sans résultat.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Column > 1 Then Exit Sub

If Not Intersect(Target, Range("B20:B46")) Is Nothing Then

Sheets("Feuil1").Range(Target.Address) = Target

End If

End Sub

re,

Je ne comprends pas pourquoi tu utilises la feuille 2 pour récupérer tes infos dans la feuille 1. Pourquoi ne pas placer ta liste déroulante dans la feuille 1.

Si ce que tu veux faire est simplement une liste de référence en feuille 2 que tu utilises en feuille 1. Si c'est cela que tu veux faire, il faut juste une liste de validation de données.

Juste pour ton info, dans le code 2, tu n'as pas repris ce que je t'ai donné comme code...Normal que cela ne fonctionne pas donc.

il faut mettre

Private Sub Worksheet_Change(ByVal Target As Range) 

au lieu de

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

A te relire

Dan

Bonjour

Je pense également que le but est une liste déroulante en Feuille 1 faisant référence à la plage A2:A4 de la feuille 2.

Cela donnerait :

Fichier

et plus besoin de macro.

Amicalement

Nad

Alors en fait je fais cette selection dans la feuil2 car ma feuil1 sera caché car c'est un fichier qui mettra a jour une BDD.

Donc j'ai ma liste deroulante(en Feuil2) et quand je choisi une option elle se met automatiquement dans la cellule approprié de la feuil1 et mon probleme c'est que si je ne choisi rien dans ma liste deroulante ca me met un "0" dans cette cellule approprié et ca ce n'est pas bon, il ne faut rien dedans

PS: j'ai re-tenté sans le "selection" mais cela ne marche pas non plus

re,

Impossible que cela te donne 0 dans la feuille appropriée sauf tu y a mis une formule. Ce que tu ne dois plus faire puisque le code va placer la valeur lui même.

Donc en feuille 1, ta colonne A ne doit pas comporter de formule bien sûr. Supprime les puis choisis une valeur dans ta liste déroulante en feuille 2 et vois en feuille 1 le résultat.

Dan

Dans ma Feuil1 j'ai comme formule =Feuil2!B20 , ce qui me retranscri mon choix (mais me met le fameux "0" non desiré).

Et si je ne met pas de formule rien ne se passe, donc le code n'a aucun effet pourtant j'ai ce code en Feuil2:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column > 1 Then Exit Sub

If Not Intersect(Target, Range("B20:B46")) Is Nothing Then

Sheets("Feuil1").Range(Target.Address) = Target

End If

End Sub

qu'ai-je pus louper pour qu'il ne prenne pas le code en compte(j'execute apres chaque modif).

Rechercher des sujets similaires à "comprend pas code"