FORUM Tom's Hardware » Programmation » Autre » [vba] Macro pour changer la valeur d'une case
 

[vba] Macro pour changer la valeur d'une case

Dandu Achats / Ventes : blanck197, stphane3590, 1 utilisateur anonyme et 119 utilisateurs inconnus
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [vba] Macro pour changer la valeur d'une case
 
Plus d'informations

Bonjour,
 
Je débute dans les macros excel et je bloc sur un souci:
 
Mon but est que lorsqu'on tape un chiffre différent de 11 dans la 41° colonne, pour toutes les cellules se trouvant sur la même ligne entre la colonne 11 et 28 et ayant pour valeur 1 la valeur passe à 0.
 
Je pensais avoir trouvé mais cela ne veut pas marché...  :cry:  
Voici mon code qui ne marche pas:
 

Code :
  1. Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  2. 'Définition des variables
  3. iC = Target.Column
  4. iR = Target.Row
  5. 'Remise à zéro de la puissance
  6. If (iC = 41 And Cells(iR, 41) <> "" And Cells(iR, 41) <> 11)
  7. Then If (Cells(iR, 11) = 1) Then Cells(iR, 11) = 0: If (Cells(iR, 12) = 1) Then Cells(iR, 12) = 0: If (Cells(iR, 13) = 1) Then Cells(iR, 13) = 0: If (Cells(iR, 14) = 1) Then Cells(iR, 14) = 0: If (Cells(iR, 15) = 1) Then Cells(iR, 15) = 0: If (Cells(iR, 16) = 1) Then Cells(iR, 16) = 0: If (Cells(iR, 17) = 1) Then Cells(iR, 17) = 0: If (Cells(iR, 18) = 1) Then Cells(iR, 18) = 0: If (Cells(iR, 19) = 1) Then Cells(iR, 19) = 0: If (Cells(iR, 20) = 1) Then Cells(iR, 20) = 0: If (Cells(iR, 21) = 1) Then Cells(iR, 21) = 0: If (Cells(iR, 22) = 1) Then Cells(iR, 22) = 0: If (Cells(iR, 23).Value = 1) Then Cells(iR, 23) = 0: If (Cells(iR, 24) = 1) Then Cells(iR, 24) = 0: If (Cells(iR, 25) = 1) Then Cells(iR, 25) = 0: If (Cells(iR, 26) = 1) Then Cells(iR, 26) = 0: If (Cells(iR, 27) = 1) Then Cells(iR, 27) = 0: If (Cells(iR, 28) = 1) Then Cells(iR, 28) = 0
  8. End Sub


 
Merci pour votre aide

zeb
Profil : Modérateur libre
Plus d'informations

Commence par écrire correctement. Le français, pas (trop) de problèmes. Mais alors le BASIC oulala.
 
N'utilise JAMAIS :o (sauf exception :D) le séparateur < : >
C'est moche et illisible.
 
Au lieu de faire 18 (!) lignes identiques à une composante près, utilise une boucle.
 
Où est le End If du If de la ligne 7 ?
 
Après avoir réécrit tout ça correctement, soit tu vois ton erreur et tu la corriges, soit tu reviens ici en nous montrant ton code nouveau et on en reparle.


Message édité par zeb le 03-07-2006 à 10:31:46
Plus d'informations

Je suis entrain d'écrire un petite macro me permettant de changer le contenu d'une cellule suivant les valeurs d'une autre cellule de type liste.
Problème, lorsque j'exécute la macro pas à pas, ma fonction est bien réalisée. par contre une fois sous Excel, les modifications des cellules ne sont pas prises en compte.
 Voici un aperçu de ma fonction
 

Code :
  1. Function ouverture(nom As String) As String
  2. 'Sub ouverture()
  3. Dim var As String
  4. Dim msg As String
  5. msg = " Vous devez saisir une étiquette"
  6. ActiveWorkbook.Worksheets("Fiche1" ).Activate
  7. On Error Resume Next
  8. nom = Worksheets("Fiche1" ).Range("Nom_projet" ).Value
  9. Select Case nom
  10. Case Is = "Madrid"
  11.    MsgBox (msg)
  12.    Worksheets("Fiche1" ).Range("Identifiant" ).Value = " "
  13.  
  14. Case Is = "Paris"
  15. Worksheets("Fiche1" ).Range("Identifiant" ).Value = Worksheets("Fiche_1" ).Range("En_tete" ).Value
  16. Case Is = "Milan"
  17. Worksheets("Fiche1" ).Range("Identifiant" ).Value = Worksheets("Fiche1" ).Range("En_tete" ).Value
  18. end function


 
Avez -vous une idée pour modifier le contenu d'une cellule à travers VB?
Merci d'avance


Message édité par lam2 le 07-12-2006 à 10:14:15
zeb
Profil : Modérateur libre
Plus d'informations

( MERCI DE LIRE LES REGLES AVANT DE POSTER A TORD ET A TRAVERS )

Plus d'informations

salut Zeb. Pourrais-tu m'indiquer où trouver les règles pour poster dans ce forum. Par ailleurs, vous devriez revoir votre façon de répondre aux gens. l'Internet ne signifie pas anarchie et soyez plus correct pour les prochaines fois

zeb
Profil : Modérateur libre
Plus d'informations

Les règles sont disponibles en haut à droite de toutes les pages du forum Programmation.
 
http://img.presence-pc.com/forum/themes_static/images_forum/1/annonce.gif Les règles du forum Programmation- A lire !
 
De plus, un des 4 premiers topics sur la première page du forum, reprend ces mêmes règles.
 
http://img.presence-pc.com/forum/themes_static/images_forum/1/flechesticky.gifhttp://img.presence-pc.com/forum/themes_static/images_forum/1/lock.gif http://img.presence-pc.com/forum/themes_static/images_forum/1/annonce.gif Quelques règles simples à respecter -- /! A lire avant de poster !
 

Citation :

Par ailleurs, vous devriez revoir votre façon de répondre aux gens. l'Internet ne signifie pas anarchie et soyez plus correct pour les prochaines fois.


 
Mais bien sûr, il n'est pas question que ce forum devienne anarchique. C'est pourquoi il y a ici des règles et des modérateurs pour les faire respecter. Merci donc d'en prendre connaissance.
 
Le non respect de ces règles est pour moi une forme d'impolitesse. Pourtant et inlassablement, je propose aux indélicats de se racheter. Le dépit devant cette tâche répétitive et ingrate transparaît parfois dans le ton de mes messages bien malgré moi. Pour ne pas avoir à le subir, merci donc de respecter les règles sans qu'on ait à le rappeler.
 
http://site.voila.fr/zulu-echo-bravo/img/ForumPolitesse.gif
 
Ma façon de répondre plus ou moins "correcte pour les prochaines fois", sera donc plus ou moins liée à la façon de respecter ce forum et les gens qui y postent et qui répondent aux questions.
 
 
Dans le cas particulier de Lam2, il s'agit de :
 

  • Ne pas polluer le topic d'ombres7 puisque tu n'amères pas une solution à son problème. Tu as par contre tout loisir de créer ton propre topic.
  • Utiliser la balise CODE à bon escient.
  • Faire preuve de bonne volonté. On obtient tellement plus rapidement la réponse à ces problèmes dans ce cas. Pour autant, tu es libre d'exprimer tes humeurs et de donner ton avis, ça peut toujours être utile.


Message édité par zeb le 06-12-2006 à 17:23:41
zeb
Profil : Modérateur libre
Plus d'informations

A bien regarder ton code, je ne comprends pas pourquoi ça plante. Par contre la ligne 12 empêche Excel/VBA de signaler une éventuelle erreur. En phase de test, il faut mieux ne pas utiliser On Error Resume Next.
 
Je vois que tu as fais quelques essais ;) (Sub/Function, il manque la fin du select, etc.) Quand tu testes en mode function, j'espère que tu enlève la ligne 13 !
 
Alors que donne cette fonction sans ces quelques lignes ?

Plus d'informations

Merci Zeb pour tes remarques. Effectivement je faisais quelques essais , d'où le code incomplet. Mais , le programme marche parfaitement lorsque je le déclare comme une procédure (Sub). Mais pour l'exécuter, je suis obligé de cliquer sur l'onglet exécuter de VB ou de la déclarer comme un " sub auto_open()". Ainsi, la procédure s'exécute une seule fois l'ors de l'ouverture de la fiche Excel concernée. Une fois la fiche ouverte, lorsque je sélectionne une autre valeur de ma liste, plus rien ne se passe. Tout mon problème se situe à ce niveau. Comment arriver à  continuer à exécuter la procédure sans fermer la fiche pour la rouvrir à nouveau, ou sans aller dans l'environnement de dev de VB.
 
Merci et très bonne fin de semaine

zeb
Profil : Modérateur libre
Plus d'informations

Citation :

suivant les valeurs d'une autre cellule de type liste.

Citation :

lorsque je sélectionne une autre valeur de ma liste, plus rien ne se passe


 
Je ne saisi pas tout à propos de ton histoire de liste.
 
A tout hasard, regarde du côté de Workbook_SheetChange ?


Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » Autre » [vba] Macro pour changer la valeur d'une case
 

Annonces Google
Publicité