Problème Visual Basic pour excel

Manu40300

XLDnaute Nouveau
Bonjour à tous,
Je me lance tout juste dans la programmation avec Visual Basic pour excel. Je connaissais déjà la programmation sur calculatrice casio qui ressemble un peu et je sais ce que c'est, quand on obtient pas ce qu'on veut, on rajoute des fonctions et des fonctions pour que ça marche et notre programme fait plusieurs pages alors qu'il pourrait être écrit sur quelques lignes.
Bref, pour faire simple, le but de la manoeuvre est de masquer certaines lignes suivant la valeur d'une cellule et ce sur plusieurs cellules sachant que suivant la cellule, les lignes à masquer sont différentes. Jusque là, j'ai réussi à m'en sortir même si je pense que j'aurai pu faire plus court.
Le problème, c'est qu'une fois que j'ai changé la valeur de ma cellule,je voudrai que la macro me fasse revenir automatiquement sur ma cellule après avoir masquer les lignes. Or, en l'occurence la, il va jusqu'à la fin du programme et me retrouve donc à chaque fois sur la cellule B17.
Si quelqu'un pouvait m'aider, ça serait sympa.
Voici mon programme :
Sub Worksheet_Change(ByVal Target As Range)
If Range("B10") = "1" Then
Rows("33:34").Select
Selection.EntireRow.Hidden = True
Cells(10, 2).Activate
End If
If Range("B10") = "2" Then
Rows("33:34").Select
Selection.EntireRow.Hidden = False
Cells(10, 2).Activate
End If
If Range("B12") = "1" Then
Rows("35:35").Select
Selection.EntireRow.Hidden = True
Cells(12, 2).Activate
End If
If Range("B12") = "2" Then
Rows("35:35").Select
Selection.EntireRow.Hidden = False
Cells(12, 2).Activate
End If
If Range("B15") = "1" Then
Range("21:21,28:28,30:32").Select
Selection.EntireRow.Hidden = True
Cells(15, 2).Activate
End If
If Range("B15") = "2" Then
Range("21:21,28:28,30:32").Select
Selection.EntireRow.Hidden = False
Cells(15, 2).Activate
End If
If Range("B17") = "1" Then
Rows("27:27").Select
Selection.EntireRow.Hidden = True
Cells(17, 2).Activate
End If
If Range("B17") = "2" Then
Rows("27:27").Select
Selection.EntireRow.Hidden = False
Cells(17, 2).Activate
End If
End Sub
Merci à tous, Manu
 

Manu40300

XLDnaute Nouveau
Re : Problème Visual Basic pour excel

Merci à toi pierrot, ça marche nickel mais en fait ce n'est pas ce qu'il faut que je fasse.
J'ai mal posé ma question et je m'en excuse car en fait je voudrais pouvoir décider moi même sur quelle cellule il doit aller à la fin de la condition donc pas forcément sur la cellule d'origine.
Il y a t'il une possibilité d'isoler chaque condition, en gros que la condition s'exécute si je change la valeur de la cellule et qu'il passe ainsi les autres conditions.
Merci,
Manu
 

Manu40300

XLDnaute Nouveau
Re : Problème Visual Basic pour excel

Re,

Oui après je ne sais pas si j'ai bien tapé mon truc, je débute complètement, en gros depuis hier soir donc je suis à la période "je tente des choses". Et puis j'ai pas trouvé de guide pratique explicite pour débuter et de préférence complet, si tu as une adresse, je suis preneur.
La fonction Target Select fonctionne bien si tu veux vraiment revenir sur ta cellule d'origine mais moi je veux à travers ma macro lui dire où aller suivant le résultat de ma cellule et ce pour chaque cellule que je change. J'ai remplacé les activate des Cells(21, 2).Activate par des select mais je n'observe pas de changement.
Merci de ne pas m'abandonner. Manu
 

Manu40300

XLDnaute Nouveau
Re : Problème Visual Basic pour excel

Je crois que tu ne me comprends pas alors je te poste le nouveau programme qui a un petit peu changé au niveau des valeurs. Le fait est que peut importe la cellule que je change entre B10 et B20, il me renvoie toujours sur la cellule H20 alors que je voudrais qu'il aille où je lui demande (ex : pour la première condition, je voudrai qu'il aille en H10...etc). En espérant que tu auras compris ce que je veux. Manu

