Aide sur macro

Capitaine Flame

XLDnaute Nouveau
Bonjour,

Je fais appel à votre maîtrise de Excel et les macro.

Voici la macro :

Private Sub Worksheet_Change(ByVal Target As Range)

Dim derligne As Integer

If Target.Address <> "$b$2" Then Exit Sub

Range("b40:h51").ClearContents

For Each rw In Sheets("Licenciés").Rows
If Sheets("Licenciés").Cells(rw.Row, 1).Value = "" Then Exit For
If Sheets("Licenciés").Cells(rw.Row, 9).Value = Target.Value Then
derligne = Range("b65536").End(xlUp).Row + 1
Cells(derligne, 2).Value = Sheets("Licenciés").Cells(rw.Row, 1).Value
Cells(derligne, 3).Value = Sheets("Licenciés").Cells(rw.Row, 2).Value & " " & Sheets("Licenciés").Cells(rw.Row, 3).Value
Cells(derligne, 5).Value = Sheets("Licenciés").Cells(rw.Row, 4).Value
Cells(derligne, 6).Value = Sheets("Licenciés").Cells(rw.Row, 5).Value & " " & Sheets("Licenciés").Cells(rw.Row, 6).Value
Cells(derligne, 8).Value = Sheets("Licenciés").Cells(rw.Row, 7).Value

End If

Next rw

End Sub


Dans cette macro, on fait appelle à la valeur de la case B2 pour la suite du calcul. Or, dans cette cellule, j'ai une formule qui prend le résultat d'une cellule sur un autre onglet. J'ai donc 2 options : soit j'utilise le résultat texte de cette cellule, soit je vais chercher le résultat de la cellule initiale (cellule de copie pour B2)qui se trouve en onglet Départ B18.

Avez-vous une solution ?

Merci pour vos réponses.
 

Fred0o

XLDnaute Barbatruc
Re : Aide sur macro

Bonjour Capitaine Flame,

Je ne sais pas où est ton problème et tu ne nous le dis pas. Dans ces conditions, difficile de te venir en aide.

En lisant le code de ta macro, nulle part, tu ne fait appel à la valeur de la case B2, comme tu nous le dis :
Dans cette macro, on fait appelle à la valeur de la case B2 pour la suite du calcul. Or, dans cette cellule, j'ai une formule qui prend le résultat d'une cellule sur un autre onglet.

Mais tu testes seulement si la dernière cellule modifiée est la cellule "B2".

Peux-tu nous réexpliquer ton problème et eventuellement nous joindre un fichier exemple avec des données anonymisée ?

A+
 

Capitaine Flame

XLDnaute Nouveau
Re : Aide sur macro

Re,

Je vous joins mon fichier pour se rendre compte de la taille.

on retrouve l'onglet "Licenciés" puis les onglets de "J1 à J20 et S1 à S4". La case B2 est toujours la case d'accroche pour la catégorie sur ces onglets.

Maintenant, sur la macro ci-dessus, je dois remplir les cases B40 à H51 des onglets "J1 à S4" (ne pas s'occuper de l'onglet "C1") en reprenant les infos dans l'onglet "Licenciés" de la façon suivante :
- Onglet "Licenciés" colonne A va dans onglets "J1 à S4" colonne B
- Onglet "Licenciés" colonne B et C va dans onglets "J1 à S4" colonne C
- Onglet "Licenciés" colonne D va dans onglets "J1 à S4" colonne E
- Onglet "Licenciés" colonne E et F va dans onglets "J1 à S4" colonne F
- Onglet "Licenciés" colonne H va dans onglets "J1 à S4" colonne H

Dans la macro, cet la cellule B2 pour chaque onglet de "J1 à S4" qui sert de référence. Or, cette cellule renvoie à chaque fois sur une cellule de l'onglet "Départ".

je souhaite donc utiliser la macro ci-dessus pour les onglet de "J1 à S4".

Voilà, j'espère que cela vous aidera.

Les noms dans le listing sont fantaisiste. pour ce qui est des autres onglets, je m'en sers pour d'autres infos. D'ailleurs, dans chaque planning (onglet "J1 à S4"), j'ai déjà défini des formules de rattachement.

Merci pour votre aide.
 

Pièces jointes

  • Modèle Planning.xlsm
    380.3 KB · Affichages: 36
  • Modèle Planning.xlsm
    380.3 KB · Affichages: 44
  • Modèle Planning.xlsm
    380.3 KB · Affichages: 40

Robert

XLDnaute Barbatruc
Repose en paix
Re : Aide sur macro

Bonjour le fil, bonjour le forum,

Je n'ai pas ouvert ton fichier, mais si B2 contient une formule il est préférable d'utiliser la macro événementielle Calculate dans l'onglet. Sinon avec l'événement Change il te faut utiliser la cellule initiale mais le code sera dans l'onglet Départ.
 

Fred0o

XLDnaute Barbatruc
Re : Aide sur macro

Re-bonjour,

Je ne suis toujours pas sûr d'avoir tout compris mais au cas où, voici la macro par laquelle il faut remplacer la tienne dans la feuille "J1".

J'utilise l'évènement "Worksheet_Activate()" plutôt que "Worksheet_Change()", car dans tes onglets, il y a plein de formules et surtout, tu n'entres rien manuellement, surtout pas en B2.

Dis-moi si cela te convient :
VB:
Private Sub Worksheet_Activate()
    Dim derligne As Integer, rw As Range
    Range("b40:h51").ClearContents
    For Each rw In Sheets("Licenciés").Rows
        If Sheets("Licenciés").Cells(rw.Row, 2).Value = "" Then Exit For
        If Sheets("Licenciés").Cells(rw.Row, 8).Value = [B2] Then
            derligne = Range("b65536").End(xlUp).Row + 1
            Cells(derligne, 2).Value = Sheets("Licenciés").Cells(rw.Row, 1).Value
            Cells(derligne, 3).Value = Sheets("Licenciés").Cells(rw.Row, 2).Value & " " & Sheets("Licenciés").Cells(rw.Row, 3).Value
            Cells(derligne, 5).Value = Sheets("Licenciés").Cells(rw.Row, 4).Value
            Cells(derligne, 6).Value = Sheets("Licenciés").Cells(rw.Row, 5).Value & " / " & Sheets("Licenciés").Cells(rw.Row, 6).Value
            Cells(derligne, 8).Value = Sheets("Licenciés").Cells(rw.Row, 7).Value
        End If
    Next rw
End Sub

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia