plages qui s'interfèrent

riegel

XLDnaute Nouveau
Bonjour à tous,

J’utilise une macro très longue dans laquelle certaines plages délimitant les actions s’interfèrent. En effet, j’ai ceci :

If Target.Count > 1 Then Exit Sub
If Target.Value = "" Then Exit Sub

Partie 1

If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub

Partie 2

If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden = False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden = True
End If
End If

‘ Partie 3 :
If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 173)
If Target.Row / 173 = Int(Target.Row / 173) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 45).EntireRow.Hidden = False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 45).EntireRow.Hidden = True
End If
End If

Mon problème est que les parties 1 et 2 se réalisent parfaitement, mais tout ce qui est partie 3 ne fonctionne pas.

Si je mets la partie 3 au début, alors les parties 1 et 2 ne se réalisent plus. Comment puis-je faire pour que chaque partie puisse s’exécuter dans tous les cas ? Comment délimiter les plages autrement ?

D’avance je vous remercie,

Riegel
 

riegel

XLDnaute Nouveau
Re : plages qui s'interfèrent

Je vais essayer de poser le problème différemment car la macro fait près de 600 lignes et il m’est difficile de la commenter. J’ai défini une plage ainsi:

If Target.Row < 95 Or Target.Row > 482 Then Exit Sub
If Target.Column < 39 Or Target.Column > 39 Then Exit Sub
If Target.Row Mod 2 = 0 Then Exit Sub

Donc, si la sélection est entre les lignes 95 et 482 pour la colonne 39, 1 cellule sur 2 (les cellules sont fusionnées), la procédure s’opère. Sinon, en dehors de cette plage, la procédure s’arrête.
La procédure consiste à poser un certain nombre de question auxquelles on doit répondre.

J’ai besoin qu’une nouvelle procédure fonctionne quand la sélection est en première colonne en ligne 131 et toutes les 43 lignes.

If Target.Column <> 1 Or Target.Count > 1 Then Exit Sub
Var = (Target.Row / 131)
If Target.Row / 131 = Int(Target.Row / 131) Then
If Target.Value <> "" Then
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden = False
Else
Range("A" & Target.Row + 2 & ":A" & Target.Row + 43).EntireRow.Hidden = True
End If
End If

Cette autre procédure est la suivante : dès qu’un chiffre est renseigné, la sélection de lignes s’affiche et si on retire le chiffre, la sélection se masque.

Mon problème est que la première plage (colonne 39) arrête toute procédure et ne redémarre pas une nouvelle procédure quand la sélection est en première colonne.

J’ai donc besoin d’avoir ma première procédure qui s’exécute par rapport à la première plage définie et ma deuxième procédure qui doit s’exécuter sans tenir compte de la première plage définie.

J’espère avoir été plus clair ?

Riegel
 

skoobi

XLDnaute Barbatruc
Re : plages qui s'interfèrent

Re,

si la condition est remplie tu devrais plutôt faire en sorte que l'action souhaité s'exécute au lieu de stopper la procédure avec "Exit Sub" non?

Code:
If Target.Row >= 95 And Target.Row <= 482 And _
    Target.Column = 39 And _
    Target.Row Mod 2 <> 0 Then
'les cellules sont fusionnées
'les autres conditions ensuite

Ce n'est qu'une piste, sans garantie.
 

Discussions similaires

Statistiques des forums

Discussions
312 361
Messages
2 087 627
Membres
103 608
dernier inscrit
rawane