Je cherche à parcourir un tableau en VBA ( ex range ("A1:D10") ), pour
chaque colonne, je dois en fonction de la valeur de la première ligne de
la colonne donner une valeur spécifique mais identique aux autres lignes
de la colonne, puis je passe à la colonne suivante.
pour le test et remplir les valeurs, je sais faire, mais je ne vois pas
comment parcourir le tableau.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
MichD
Bonjour,
Essaie comme ceci :
'----------------------------------------------------- Sub test() Dim C As Range 'Nom de la feuille à adapter With Worksheets("Feuil1").Range("A1:D10") For Each C In .Rows(1).Cells 'tu fais le test que tu veux sur la 'valeur de c qui représente à tour 'de rôle chacune des valeurs de la première 'ligne de la plage de cellules. If C = "????" Then 'la valeur que va prendre le reste de la colonne. 'si le test est bon .Columns(C.Column).Offset(1).Resize(.Rows.Count - 1) = 25 End If Next End With End Sub '-----------------------------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eac31bb$0$27442$
Salut,
Je cherche à parcourir un tableau en VBA ( ex range ("A1:D10") ), pour chaque colonne, je dois en fonction de la valeur de la première ligne de la colonne donner une valeur spécifique mais identique aux autres lignes de la colonne, puis je passe à la colonne suivante.
pour le test et remplir les valeurs, je sais faire, mais je ne vois pas comment parcourir le tableau.
Auriez vous un exemple ?
merci
-- DR
Bonjour,
Essaie comme ceci :
'-----------------------------------------------------
Sub test()
Dim C As Range
'Nom de la feuille à adapter
With Worksheets("Feuil1").Range("A1:D10")
For Each C In .Rows(1).Cells
'tu fais le test que tu veux sur la
'valeur de c qui représente à tour
'de rôle chacune des valeurs de la première
'ligne de la plage de cellules.
If C = "????" Then
'la valeur que va prendre le reste de la colonne.
'si le test est bon
.Columns(C.Column).Offset(1).Resize(.Rows.Count - 1) = 25
End If
Next
End With
End Sub
'-----------------------------------------------------
MichD
------------------------------------------
"Droopy191" a écrit dans le message de groupe de discussion : 4eac31bb$0$27442$426a74cc@news.free.fr...
Salut,
Je cherche à parcourir un tableau en VBA ( ex range ("A1:D10") ), pour
chaque colonne, je dois en fonction de la valeur de la première ligne de
la colonne donner une valeur spécifique mais identique aux autres lignes
de la colonne, puis je passe à la colonne suivante.
pour le test et remplir les valeurs, je sais faire, mais je ne vois pas
comment parcourir le tableau.
'----------------------------------------------------- Sub test() Dim C As Range 'Nom de la feuille à adapter With Worksheets("Feuil1").Range("A1:D10") For Each C In .Rows(1).Cells 'tu fais le test que tu veux sur la 'valeur de c qui représente à tour 'de rôle chacune des valeurs de la première 'ligne de la plage de cellules. If C = "????" Then 'la valeur que va prendre le reste de la colonne. 'si le test est bon .Columns(C.Column).Offset(1).Resize(.Rows.Count - 1) = 25 End If Next End With End Sub '-----------------------------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eac31bb$0$27442$
Salut,
Je cherche à parcourir un tableau en VBA ( ex range ("A1:D10") ), pour chaque colonne, je dois en fonction de la valeur de la première ligne de la colonne donner une valeur spécifique mais identique aux autres lignes de la colonne, puis je passe à la colonne suivante.
pour le test et remplir les valeurs, je sais faire, mais je ne vois pas comment parcourir le tableau.
Auriez vous un exemple ?
merci
-- DR
Droopy191
Merci pour aide, ca marche nickel Je vais abuser, comment faire pour le faire pour plusieurs range dans cette feuille ? En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment l'utiliser.
-- DR
Merci pour aide, ca marche nickel
Je vais abuser, comment faire pour le faire pour plusieurs range dans
cette feuille ?
En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment
l'utiliser.
Merci pour aide, ca marche nickel Je vais abuser, comment faire pour le faire pour plusieurs range dans cette feuille ? En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment l'utiliser.
-- DR
isabelle
bonjour Dr,
With Worksheets("Feuil1") Set plg = Union(.Range("A1:A2"), .Range("B4:B5"), .Range("C6:C7")) End With
For Each c In plg x = c.Address Next
-- isabelle
Le 2011-11-01 13:10, Droopy191 a écrit :
Merci pour aide, ca marche nickel Je vais abuser, comment faire pour le faire pour plusieurs range dans cette feuille ? En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment l'utiliser.
bonjour Dr,
With Worksheets("Feuil1")
Set plg = Union(.Range("A1:A2"), .Range("B4:B5"), .Range("C6:C7"))
End With
For Each c In plg
x = c.Address
Next
--
isabelle
Le 2011-11-01 13:10, Droopy191 a écrit :
Merci pour aide, ca marche nickel
Je vais abuser, comment faire pour le faire pour plusieurs range dans cette feuille ?
En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment l'utiliser.
With Worksheets("Feuil1") Set plg = Union(.Range("A1:A2"), .Range("B4:B5"), .Range("C6:C7")) End With
For Each c In plg x = c.Address Next
-- isabelle
Le 2011-11-01 13:10, Droopy191 a écrit :
Merci pour aide, ca marche nickel Je vais abuser, comment faire pour le faire pour plusieurs range dans cette feuille ? En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment l'utiliser.
MichD
Un autre exemple,
J'ai simplement ajouté une variable de type "tableau"(array) dans laquelle je liste chacune des plages de cellules sur lesquelles je veux boucler sur chacune des cellules de la première ligne.
'---------------------------------- Sub test1() Dim C As Range, Arr(), Adr As String, Elt As Variant
'Tu liste toutes les plages de cellules dans une 'variable comme appelle Tableau (array),Tu peux en 'lister autant que tu veux! Arr = Array("A1:D10", "K5:M10", "A25:G50")
'Nom de la feuille à adapter With Worksheets("Feuil1") 'Pour chaque élément du tableau For Each Elt In Arr For Each C In .Range(Elt).Rows(1).Cells 'tu fais le test que tu veux sur la 'valeur de c qui représente à tour 'de rôle chacune des valeurs de la première 'ligne de la plage de cellules. Adr = C.Address If C = "????" Then 'la valeur que va prendre le reste de la colonne. 'si le test est bon .Columns(C.Column).Offset(1).Resize(.Rows.Count - 1) = 25 End If Next Next End With End Sub '----------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eb02819$0$656$
Merci pour aide, ca marche nickel Je vais abuser, comment faire pour le faire pour plusieurs range dans cette feuille ? En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment l'utiliser.
-- DR
Un autre exemple,
J'ai simplement ajouté une variable de type "tableau"(array) dans laquelle je
liste chacune des plages de cellules sur lesquelles je veux boucler sur chacune
des cellules de la première ligne.
'----------------------------------
Sub test1()
Dim C As Range, Arr(), Adr As String, Elt As Variant
'Tu liste toutes les plages de cellules dans une
'variable comme appelle Tableau (array),Tu peux en
'lister autant que tu veux!
Arr = Array("A1:D10", "K5:M10", "A25:G50")
'Nom de la feuille à adapter
With Worksheets("Feuil1")
'Pour chaque élément du tableau
For Each Elt In Arr
For Each C In .Range(Elt).Rows(1).Cells
'tu fais le test que tu veux sur la
'valeur de c qui représente à tour
'de rôle chacune des valeurs de la première
'ligne de la plage de cellules.
Adr = C.Address
If C = "????" Then
'la valeur que va prendre le reste de la colonne.
'si le test est bon
.Columns(C.Column).Offset(1).Resize(.Rows.Count - 1) = 25
End If
Next
Next
End With
End Sub
'----------------------------------
MichD
------------------------------------------
"Droopy191" a écrit dans le message de groupe de discussion : 4eb02819$0$656$426a74cc@news.free.fr...
Merci pour aide, ca marche nickel
Je vais abuser, comment faire pour le faire pour plusieurs range dans
cette feuille ?
En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment
l'utiliser.
J'ai simplement ajouté une variable de type "tableau"(array) dans laquelle je liste chacune des plages de cellules sur lesquelles je veux boucler sur chacune des cellules de la première ligne.
'---------------------------------- Sub test1() Dim C As Range, Arr(), Adr As String, Elt As Variant
'Tu liste toutes les plages de cellules dans une 'variable comme appelle Tableau (array),Tu peux en 'lister autant que tu veux! Arr = Array("A1:D10", "K5:M10", "A25:G50")
'Nom de la feuille à adapter With Worksheets("Feuil1") 'Pour chaque élément du tableau For Each Elt In Arr For Each C In .Range(Elt).Rows(1).Cells 'tu fais le test que tu veux sur la 'valeur de c qui représente à tour 'de rôle chacune des valeurs de la première 'ligne de la plage de cellules. Adr = C.Address If C = "????" Then 'la valeur que va prendre le reste de la colonne. 'si le test est bon .Columns(C.Column).Offset(1).Resize(.Rows.Count - 1) = 25 End If Next Next End With End Sub '----------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eb02819$0$656$
Merci pour aide, ca marche nickel Je vais abuser, comment faire pour le faire pour plusieurs range dans cette feuille ? En fait, j'ai un plage de cellule pour chaque mois de l'année.
je pensais à faire une collection mais je ne vois pas trop comment l'utiliser.
-- DR
Droopy191
Merci à tous les deux, j'ai finalement réussi à faire ce que je voulais
'---------------------------------- Sub Btn_raz_calendrier_Cliquer() ' macro de remise à zero des évenements enregistrés dans le calendrier ' suppression des cp, rtt, recup placés dans le calendrier ' par des JT ou des cases vides pour les jours fériés ou WE
'Demande de confirmation ou sortie If MsgBox("Etes vous certain de vouloir mettre à zéro le calendrier, vous perdrez tous les événements saisis", vbOKCancel + vbExclamation, "Confirmation") = 2 Then Exit Sub End If
' ne pas mettre à jour l'affichage Application.ScreenUpdating = False
Dim C, Macellule As Range, Arr(), Adr, Type_jour As String, Elt As Variant
' Liste répresentant les différents mois Arr = Array("C35:AG59", "C61:AG85", "C87:AG111", "C113:AG137", _ "C139:AG163", "C165:AG189", "C191:AG215", "C217:AG241", "C243:AG267", _ "C269:AG293", "C295:AG319", "C321:AG345")
With Worksheets("Conges RTT") ' pour chaque mois For Each Elt In Arr ' passe en revue chaque cellule de la première ligne With Worksheets("Conges RTT").Range(Elt) For Each C In .Rows(1).Cells
If C = "" Then ' test si la cellule contient un jour valide Type_jour = "" Else ' test si le jour est un samedi ou un dimanche If Weekday(C) = vbSaturday Or Weekday(C) = vbSunday Then Type_jour = "" Else ' par défaut, c'est un jour travaillé Type_jour = "JT" 'test si c'est un jour férié, Range("Holy_FR") est la liste des jours fériés francais For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next End If End If
' affectation du résultat à la colonne .Columns(C.Column - .Column + 1).Offset(1).Resize(.Rows.Count - 1) = Type_jour
Next End With Next End With
Application.ScreenUpdating = True
End Sub '----------------------------------
Encore une question ;-)
ici je test si ma valeur de date appartient ou pas à une plage nommée qui contient les jours fériés ( ca marche tel quel )
For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next N'aurait il pas une facon plus simple/plus élégante de vérifier ?
En tout cas merci.
-- DR
Merci à tous les deux, j'ai finalement réussi à faire ce que je voulais
'----------------------------------
Sub Btn_raz_calendrier_Cliquer()
' macro de remise à zero des évenements enregistrés dans le calendrier
' suppression des cp, rtt, recup placés dans le calendrier
' par des JT ou des cases vides pour les jours fériés ou WE
'Demande de confirmation ou sortie
If MsgBox("Etes vous certain de vouloir mettre à zéro le calendrier,
vous perdrez tous les événements saisis", vbOKCancel + vbExclamation,
"Confirmation") = 2 Then
Exit Sub
End If
' ne pas mettre à jour l'affichage
Application.ScreenUpdating = False
Dim C, Macellule As Range, Arr(), Adr, Type_jour As String, Elt As Variant
' Liste répresentant les différents mois
Arr = Array("C35:AG59", "C61:AG85", "C87:AG111", "C113:AG137", _
"C139:AG163", "C165:AG189", "C191:AG215", "C217:AG241", "C243:AG267", _
"C269:AG293", "C295:AG319", "C321:AG345")
With Worksheets("Conges RTT")
' pour chaque mois
For Each Elt In Arr
' passe en revue chaque cellule de la première ligne
With Worksheets("Conges RTT").Range(Elt)
For Each C In .Rows(1).Cells
If C = "" Then ' test si la cellule contient un jour valide
Type_jour = ""
Else
' test si le jour est un samedi ou un dimanche
If Weekday(C) = vbSaturday Or Weekday(C) = vbSunday
Then
Type_jour = ""
Else
' par défaut, c'est un jour travaillé
Type_jour = "JT"
'test si c'est un jour férié, Range("Holy_FR")
est la liste des jours fériés francais
For Each Macellule In Worksheets("Conges
RTT").Range("Holy_FR")
If Macellule = C Then Type_jour = ""
Next
End If
End If
' affectation du résultat à la colonne
.Columns(C.Column - .Column +
1).Offset(1).Resize(.Rows.Count - 1) = Type_jour
Next
End With
Next
End With
Application.ScreenUpdating = True
End Sub
'----------------------------------
Encore une question ;-)
ici je test si ma valeur de date appartient ou pas à une plage nommée
qui contient les jours fériés ( ca marche tel quel )
For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR")
If Macellule = C Then Type_jour = ""
Next
N'aurait il pas une facon plus simple/plus élégante de vérifier ?
Merci à tous les deux, j'ai finalement réussi à faire ce que je voulais
'---------------------------------- Sub Btn_raz_calendrier_Cliquer() ' macro de remise à zero des évenements enregistrés dans le calendrier ' suppression des cp, rtt, recup placés dans le calendrier ' par des JT ou des cases vides pour les jours fériés ou WE
'Demande de confirmation ou sortie If MsgBox("Etes vous certain de vouloir mettre à zéro le calendrier, vous perdrez tous les événements saisis", vbOKCancel + vbExclamation, "Confirmation") = 2 Then Exit Sub End If
' ne pas mettre à jour l'affichage Application.ScreenUpdating = False
Dim C, Macellule As Range, Arr(), Adr, Type_jour As String, Elt As Variant
' Liste répresentant les différents mois Arr = Array("C35:AG59", "C61:AG85", "C87:AG111", "C113:AG137", _ "C139:AG163", "C165:AG189", "C191:AG215", "C217:AG241", "C243:AG267", _ "C269:AG293", "C295:AG319", "C321:AG345")
With Worksheets("Conges RTT") ' pour chaque mois For Each Elt In Arr ' passe en revue chaque cellule de la première ligne With Worksheets("Conges RTT").Range(Elt) For Each C In .Rows(1).Cells
If C = "" Then ' test si la cellule contient un jour valide Type_jour = "" Else ' test si le jour est un samedi ou un dimanche If Weekday(C) = vbSaturday Or Weekday(C) = vbSunday Then Type_jour = "" Else ' par défaut, c'est un jour travaillé Type_jour = "JT" 'test si c'est un jour férié, Range("Holy_FR") est la liste des jours fériés francais For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next End If End If
' affectation du résultat à la colonne .Columns(C.Column - .Column + 1).Offset(1).Resize(.Rows.Count - 1) = Type_jour
Next End With Next End With
Application.ScreenUpdating = True
End Sub '----------------------------------
Encore une question ;-)
ici je test si ma valeur de date appartient ou pas à une plage nommée qui contient les jours fériés ( ca marche tel quel )
For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next N'aurait il pas une facon plus simple/plus élégante de vérifier ?
En tout cas merci.
-- DR
MichD
Bonjour,
Je ne suis pas sûr d'avoir compris ta question...
Mais si tu veux trouver une date particulière sur la première ligne d'une plage nommée, au lieu de boucler sur chacune des cellules tu peux faire ceci :
Supposons une plage nommée "Tata", Tu veux trouver si la date 5/11/11 existe sur la première ligne de la plage nommée.
'----------------------------------------- Sub Test() Dim C As Variant, X As Long
'La date recherchée X = CLng(DateSerial(2011, 11, 5))
With Range("Tata") 'Plage nommée 'C = numéro de la colonne ou une erreur C = Application.Match(X, .Rows(1).Cells, 0) If Not IsError(C) Then MsgBox .Item(.Rows(1).Row, C).Value & " à cette adresse : " & .Item(1, C).Address Else MsgBox "Date non trouvée" End If End With
End Sub '-----------------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eb166e9$0$2243$
Merci à tous les deux, j'ai finalement réussi à faire ce que je voulais
'---------------------------------- Sub Btn_raz_calendrier_Cliquer() ' macro de remise à zero des évenements enregistrés dans le calendrier ' suppression des cp, rtt, recup placés dans le calendrier ' par des JT ou des cases vides pour les jours fériés ou WE
'Demande de confirmation ou sortie If MsgBox("Etes vous certain de vouloir mettre à zéro le calendrier, vous perdrez tous les événements saisis", vbOKCancel + vbExclamation, "Confirmation") = 2 Then Exit Sub End If
' ne pas mettre à jour l'affichage Application.ScreenUpdating = False
Dim C, Macellule As Range, Arr(), Adr, Type_jour As String, Elt As Variant
' Liste répresentant les différents mois Arr = Array("C35:AG59", "C61:AG85", "C87:AG111", "C113:AG137", _ "C139:AG163", "C165:AG189", "C191:AG215", "C217:AG241", "C243:AG267", _ "C269:AG293", "C295:AG319", "C321:AG345")
With Worksheets("Conges RTT") ' pour chaque mois For Each Elt In Arr ' passe en revue chaque cellule de la première ligne With Worksheets("Conges RTT").Range(Elt) For Each C In .Rows(1).Cells
If C = "" Then ' test si la cellule contient un jour valide Type_jour = "" Else ' test si le jour est un samedi ou un dimanche If Weekday(C) = vbSaturday Or Weekday(C) = vbSunday Then Type_jour = "" Else ' par défaut, c'est un jour travaillé Type_jour = "JT" 'test si c'est un jour férié, Range("Holy_FR") est la liste des jours fériés francais For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next End If End If
' affectation du résultat à la colonne .Columns(C.Column - .Column + 1).Offset(1).Resize(.Rows.Count - 1) = Type_jour
Next End With Next End With
Application.ScreenUpdating = True
End Sub '----------------------------------
Encore une question ;-)
ici je test si ma valeur de date appartient ou pas à une plage nommée qui contient les jours fériés ( ca marche tel quel )
For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next N'aurait il pas une facon plus simple/plus élégante de vérifier ?
En tout cas merci.
-- DR
Bonjour,
Je ne suis pas sûr d'avoir compris ta question...
Mais si tu veux trouver une date particulière sur la première ligne d'une plage nommée,
au lieu de boucler sur chacune des cellules tu peux faire ceci :
Supposons une plage nommée "Tata", Tu veux trouver si la date 5/11/11 existe sur la
première ligne de la plage nommée.
'-----------------------------------------
Sub Test()
Dim C As Variant, X As Long
'La date recherchée
X = CLng(DateSerial(2011, 11, 5))
With Range("Tata") 'Plage nommée
'C = numéro de la colonne ou une erreur
C = Application.Match(X, .Rows(1).Cells, 0)
If Not IsError(C) Then
MsgBox .Item(.Rows(1).Row, C).Value & " à cette adresse : " & .Item(1, C).Address
Else
MsgBox "Date non trouvée"
End If
End With
End Sub
'-----------------------------------------
MichD
------------------------------------------
"Droopy191" a écrit dans le message de groupe de discussion : 4eb166e9$0$2243$426a74cc@news.free.fr...
Merci à tous les deux, j'ai finalement réussi à faire ce que je voulais
'----------------------------------
Sub Btn_raz_calendrier_Cliquer()
' macro de remise à zero des évenements enregistrés dans le calendrier
' suppression des cp, rtt, recup placés dans le calendrier
' par des JT ou des cases vides pour les jours fériés ou WE
'Demande de confirmation ou sortie
If MsgBox("Etes vous certain de vouloir mettre à zéro le calendrier,
vous perdrez tous les événements saisis", vbOKCancel + vbExclamation,
"Confirmation") = 2 Then
Exit Sub
End If
' ne pas mettre à jour l'affichage
Application.ScreenUpdating = False
Dim C, Macellule As Range, Arr(), Adr, Type_jour As String, Elt As Variant
' Liste répresentant les différents mois
Arr = Array("C35:AG59", "C61:AG85", "C87:AG111", "C113:AG137", _
"C139:AG163", "C165:AG189", "C191:AG215", "C217:AG241", "C243:AG267", _
"C269:AG293", "C295:AG319", "C321:AG345")
With Worksheets("Conges RTT")
' pour chaque mois
For Each Elt In Arr
' passe en revue chaque cellule de la première ligne
With Worksheets("Conges RTT").Range(Elt)
For Each C In .Rows(1).Cells
If C = "" Then ' test si la cellule contient un jour valide
Type_jour = ""
Else
' test si le jour est un samedi ou un dimanche
If Weekday(C) = vbSaturday Or Weekday(C) = vbSunday
Then
Type_jour = ""
Else
' par défaut, c'est un jour travaillé
Type_jour = "JT"
'test si c'est un jour férié, Range("Holy_FR")
est la liste des jours fériés francais
For Each Macellule In Worksheets("Conges
RTT").Range("Holy_FR")
If Macellule = C Then Type_jour = ""
Next
End If
End If
' affectation du résultat à la colonne
.Columns(C.Column - .Column +
1).Offset(1).Resize(.Rows.Count - 1) = Type_jour
Next
End With
Next
End With
Application.ScreenUpdating = True
End Sub
'----------------------------------
Encore une question ;-)
ici je test si ma valeur de date appartient ou pas à une plage nommée
qui contient les jours fériés ( ca marche tel quel )
For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR")
If Macellule = C Then Type_jour = ""
Next
N'aurait il pas une facon plus simple/plus élégante de vérifier ?
Mais si tu veux trouver une date particulière sur la première ligne d'une plage nommée, au lieu de boucler sur chacune des cellules tu peux faire ceci :
Supposons une plage nommée "Tata", Tu veux trouver si la date 5/11/11 existe sur la première ligne de la plage nommée.
'----------------------------------------- Sub Test() Dim C As Variant, X As Long
'La date recherchée X = CLng(DateSerial(2011, 11, 5))
With Range("Tata") 'Plage nommée 'C = numéro de la colonne ou une erreur C = Application.Match(X, .Rows(1).Cells, 0) If Not IsError(C) Then MsgBox .Item(.Rows(1).Row, C).Value & " à cette adresse : " & .Item(1, C).Address Else MsgBox "Date non trouvée" End If End With
End Sub '-----------------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eb166e9$0$2243$
Merci à tous les deux, j'ai finalement réussi à faire ce que je voulais
'---------------------------------- Sub Btn_raz_calendrier_Cliquer() ' macro de remise à zero des évenements enregistrés dans le calendrier ' suppression des cp, rtt, recup placés dans le calendrier ' par des JT ou des cases vides pour les jours fériés ou WE
'Demande de confirmation ou sortie If MsgBox("Etes vous certain de vouloir mettre à zéro le calendrier, vous perdrez tous les événements saisis", vbOKCancel + vbExclamation, "Confirmation") = 2 Then Exit Sub End If
' ne pas mettre à jour l'affichage Application.ScreenUpdating = False
Dim C, Macellule As Range, Arr(), Adr, Type_jour As String, Elt As Variant
' Liste répresentant les différents mois Arr = Array("C35:AG59", "C61:AG85", "C87:AG111", "C113:AG137", _ "C139:AG163", "C165:AG189", "C191:AG215", "C217:AG241", "C243:AG267", _ "C269:AG293", "C295:AG319", "C321:AG345")
With Worksheets("Conges RTT") ' pour chaque mois For Each Elt In Arr ' passe en revue chaque cellule de la première ligne With Worksheets("Conges RTT").Range(Elt) For Each C In .Rows(1).Cells
If C = "" Then ' test si la cellule contient un jour valide Type_jour = "" Else ' test si le jour est un samedi ou un dimanche If Weekday(C) = vbSaturday Or Weekday(C) = vbSunday Then Type_jour = "" Else ' par défaut, c'est un jour travaillé Type_jour = "JT" 'test si c'est un jour férié, Range("Holy_FR") est la liste des jours fériés francais For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next End If End If
' affectation du résultat à la colonne .Columns(C.Column - .Column + 1).Offset(1).Resize(.Rows.Count - 1) = Type_jour
Next End With Next End With
Application.ScreenUpdating = True
End Sub '----------------------------------
Encore une question ;-)
ici je test si ma valeur de date appartient ou pas à une plage nommée qui contient les jours fériés ( ca marche tel quel )
For Each Macellule In Worksheets("Conges RTT").Range("Holy_FR") If Macellule = C Then Type_jour = "" Next N'aurait il pas une facon plus simple/plus élégante de vérifier ?
En tout cas merci.
-- DR
Droopy191
Le 02/11/2011 18:08, MichD a écrit :
Bonjour,
Je ne suis pas sûr d'avoir compris ta question...
En fait je cherche à savoir si ma date est un jour férié. J'ai un plage nommée qui contient les fériés francais. Je voudrais donc savoir si ma date contenue dans C est une des dates de ma plage nommée.
-- DR
Le 02/11/2011 18:08, MichD a écrit :
Bonjour,
Je ne suis pas sûr d'avoir compris ta question...
En fait je cherche à savoir si ma date est un jour férié.
J'ai un plage nommée qui contient les fériés francais. Je voudrais donc
savoir si ma date contenue dans C est une des dates de ma plage nommée.
En fait je cherche à savoir si ma date est un jour férié. J'ai un plage nommée qui contient les fériés francais. Je voudrais donc savoir si ma date contenue dans C est une des dates de ma plage nommée.
-- DR
MichD
Bonjour,
Excel ne fait pas de miracle, tu dois avoir une liste de congés fériés définie dans ton classeur.
Admettons qu'en A1:A15, tu as la liste des dates fériées au format date reconnue par Excel.
Maintenant si tu veux savoir si la date en GS est un jour férié,
Tu utilises cette formule : =si(estnum(Equiv(G5;A1:A15;0));"Jour férié";"jour non férié")
En VBA, tu aurais quelque chose comme :
'------------------------------------------- Sub test()
Dim D As Long, X As Variant 'Range("C2")'la cellule où est la date que tu vérifiée 'Range("A1:A15").Address : la plage où sont tes jours fériés 'Attention, pour les besoins j'ai supposé qu'elles étaient 'dans la même feuille... ce n'est peut-être pas le cas pour toi
With Worksheets("Feuil1") D = .Range("C2") 'la cellule où est la date X = Evaluate("IF(ISNUMBER(MATCH(" & D & "," & _ .Range("A1:A15").Address & ",0)),""Jour férié"",""jour non férié"")") End With MsgBox X End Sub '-------------------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eb28f3d$0$24972$
Le 02/11/2011 18:08, MichD a écrit :
Bonjour,
Je ne suis pas sûr d'avoir compris ta question...
En fait je cherche à savoir si ma date est un jour férié. J'ai un plage nommée qui contient les fériés francais. Je voudrais donc savoir si ma date contenue dans C est une des dates de ma plage nommée.
-- DR
Bonjour,
Excel ne fait pas de miracle, tu dois avoir une liste de congés fériés définie dans ton classeur.
Admettons qu'en A1:A15, tu as la liste des dates fériées au format date reconnue par Excel.
Maintenant si tu veux savoir si la date en GS est un jour férié,
Tu utilises cette formule : =si(estnum(Equiv(G5;A1:A15;0));"Jour férié";"jour non férié")
En VBA, tu aurais quelque chose comme :
'-------------------------------------------
Sub test()
Dim D As Long, X As Variant
'Range("C2")'la cellule où est la date que tu vérifiée
'Range("A1:A15").Address : la plage où sont tes jours fériés
'Attention, pour les besoins j'ai supposé qu'elles étaient
'dans la même feuille... ce n'est peut-être pas le cas pour toi
With Worksheets("Feuil1")
D = .Range("C2") 'la cellule où est la date
X = Evaluate("IF(ISNUMBER(MATCH(" & D & "," & _
.Range("A1:A15").Address & ",0)),""Jour férié"",""jour non férié"")")
End With
MsgBox X
End Sub
'-------------------------------------------
MichD
------------------------------------------
"Droopy191" a écrit dans le message de groupe de discussion : 4eb28f3d$0$24972$426a34cc@news.free.fr...
Le 02/11/2011 18:08, MichD a écrit :
Bonjour,
Je ne suis pas sûr d'avoir compris ta question...
En fait je cherche à savoir si ma date est un jour férié.
J'ai un plage nommée qui contient les fériés francais. Je voudrais donc
savoir si ma date contenue dans C est une des dates de ma plage nommée.
Excel ne fait pas de miracle, tu dois avoir une liste de congés fériés définie dans ton classeur.
Admettons qu'en A1:A15, tu as la liste des dates fériées au format date reconnue par Excel.
Maintenant si tu veux savoir si la date en GS est un jour férié,
Tu utilises cette formule : =si(estnum(Equiv(G5;A1:A15;0));"Jour férié";"jour non férié")
En VBA, tu aurais quelque chose comme :
'------------------------------------------- Sub test()
Dim D As Long, X As Variant 'Range("C2")'la cellule où est la date que tu vérifiée 'Range("A1:A15").Address : la plage où sont tes jours fériés 'Attention, pour les besoins j'ai supposé qu'elles étaient 'dans la même feuille... ce n'est peut-être pas le cas pour toi
With Worksheets("Feuil1") D = .Range("C2") 'la cellule où est la date X = Evaluate("IF(ISNUMBER(MATCH(" & D & "," & _ .Range("A1:A15").Address & ",0)),""Jour férié"",""jour non férié"")") End With MsgBox X End Sub '-------------------------------------------
MichD ------------------------------------------ "Droopy191" a écrit dans le message de groupe de discussion : 4eb28f3d$0$24972$
Le 02/11/2011 18:08, MichD a écrit :
Bonjour,
Je ne suis pas sûr d'avoir compris ta question...
En fait je cherche à savoir si ma date est un jour férié. J'ai un plage nommée qui contient les fériés francais. Je voudrais donc savoir si ma date contenue dans C est une des dates de ma plage nommée.
-- DR
Droopy191
Le 03/11/2011 15:46, MichD a écrit :
Bonjour,
Excel ne fait pas de miracle, tu dois avoir une liste de congés fériés définie dans ton classeur.
Certainement, j'espérais trouver une méthode directe de vérifier si une valeur donnée est présente dans une liste.
Admettons qu'en A1:A15, tu as la liste des dates fériées au format date reconnue par Excel.
Maintenant si tu veux savoir si la date en GS est un jour férié,
Tu utilises cette formule : =si(estnum(Equiv(G5;A1:A15;0));"Jour férié";"jour non férié")
J'utilisais cette formule dans la feuille NB.SI(plage_féries;date_a_tester)=1
merci pour votre patience et vos pistes.
-- DR
Le 03/11/2011 15:46, MichD a écrit :
Bonjour,
Excel ne fait pas de miracle, tu dois avoir une liste de congés fériés définie dans ton classeur.
Certainement,
j'espérais trouver une méthode directe de vérifier si une valeur donnée
est présente dans une liste.
Admettons qu'en A1:A15, tu as la liste des dates fériées au format date reconnue par Excel.
Maintenant si tu veux savoir si la date en GS est un jour férié,
Tu utilises cette formule : =si(estnum(Equiv(G5;A1:A15;0));"Jour férié";"jour non férié")
J'utilisais cette formule dans la feuille
NB.SI(plage_féries;date_a_tester)=1