Sub Worksheet_Change(ByVal Target As Range)
If Range("B10") = "1" Then
Rows("35:36").Select
Selection.EntireRow.Hidden = True
Cells(10, 8).Select
End If
If Range("B10") = "2" Then
Rows("35:36").Select
Selection.EntireRow.Hidden = False
Cells(12, 2).Select
End If
If Range("B14") = "1" Then
Rows("38:38").Select
Selection.EntireRow.Hidden = True
Cells(15, 2).Select
End If
If Range("B14") = "2" Then
Rows("38:38").Select
Selection.EntireRow.Hidden = False
Cells(15, 2).Select
End If
If Range("B18") = "1" Then
Range("24:24,31:31,33:35").Select
Selection.EntireRow.Hidden = True
Cells(18, 8).Select
End If
If Range("B18") = "2" Then
Range("24:24,31:31,33:35").Select
Selection.EntireRow.Hidden = False
Cells(20, 2).Select
End If
If Range("B20") = "1" Then
Rows("30:30").Select
Selection.EntireRow.Hidden = True
Cells(20, 8).Select
End If
If Range("B20") = "2" Then
Rows("30:30").Select
Selection.EntireRow.Hidden = False
Cells(22, 2).Select
End If
End Sub
 

Manu40300

XLDnaute Nouveau
Re : Problème Visual Basic pour excel

En réalité si la valeur dans la cellule B20 = 1, je fini dans la cellule H20 et si la valeur dans la cellule B20 = 2, je fini dans la cellule B22 et ce peut importe la cellule que je change entre B10 et B20. Salut à toi mécano41 et merci de t'être penché sur mon problème mais ce n'est pas ça car je reviens toujours sur la cellule que je viens de modifier. SVP, ne m'abandonner pas. Manu
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Problème Visual Basic pour excel

Bonjour le fil, bonjour le forum,

Peut-être comme ça :

