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

ombres7

Nouveau membre
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:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Définition des variables
iC = Target.Column
iR = Target.Row

'Remise à zéro de la puissance
If (iC = 41 And Cells(iR, 41) <> "" And Cells(iR, 41) <> 11) 
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

End Sub

Merci pour votre aide
 

zeb

Modérateur
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.
 

lam2

Nouveau membre
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:
Function ouverture(nom As String) As String

'Sub ouverture()

Dim var As String

Dim msg As String
msg = " Vous devez saisir une étiquette"
ActiveWorkbook.Worksheets("Fiche1").Activate


On Error Resume Next
nom = Worksheets("Fiche1").Range("Nom_projet").Value

Select Case nom

 Case Is = "Madrid"
   MsgBox (msg)
   Worksheets("Fiche1").Range("Identifiant").Value = " "
   
Case Is = "Paris"
Worksheets("Fiche1").Range("Identifiant").Value = Worksheets("Fiche_1").Range("En_tete").Value

Case Is = "Milan"
Worksheets("Fiche1").Range("Identifiant").Value = Worksheets("Fiche1").Range("En_tete").Value

end function

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

lam2

Nouveau membre
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

Modérateur
Les règles sont disponibles en haut à droite de toutes les pages du forum Programmation.



De plus, un des 4 premiers topics sur la première page du forum, reprend ces mêmes règles.



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.

Vous devez être connecté pour voir les images.


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.
 

zeb

Modérateur
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 ?
 

lam2

Nouveau membre
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
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 059
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut