j'ai réussi à créer le code joint. mais je n'obtient pas le bon résultat avec ma boucle qui inclut if. je voudrai qu'il utilise la deuxième macro uniquement si le montant de ma cellule en colonne 15 situe sur la même ligne que ma référence c est supérieur a zéro.
en fait il s'agit de créer une facture, en fonction du nombre de présence au cour, sachant que la liste des personne n est pas épurer chaque mois car on en a besoin pour autre chose. donc ceux non présent affiche zéro.
bref je m égare, j'aimerai que ma fonction if me créer uniquement un onglet pour les personnes présente au cour du mois.
c'est pas forcement super propre, si vous pouviez m'aider ce serai genial
Dim test Dim dernligne As Long Dim premligne As Long
'definir les premieres et dernieres ligne premligne = 8 dernligne = Range("A8").End(xlDown).Row
'boucle pour chaque cellule non vide sur la premiere colonne a parti de a8 For Each c In Range(Cells(premligne, 1), Cells(dernligne, 1))
'le nom = la valeur inscrite dans la cellule de la 1er colonne nom = c.Value 'definir la valeur test test = Cells(c.Row, 15).Value
'boucle faire tant que la cellule facturation est sup a 0 'creation d'un nouvel onglet et le nommer au nom de l enfant If test > 0 Then Call creation_facture
Le code semble "correct" à l'exception qu'il serait judicieux de spécifier la feuille concernée à chaque fois... car si dans ta seconde macro tu ajoutes une nouvelle feuille... ton code ne pointe plus sur les bonnes cellules....
Donc un truc du genre :
Dim sh As Worksheet
Dim rng As Range
Set sh = Sheets("FACT")
Set rng = sh.Range(Cells(premligne, 1), Cells(dernligne, 1))
For Each c In rng
'le nom = la valeur inscrite dans la cellule de la 1er colonne
nom = c.Value
'definir la valeur test
test = sh.Cells(c.Row, 15).Value
'boucle faire tant que la cellule facturation est sup a 0
'creation d'un nouvel onglet et le nommer au nom de l enfant
If test > 0 Then Call creation_facture
Next
COmmence par faire tourner la macro en mode pas à pas ... et regarde la valeur de ta variable.....
Au cas où ... ajoute un peu de débogage sous la ligne qui récupère la valeur... histoire de pouvoir voir le résultat dans la fenêtre d'exécution du VBE
test = sh.Cells(c.Row, 15).Value
debug.print " c.row = " & c.Row & " test = " & test 'affiche dans la fenêtre d'exécution