Code:
Sub Worksheet_Change(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl (PLage)
Dim test As Boolean 'déclare la variabe test

Set pl = Application.Union(Range("B10"), Range("B12"), Range("B15"), Range("B17")) 'définit la plage pl
If Application.Intersect(Target, pl) Is Nothing Then Exit Sub 'si le changement a lieu ailleurs que dans la plage pl, sort de la procédure
If Target.Value = "1" Then test = True Else test = fasle 'définit la variable test
Select Case Target.Row 'agit en fonction du numéro de ligne de la cellule éditée
    Case 10 'cas ligne 10
        Rows("33:34").Hidden = test 'masque/affiche les lignes 33 et 34
    Case 12 'cas ligne 12
        Rows("35:35").Hidden = test 'masque/affiche la ligne 35
    Case 15 'cas ligne 15
        Range("21:21,28:28,30:32").EntireRow.Hidden = test 'masque/affiche les lignes 21, 28, 30, 31 et 32
    Case 17 'cas ligne 17
        Rows("27:27").Hidden = True 'masque/affiche la ligne 27
End Select 'fin de l'action en fonction de...
Target.Select 'sélectionne la cellule éditée
End Sub

[Édition]

J'avais pas actualisé donc la dernière ligne n'est pas bonne... Mais ça gave les changements d'idée où il faut réécrire le code ! Perso, j'ai plus le courage...
 
Dernière édition:

Manu40300

XLDnaute Nouveau
Re : Problème Visual Basic pour excel

Chiotte, je n'arrive vraiment pas à obtenir ce que je veux. Merci pour ce que tu as fait robert mais ça ne marche pas comme je veux. Quand je modifie la valeur de la cellule, ça me renvoies à celle d'en dessous. Je veux que par exemple

If Range("B10") = "1" Then
Rows("35:36").Select
Selection.EntireRow.Hidden = True
Cells(10, 8).Select <-- (Je veux être renvoyé dans cette cellule)
End If

Idem pour chaque condition ou chaque modification de cellule

S'il y a encore quelqu'un pour m'aider, je veux bien une dernière réponse sinon j'adopterais la méthode de pierrot soit Target.Select et j'irai sur mes cellules moi même.

Merci à tous en tout cas de m'avoir accordé du temps.

Manu
 

Pierrot93

XLDnaute Barbatruc
Re : Problème Visual Basic pour excel

Re,

Code:
If Range("B10") = "1" Then
Rows("35:36").Select
Selection.EntireRow.Hidden = True
Cells(10, 8).Select
End If

fonctionne très bien chez moi ce code, si le test est vérifié bien sur... test en pas à pas (touche de fonction F8 dans l'éditeur vba, en mettant un point d'arret sur 1ère ligne F9) tu devrais le voir vite...
 

mécano41

XLDnaute Accro
Re : Problème Visual Basic pour excel

Si tu modifies en cours de route, cela ne facilite pas les choses...

Une version modifiée...J'ai recopié les conditions même si elles sont identiques car si demain tu modifies...

Cordialement
 

Pièces jointes

  • Masquage2.xls
    38 KB · Affichages: 33

Manu40300

XLDnaute Nouveau
Re : Problème Visual Basic pour excel

Wouaouh, super mecano41, merci, t'as fait du super taf, ça marche nickel, je vais essayer de déchiffrer tout ça maintenant car j'aurai d'autres lignes à rentrer.
Merci à tous ceux qui m'ont accordé de leur temps et à la revoyure.
Manu
 

Manu40300

XLDnaute Nouveau
Re : Problème Visual Basic pour excel

Re,
J'ai un autre problème, différent mais dans la même macro alors je continu à écrire dans ce message. Voici mon programme :
Option Explicit


Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Union(Range("B10"), Range("B14"), Range("B18"), Range("B20"))) Is Nothing Then ' Condition pour que cela ne se déclenche pas si changement autre cellule
Select Case Target.Address
Case Is = Range("B10").Address
Select Case Target.Value
Case "1"
Rows("36:37").EntireRow.Hidden = True
Range("H10").Select
Case "2"
Rows("36:37").EntireRow.Hidden = False
Range("B12").Select
End Select
Case Is = Range("B14").Address
Select Case Target.Value
Case "1"
Rows("38:38").EntireRow.Hidden = True
Range("B15").Select
Case "2"
Rows("38:38").EntireRow.Hidden = False
Range("B15").Select
End Select
Case Is = Range("B18").Address
Select Case Target.Value
Case "1"
If Range("B31") <> Cells(18, 8).Values * 2 Then
Range("31:31").EntireRow.Hidden = True
End If
If Range("B32") <> Cells(18, 8).Values * 2 Then
Range("32:32").EntireRow.Hidden = True
End If
If Range("B33") <> Cells(18, 8).Values * 2 Then
Range("33:33").EntireRow.Hidden = True
End If
If Range("B34") <> Cells(18, 8).Values * 2 Then
Range("34:34").EntireRow.Hidden = True
End If
If Range("B35") <> Cells(18, 8).Values * 2 Then
Range("35:35").EntireRow.Hidden = True
End If

Range("H18").Select
Case "2"
Range("24:24,31:31,33:35").EntireRow.Hidden = False
Range("B20").Select
End Select
Case Is = Range("B20").Address
Select Case Target.Value
Case "1"
Rows("30:30").EntireRow.Hidden = True
Range("H20").Select
Case "2"
Rows("30:30").EntireRow.Hidden = False
Range("B22").Select
End Select
End Select
End If
End Sub


Private Sub CommandButton1_Click()
Rows("20:40").EntireRow.Hidden = False
End Sub

Le problème concerne la partie en rouge.
en gros, je voudrai que si la valeur d'une cellule (disons A) n'est pas égale à la valeur d'une autre cellule *2(disons B), la ligne correspondante à la cellule A soit masquée. Ainsi, je voudrai notamment que le test soit effectué sur plusieurs cellules.

Merci pour aide et si quelqu'un connait une bonne adresse pour apprendre ce langage, je suis preneur, car pas envie d'ennuyer constamment des gens sur les forums. Merci encore.

Manu
 

Discussions similaires

Statistiques des forums

Discussions
312 215
Messages
2 086 330
Membres
103 188
dernier inscrit
evebar