Advanced Filter avec 2 conditions
Bonjour à tous,
Je suis tout nouveau ici. Pour la petite introduction je suis néophyte d'excel et travaille dans une entreprise ou n'avons aucun ou peu support en terme d'application / aide pour nos diverses tâches. J'essaye donc de me faciliter le quotidien en créant des excels ou parfois powerapps. Pour être transparent j'utilise énormément ChatGpt pour me faire découvrir le VBA
Je suis bloqué sur un excel où j'essaye de Copier coller des lignes d'un tableau A23:L130 en utilisant le filtre avancé mais selon deux critères :
-Une liste de Nom que je peux modifier à la main.
-Un horaire de début des employés.
Cf s/s Générateur 1
Puis de le coller sur un autre tableau N23:V130
Quand je copie colle les données sur la Sheet "Générateur" dans la cellule H l'heure est en format comme cela : "31/05/2024 07:45:00" du coup pour avoir le même format je suis passer par "=H23-ENT(H23)" pour obtenir que l'heure sur une autre cellule puis copier coller cette cellule d'où :
' Extraire les valeurs des plages BY et BX
valheureBY = ws.Range("BY23:BY130").Value
valheureBX = ws.Range("BX23:BX130").Value
' Coller les valeurs dans la colonne H (ajustez selon vos besoins)
ws.Range("H23:H130").Value = valheureBY ' Ou valHeureBX selon votre intention
ws.Range("BW23:BW130").Value = valheureBX
Voici la formule (je ne sais même plus laquelle j'utilise tellement j'en ai essayé et il me semble que ce n'a pas été la meilleure en terme de résultat
Dim MDP As String
Dim ws As Worksheet
Dim PlageSource As Range
Dim PlageDestination As Range
Dim CriterePlage As Range
Dim ListeNoms As Variant
Dim ListeHoraires As Variant
Dim Plage As Range
Dim Cellule As Range
Dim i As Long
Dim valheureBY As Variant
Dim valheureBX As Variant
'-----------------------------------------------------------------------------------'
' Définir la feuille active (remplacez par le nom de votre feuille si nécessaire)
Set ws = ThisWorkbook.Sheets("Générateur")
' Définir la plage source (A22:I222)
Set PlageSource = ws.Range("A22:I222")
' Définir la plage de destination (N22:V222)
Set PlageDestination = ws.Range("N22:V222")
' Définir la liste des noms à utiliser comme critères
ListeNoms = Array("DURAND", "JACOB", "BERNARD", "DUPONT") ' Remplacez par vos noms spécifiques
' Définir la liste des horaires précis à utiliser comme critères (remplacez par les horaires exacts)
ListeHoraires = Array(TimeValue("07:15:00"), TimeValue("0_:15:00"), TimeValue("12:30:00"), TimeValue("13:15:00"))
' Effacer toute plage de critères temporaire précédente
' ws.Range("BV1:BW" & UBound(ListeNoms) + 2).Clear
' Placer le titre des critères (nom et heure) dans les cellules Z1 et AA1
ws.Range("BV22").Value = ws.Range("D22").Value ' Titre de la colonne des noms
ws.Range("BW22").Value = ws.Range("H22").Value ' Titre de la colonne des heures (H)
' Initialiser la ligne des critères
LigneCritere = 23
' Placer chaque nom et chaque horaire dans la plage de critères
For i = LBound(ListeNoms) To UBound(ListeNoms)
For j = LBound(ListeHoraires) To UBound(ListeHoraires)
ws.Cells(LigneCritere, "BV").Value = ListeNoms(i) ' Placer le nom
ws.Cells(LigneCritere, "BW").Value = Format(ListeHoraires(j), "hh:mm") ' Placer l'horaire
LigneCritere = LigneCritere + 1 ' Passer à la ligne suivante
Next j
Next i
' Définir la plage de critères (noms et heures)
Set CriterePlage = ws.Range("BV22:BW22" & UBound(ListeNoms) + 1)
' Extraire les valeurs des plages BY et BX
valheureBY = ws.Range("BY23:BY130").Value
valheureBX = ws.Range("BX23:BX130").Value
' Coller les valeurs dans la colonne H (ajustez selon vos besoins)
ws.Range("H23:H130").Value = valheureBY ' Ou valHeureBX selon votre intention
ws.Range("BW23:BW130").Value = valheureBX
' Appliquer le format d'heure pour afficher correctement la valeur dans H23
ws.Range("H23:H222").NumberFormat = "hh:mm"
ws.Range("BW2:BW222").NumberFormat = "hh:mm"
' Appliquer l'AdvancedFilter avec la liste de noms et les horaires précis comme critères
PlageSource.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=CriterePlage, _
CopyToRange:=PlageDestination, Unique:=True
'--------------------------------------------------------------------------------'
Le but est donc que Si une des noms dans la liste commence a un des horaires dans listeHoraire il soit extrait vers l'autre tableau.
Si vous rien que des pistes vous me sauvez.
Merci et bon dimanche
Bonjour,
Contrairement à ChatGPT, ici nous travaillons pour la plupart avec un support, et ce support est autre qu'une image
De mémoire et elle n'est pas infaillible, pour faire des filtre avancés sur plusieurs critères je crois que l'on peut utiliser des AND, OR, ou bien des > ou < ou =, non ?
@ bientôt
LouReeD
Nota : Petite question pour les "surveillants" : est-ce que l'utilisation de ChatGPT est considéré comme du crossposting ?