Selection d'une cellule à partir de référence colonne et lig
Bonjour à tous,
je sais que le sujet à été souvent traité mais je ne trouve pas mon bonheur.
Mon problème est le suivant:
Sur la ligne 9 j'ai toutes les dates de l'année au format ../../../
et dans la colonne D j'ai le matricule de personnes souhaitant prendre un congé
j'ai un userform2 ou est présent un calendrier (DTpicker) qui est appelé "calendrier1" et un textbox qui permet de rentré un matricule ( appeler textbox1)
j'aimerai donc pouvoir selectionner la cellule correspondante à la date choisi dans le calendrier et le matricule de la personne.
j'ai déja réussi à selectionner la bonne colonne mais pour la ligne j'ai une erreur
voici mon programme
Private Sub CommandButton6_Click()
Sheets("calendrier").Select
With UserForm2
jour = Calendrier1.Value
matricule = TextBox1.Value
End With
With Sheets("calendrier")
col = .Rows(9).Find(jour).Column
lig = .Columns(1).Find(matricule).row
.Cells(lig, col).Select
End With
End Sub
si je supprime Lig, dans les deux dernieres colonnes, pas de soucis je trouve bien la colonne correspondante.
Mais pour lig j'ai un message d'erreur "erreur d'exécution 91, variable object ou variable de bloc with non définie
dans le fichier excel il n'y a que l'exemple du tableau
merci par avance de votre aide
Bonjour,
Teste ce qui suit (remplace ton code par celui-ci) :
Private Sub CommandButton6_Click()
Dim CelCol As Range
Dim CelLgn As Range
Dim Jour As Date
Dim Matricule As String
Sheets("calendrier").Select
With UserForm2
Jour = .Calendrier1.Value
Matricule = .TextBox1.Value
End With
With Sheets("calendrier")
Set CelCol = .Rows(9).Find(Jour)
Set CelLgn = .Columns(1).Find(Matricule)
If Not CelCol Is Nothing And Not CelLgn Is Nothing Then
.Cells(CelLgn.Row, CelCol.Column).Select
Else
MsgBox "Soit la date n'est pas dans le tableau, soit le matricule est faux !"
End If
End With
End Sub
Hervé.
Super ! merci Hervé, cela fonctionne !
un jour et demi que je planche dessus à ne plus rien y comprendre.. Le moral revient
J'en profite pour te demander si tu serais faire le lien entre deux calendrier?
je m'explique:
la case que tu m'a permis de trouver et sélectionner, prends forme suivant un type de congé (bleu si congé payé, vert si rtt etc..)
la mise en forme de la case c'est ok, j'ai réussi à l'aide de l'enregistreur de macro à extraire les infos.
mais maintenant la difficulté est que j'ai deux calendriers, le calendrier1 pour le début du congés, et le calendrier2 pour la fin du congés.
j'aimerais donc pourvoir sélectionner X case suivant l'intervalle des deux calendrier (voir photo illustration
je ne sais pas si je suis clair ..
je sais que j'abuse un peu mais cela finirai mon programme .
Bonjour,
Si tu déduis de la date de fin la date de début, tu as le nombre de jours il te suffit alors de prolonger la sélection. Une piste probablement à adapter :
Private Sub CommandButton6_Click()
Dim CelCol As Range
Dim CelLgn As Range
Dim Jour As Date
Dim Matricule As String
Dim DateFin As Date
Dim NBJours As Integer
Sheets("calendrier").Select
With UserForm2
Jour = .Calendrier1.Value 'jour de départ
DateFin = .Calendrier2.Value 'jour de retour
Matricule = .TextBox1.Value
NBJours = DateFin - Jour 'nombre de jours de congés
End With
With Sheets("calendrier")
Set CelCol = .Rows(9).Find(Jour)
Set CelLgn = .Columns(1).Find(Matricule)
If Not CelCol Is Nothing And Not CelLgn Is Nothing Then
.Range(.Cells(CelLgn.Row, CelCol.Column), .Cells(CelLgn.Row, CelCol.Column + NBJours)).Select
Else
MsgBox "Soit la date n'est pas dans le tableau, soit le matricule est faux !"
End If
End With
End Sub
Hervé.
Juste parfait! problème résolu, merci infiniment Hervé.
bonne journée