Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
j 'ai besoin de vos lumière car je bricole les codes VBA que vous m 'avez donné ou que j 'ai trouvé mais quand ça marche pas je coince faute à ma mon manque de connaissance en la matière
voila j 'ai adapté un code pour faire une recherche détaillé sur un type d'absence pour avoir le solde par ligne
cela marche parfaitement!
seulement j 'aimerai faire plusieurs recherche sur la même feuil
donc j 'ai dupliqué le code puis changer les plages mais c 'est pas si simple
en faite ça plante et je sais pas comment enchainer plusieurs code de suite et même si c 'est possible
Je joint un fichier test et si on supprime le code qui se trouve en "2eme recherche" ca marche bien mais que pour le 1er type
Donc si quelqu" un pouvais m aider sur ce coup et surtout que j 'essais de comprendre comment on peut enchainer plusieurs codes....
ouh laa...la bricole semble avoir créé pas mal de souci..
et comme je ne sais pas ce que tu cherches à faire..difficile..
en tout cas. je vois déjà quelques erreurs..ou bizarreries..
1) dans ta feuille "Détail Congés Agent"
je ne vois pas l'interet d'avoir deux listes (en E3 et E4) qui ne proposent qu'un choix chacune.. Congés.. ou ARTT.
2) Dans la macroremière ligne
Code:
If Target.Address <> "$E$3" Then exit sub
avec ca.. aucune chance d'aller dans ta seconde recherche codée plus bas dans la macro..
si j'ai bien compris..
pour acceder à cette seconde recherche il faut cliquer/modifier sur la cellule E4 (Type ARTT)
or. le code ci dessus te dis que tu si cliques autre chose que E3 (Type Congés) alors. tu sors complètement de la macro. bref. tu court circuites tout ce qui est après..
il faut donc modifier cette première ligne pour permettre d'aller tester aussi la cellule E4
avec un goto
Code:
If Target.Address <> "$E$3" Then
GoTo DeuxièmeRecherche
End If
et en rajouttant une ligne au bon endroit pour définir le label DeuxièmeRecherche
Code:
'code de la première recherche
'---------------2eme recherche-----------------------------------------------'
'ARTT
DeuxièmeRecherche:
If Target.Address <> "$E$4" Then Exit Sub
Application.EnableEvents = False
'suite code 2eme recherche
3) Ensuite.. (comme dirait l'autre.. et c'est pas fini... ;-)
quand je lance la macro, il me dit que le cel de la seconde recherche est déjà utilisée..
ok pour faire simple.. je modifie juste les noms.. le Cel de la première recherche devient Cel1, et celui de la seconde recherche devient Cel2
et là..
4) je vois un
Code:
For Each cel1 In plage
mais pas de Next Cel1
5) autre point. la plage est définie comme juste la cellule E2 (celle qui contient le nom de l'agent.. Franck)
s'il n'y a pas d'erreur sur la plage.. pourquoi faire un for each. vu que c'est une seule cellule?
en admettant.. je rajoutte le Next Cel1 manquant juste avant
Code:
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
6) point suivant
il y a un with sheets(k)....
mais pas de end with..
je le rajoutte juste avant ta deuxième recherche..
point général..
pour éviter d'oublier des sorties de boucle, il faut absolument travailler la présentation des macros.. ce qu'on appelle l'indentation..
décaler les lignes de codes par bloc
au final (temporaire parce que j'ai pas testé) ca donne
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'1er recherche congés
If Target.Address <> "$E$3" Then
GoTo DeuxièmeRecherche
End If
Application.EnableEvents = False
tx = [E3]
lig = 8
[A8:G60].ClearContents
'Stop
Set plage = Sheets("détail congés agent").Range("E2")
For Each cel1 In plage
flag = 0
k = cel1.Value
If k = "" Then Application.EnableEvents = True: Exit Sub
'Stop
Next cel1
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
If flag = 0 Then MsgBox ("La feuille " & k & " n'existe pas, Faire les modif nécessaires"): Application.EnableEvents = True: Exit Sub
With Sheets(k).[D16:D98]
Set a = .Find(tx, LookIn:=xlValues)
If Not a Is Nothing Then
firstAddress = a.Address
Do
Cells(lig, 1) = Sheets(k).Cells(a.Row, 1)
Cells(lig, 2) = Sheets(k).Cells(a.Row, 2)
Cells(lig, 3) = Sheets(k).Cells(a.Row, 3)
Cells(lig, 4) = Sheets(k).Cells(a.Row, 4)
Cells(lig, 5) = Sheets(k).Cells(a.Row, 5)
Cells(lig, 6) = Sheets(k).Cells(a.Row, 6)
Cells(lig, 7) = Sheets(k).Cells(a.Row, 7)
lig = lig + 1
Set a = .FindNext(a)
Loop While Not a Is Nothing And a.Address <> firstAddress
End If
End With
'---------------2eme recherche-----------------------------------------------'
'ARTT
DeuxièmeRecherche:
If Target.Address <> "$E$4" Then Exit Sub
Application.EnableEvents = False
tx = [E3]
lig = 62
[A62:G120].ClearContents
'Stop
Set plage = Sheets("détail congés agent").Range("E2")
For Each Cel2 In plage
flag = 0
k = Cel2.Value
If k = "" Then Application.EnableEvents = True: Exit Sub
'Stop
Next Cel2
For Each sh In ActiveWorkbook.Sheets
If sh.Name = k Then a = sh.Name: flag = 1: Exit For
Next sh
If flag = 0 Then MsgBox ("La feuille " & k & " n'existe pas, Faire les modif nécessaires"): Application.EnableEvents = True: Exit Sub
With Sheets(k).[D16:D98]
Set a = .Find(tx, LookIn:=xlValues)
If Not a Is Nothing Then
firstAddress = a.Address
Do
Cells(lig, 1) = Sheets(k).Cells(a.Row, 1)
Cells(lig, 2) = Sheets(k).Cells(a.Row, 2)
Cells(lig, 3) = Sheets(k).Cells(a.Row, 3)
Cells(lig, 4) = Sheets(k).Cells(a.Row, 4)
Cells(lig, 5) = Sheets(k).Cells(a.Row, 5)
Cells(lig, 6) = Sheets(k).Cells(a.Row, 6)
Cells(lig, 7) = Sheets(k).Cells(a.Row, 7)
lig = lig + 1
Set a = .FindNext(a)
Loop While Not a Is Nothing And a.Address <> firstAddress
End If
End With
'End If
Application.EnableEvents = True
End Sub
ensuite ton code ne plante plus mais ne fait pas ce que je voulais
j 'ai compris pourquoi ca bouclais pas grasse à ton point 2!
en modifiant: le "E3" en "E4" j 'ai bien mes ARTT en 2eme partit de feuille DeuxièmeRecherche:
If Target.Address <> "$E$4" Then Exit Sub
Application.EnableEvents = False
tx = [E4]
mais la ligne :GoTo DeuxièmeRecherche me shunt totalement la recherche des congés (recherche 1)
en faite au il me fraudais les lignes congés dans la 1er partit et les ligne artt dans la 2eme parti
mais ne peut on pas déclencher la 1er macro en sélectionnant "congés" en E3 et la 2eme en sélectionnant "ARTT" en E4 ? ou déclencher les 2 recherches à la suite avec saut de lignes?
je rejoint le fichier test (qui plante plus cette fois)
hé hé ;-)
depuis j'ai retravaillé ta macro et trèèèès simplifiée..
1) j'ai supprimé la deuxième case Type (E4)
2) donc j'ai modifié la liste de validation pour E3 pour permettre le choix entre congés et ARTT
3) j'ai modifié tes deux formules en I4 etI5 qui selon le choix fait se trouvait donc fausse..
4) en H62, idem, j'ai modifié..
ou la la ! effectivement c 'est beaucoup plus claire et c 'est ce que je voulais !
en plus j 'ai " à peut près" compris ce que tu a fait
du coup pour vérifier que j 'avais compris j 'ai rajouter une 3eme recherche
et ça MARCHE !!!
Mais voila je me dit que si je veux changer de colonnes entre 2 recherches comment je peut faire avec ton code ?
Cells(lig, 1) = Sheets(NomAgent).Cells(a.Row, 1)
Cells(lig, 2) = Sheets(NomAgent).Cells(a.Row, 2)
Cells(lig, 3) = Sheets(NomAgent).Cells(a.Row, 3)
Cells(lig, 4) = Sheets(NomAgent).Cells(a.Row, 4)
Cells(lig, 5) = Sheets(NomAgent).Cells(a.Row, 5)
Cells(lig, 6) = Sheets(NomAgent).Cells(a.Row, 6)
Cells(lig, 7) = Sheets(NomAgent).Cells(a.Row, 7)
lig = lig + 1
Si tu souhaites changer de colonne (source ou destination? parce que celle que tu as mises en rouge sont les sources)
il te suffit de remplacer par une variable que tu changes selon la recherche et au bon moment, comme c'est le cas pour la variable "lig"
la. il faudrait que tu en dises un peu plus sur ce que tu veux faire
Edit: la formule en H111
il faut je pense mettre = I5-G111
et en I5 mettre: =RECHERCHEV(L4;INDIRECT($E2&"!$M$16:$ab$34");13;FAUX)
sauf que la. ca renvoie 0 et donc. le solde est faux..Excel n'aime pas les heures négatives..
et comme je ne vois pas ou et comment tu définis les soldes...
je voulais dire par la que les donnée afficher depuis tableau source "D16 : D98" ne sois pas toujours dans le même ordres ou les mêmes dans les divers section( congés/ARTT/exceptionnel)
mais comme les lignes "Cells(lig, 1) = Sheets(NomAgent).Cells(a.Row, 1)" sont commune au 3 recherches pour l' instant la mise en page de chaque section est forcement identique
Alors que j 'aimerai avoir une mise en page différente entre les section( plus ou moins de colonnes ou données différentes)
je sais pas si cela est possible de faire référence à une série de ligne de code personnalisé en fonction du type choisis?
Tout est toujours possible avec VBA, et c'est ca qui est formidable.
la facon de faire dépend fortement de ce que tu veux exactement.
à la limite, ce qu'il faudrait pour adapter le code, c'est que tu créés un onglet "Résultat attendu"
avec les dites colonnes que tu souhaites et où tu les souhaites
voire même une liste des données que tu veux récupérer en fonction du type
par exemple
pour le type Congés, tu souhaites récupérer les données: Date Début, Date Fin, Nb Jour et N° semaine
pour le type ARTT, tu souhaites: Date Fin, Date Début, centième
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.