Action sur une autre feuille en fonction d'une variable.

philou7168

XLDnaute Nouveau
Bonjour,
Je ne peux hélas fournir de fichier car même compresser je ne peux pas allé en dessous de 77 ko, je vais donc essayer d'être le plus explicite possible.
Je travaille avec excel 2007

Les données du tableau de test sont:
feuille 1 case B7 choix de l'unité par liste déroulante
feuille 1 Case B8 choix du poste par liste déroulante
feuille 4 plage unité de E1 à N1 en deux cases
feuille 4 plage poste de E3 à N3
feuille 4 colonne D4 à D27 les formations

Ma logique que je n'arrive pas à programmer est la suivante:
  • je commence par une recherche du poste en ligne 3 de la feuille 4
  • je contrôle si l'unité est la bonne en ligne 1 de la feuille 4.
  • Si non on cherche la suivante
  • Si oui, il faut sélectionner/activer cette case
  • Ensuite je cache les colonnes inutiles et si je ne me trompe pas ce devrait être cettte commande
Sheets(4).Columns("E:N").Hidden = True
Sheets(4).Target.ColumnWidth = 8.25
Enfin j'espere.
Tout cela sous condition d'un changement de la case B8 de la feuille 1, et donc de devoir tout programmer en VBA sur le feuille 1. Je ne sais pas si c'est possible mais ca devrait tenir dans la balise if .... endif suivante de la feuille1.

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B8")) Is Nothing Then

End If
End Sub

En espérant être assez clair dans ma demande, merci d'avance.
 

philou7168

XLDnaute Nouveau
Re : Action sur une autre feuille en fonction d'une variable.

J'ai une premiere partie de mon programme dont voici l'ecriture.
Il est ecrit sur le feuille 1
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B7")) Is Nothing Then
Range("B8").Value = ""
Range("B8").Select
End If
If Not Intersect(Target, Range("B8")) Is Nothing Then
Range("B9").Select
Sheets(4).Columns("E:O").ColumnWidth = 8.25
With Sheets(4).Range("E3:O3")
Set c = .Find(Sheets(1).Range("b8").Value, LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
Sheets(4).Columns("E:O").Hidden = True
Sheets(4).Range(c.Address).ColumnWidth = 8.25

Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
If Range("B8").Value = "" Then
Sheets(4).Columns("E:O").ColumnWidth = 8.25
End If
End With

End If
End Sub
J'avoue n'avoir fait encore aucune recherche concerant la prochaine demande.
Le programme actuel controle dans une plage de la feuille 4 s'il trouve la valeur contenu dans la cellule B8 de la feuille 1. Si oui, il isole la colonne contenant cette valeur sur la feuille 4.
Maintenant comme dans la plage de donnée de la feuille 4 je possède des doubles, il faut aussi controler si la valeur contenu dans la case B7 de la feuille 1 et la meme que celle contenu deux cases plus haut de la feuille 4. (Attention, il s'agit de valeurs titres, et sont dans des cases fusionnés). Si c'est equivalent, ob s'arrete et on isole la colonne, sinon on cherche la valeur suivante.
Je pense qui suffit d'inserer un if close dans mon prog, mais je ne sais pas ou et encore moi comment comparer une cellule simple avec une cellule fusionné.
Merci d'avance.
 

philou7168

XLDnaute Nouveau
Re : Action sur une autre feuille en fonction d'une variable.

On oublie tout et on recommence. Il suffit d'arrête de se borner a chercher midi a 14h et la solution tombe d'elle même. Voici la finalisation du dit programme et qui fonctionne de surcroit.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("B7")) Is Nothing Then
Range("B8").Value = ""
Range("B8").Select
End If
If Not Intersect(Target, Range("B8")) Is Nothing Then
Range("B9").Select
Sheets(4).Columns("E:O").ColumnWidth = 8.25
With Sheets(4).Range("E3:O3")
Dim col, c, d
c = Sheets(1).Range("B8").Value
d = Sheets(1).Range("B7").Value
For col = 5 To 15
If c = Sheets(4).Cells(3, col).Value Then
Sheets(5).Range("Q1").Value = Sheets(4).Cells(1, col).MergeArea.Value
If d = Sheets(5).Range("Q1").Value Then
Sheets(4).Columns("E:O").Hidden = True
Sheets(4).Cells(3, col).ColumnWidth = 8.25
End If
End If
Next col
If Range("B8").Value = "" Then
Sheets(4).Columns("E:O").ColumnWidth = 8.25
End If
End With
End If
End Sub
 

Discussions similaires

Réponses
8
Affichages
472

Statistiques des forums

Discussions
312 493
Messages
2 088 958
Membres
103 990
dernier inscrit
lamiadebz