Formule avec le nom de feuille comme variable

Bonjour,

Je travail sur un nouveau rapport de chantier.

J'ai 3 feuilles nommées 01.08.2018, 02.08.2018 et 03.08.2018.

Et une feuille 'récap heure homme'

Sur la feuille récap heur homme, je fais la somme des heures d'une personne de la feuille 01.08.2018.

Je voudrais faire glisser cette formule situé en D4 =SOMME('02.08.2018'!G13:J13)

pour pouvoir l'appliquer a la colonne de mon tableau 03.08.2018. Ce qui devrait me donner en E4 :

=SOMME('03.08.2018'!G13:J13)

Mais ca ne se fait pas automatiquement. J'ai 31 jours à faire et je voudrais pas tout me taper à la main

Il faudrait que mon nom de feuille soit une variable.

Comment je peux faire ?

Merci d'avance

Florian

28forumv1.xlsm (178.55 Ko)

Bonjour,

Par exemple, si tu as ta liste de jour entre 1 et 31 en ligne 5. La formule en D4 à étendre vers la droite est:

=SI(CNUM(GAUCHE(D5;2))<10;SOMME(INDIRECT("'0"&GAUCHE(D5;1)&".08.2018'!G13:J13"));SOMME(INDIRECT("'"&GAUCHE(D5;2)&".08.2018'!G13:J13")))

Bonjour

Formule en C4 incrémentée vers la droite et vers le bas

=SOMME(INDIRECT("'"&TEXTE(C$3;"jj.mm.aaaa")&"'!G"&EQUIV($A4;INDIRECT("'"&TEXTE(C$3;"jj.mm.aaaa")&"'!A1:A100");0)&":J"&EQUIV($A4;INDIRECT("'"&TEXTE(C$3;"jj.mm.aaaa")&"'!A1:A100");0)))

Cordialement

51forumv1.xlsm (160.99 Ko)

Bonjour Amadéus,

Wouaw ! C'est exactement ce que je cherchais !

Merci beaucoup

Bonjour,

Je ne sais pas si vous êtes disponible Amadéus, mais j'ai encore besoin de votre aide. (Ou quelqu'un d'autre)

=SI('01.08.2018'!$B$54=T(A4);'01.08.2018'!$G$54;SI('01.08.2018'!$B$55=T(A4);'01.08.2018'!$G$55;SI('01.08.2018'!$B$56=T(A4);'01.08.2018'!$G$56;SI('01.08.2018'!$B$57=T(A4);'01.08.2018'!$G$57;SI('01.08.2018'!$B$58=T(A4);'01.08.2018'!$G$58;SI('01.08.2018'!$B$59=T(A4);'01.08.2018'!$G$59;SI('01.08.2018'!$B$60=T(A4);'01.08.2018'!$G$60;"")))))))

J'ai une formule relativement longue que je dois taper manuellement pour les 31 jours du mois.

Je travail sur la feuille "Heure par code". Ma formule est en B4, j'arrive à l'étendre sur toute la ligne. mais impossible d'une colonne à l'autre.

J'ai beau appliqué votre formule avec des modifications dessus, mais je n'y arrive pas.

Merci d'avance

Florian

10forum-v2.xlsm (222.58 Ko)

Bonjour,

Peux-tu expliquer ce que tu cherches à obtenir avec cette formule ?

Bonjour Pedro,

C'est assez compliqué à expliquer mais je vais essayé d'être le plus clair possible.

Alors, prenons le feuille 01.08.2018, je rentre un nombre d'heure pour une nature de travaux, je dois ensuite sélectionner dans la liste déroulante mon code.

Dans ma formule :

Quand mon code de la feuille "01.08.2018" de B54 jusqu'à B60 est identique au texte d'un de mes codes.

Je veux que dans ma cellule (B9 et B10 par exemple dans mon fichier) il y a inscrit le nombre d'heure effectué au travaux.

J'ai complété mon fichier pour un exemple.

J'espère avoir été assez clair dans mon explication.

Merci

13forum-v2.xlsm (227.42 Ko)

Formule en B4 :

=SI(ESTERREUR(RECHERCHEV($A4;INDIRECT("'"&B$3&"'!B54:H60");6;FAUX));"";RECHERCHEV($A4;INDIRECT("'"&B$3&"'!B54:H60");6;FAUX))

Bonjour

Plus court

=SIERREUR(RECHERCHEV($A4;INDIRECT("'"&B$3&"'!B54:G60");6;0);"")

Cordialement

C'est trop beau !

Je suis impressionné par la rapidité de réponse !

Merci beaucoup

J'ai un autre souci sur le même fichier, mais d'abord je vais chercher de mon côté encore quelques temps.

A bientôt

J'ai un autre souci sur le même fichier, mais d'abord je vais chercher de mon côté encore quelques temps.

J'approuve ! C'est le meilleure moyen de se torturer les neurones, mais aussi et surtout de progresser.

Bonjour,

J'ai réussi à avoir un calendrier dans ma feuille DATA.

Mon bouton Générer feuille me permet de créer une nouvelle feuille pour chaque jours de la semaine.

Pour les mois de 31 jours, tout marche bien, mais quand je passe aux mois de 30 jours, j'ai une erreur.

J'ai pu remarqué que pour le mois de septembre, ma cellule A31 n'a pas texte inscrit dedans mais elle contient une formule ! Je crois que l'erreur vient de la.

--> ActiveSheet.Name = Ws.Range("A" & J)

Sub Ajouter_Feuilles()
Dim J As Long
Dim Ws As Worksheet

  Application.ScreenUpdating = False
  Set Ws = ActiveSheet
   For J = 1 To Ws.Range("A" & Rows.Count).End(xlUp).Row
    If Not FeuilleExiste(Ws.Range("A" & J).Value) Then
      Sheets("Rapport").Copy after:=Sheets(Sheets.Count)
      ActiveSheet.Name = Ws.Range("A" & J)

    End If
  Next J
  Ws.Select
End Sub

'Si l'onglet  existe déjà, il n'est pas créé
Function FeuilleExiste(Nom As String) As Boolean
  On Error Resume Next
  FeuilleExiste = Sheets(Nom).Name <> ""
  On Error GoTo 0
End Function

Après ca, j'ai trouver comment colorier l'onglet d'une feuille en vba.

Mais je voudrais que quand ma cellule de mon calendrier est grise, la couleur de mon onglet crée devient automatique gris. (On verra ca plus tard)

Merci d'avance

(Oublie de ma part pour le fichier)

Florian

7forum-v3.xlsm (130.20 Ko)

Bonjour,

Renvoie ton fichier, par ce que ne sachant pas ce qu'il y a dans la colonne "A", c'est pas évident de comprendre d'où vient le soucis.

Pour les histoires de couleur, fait le manuellement et regarde le code dans l'enregistreur de macro.

L'instruction VBA "Ws.Range("A" & Rows.Count).End(xlUp).Row" te donne la dernière cellule non-vide de ta colonne A. Mais non-vide ne signifie pas seulement que tu ne vois rien dedans, mais aussi qu'il n'y a aucune formule. En clair, cette valeur est systématiquement égale à 31.

Je proposerais donc de modifier le code de la manière suivante :

Sub Ajouter_Feuilles()
Dim J As Long
Dim Ws As Worksheet

  Application.ScreenUpdating = False
  Set Ws = ActiveSheet
   For J = 1 To 31 'Ws.Range("A" & Rows.Count).End(xlUp).Row
    If Not FeuilleExiste(Ws.Range("A" & J).Value) And Len(Ws.Range("A" & J).Value) > 1 Then
      Sheets("Rapport").Copy after:=Sheets(Sheets.Count)
      ActiveSheet.Name = Ws.Range("A" & J)
    End If
  Next J
  Ws.Select
End Sub

C'est encore parfait ! Merci Pedro !

Avec Len > 1, c'est pour dire que ca effectue quelque chose quand j'ai minimum 2 caractères dans ma cellule ?

Maintenant je me penche sur un autre sujet !

Comment mettre un onglet en couleur quand la macro détecte une cellule (de ma colonne A) qui est remplie d'une couleur.

J'ai déjà cherché ce matin sans y arriver, mais je me donne encore un peu de temps avant de demander une réponse.

Je reviendrais vers vous plus tard

Merci encore !

Enregistreur de macro :

  • -> Change la couleur d'une cellule et regarde le code
  • -> Idem avec la couleur d'onglet

Bonjour,

Je me suis amusé vendredi et ce matin avec la fonction enregistreuse de macro, j’ai fait pleins de petites choses, je ne connaissais pas cette fonction auparavant !

Mais l’enregistreur de macro ne m’aide pas à résoudre mon problème.

J’aimerais détecté dans une plage de cellule (A1:A31) les cellules ayant une couleur grise. Cette couleur est donnée par une mise en forme conditionnelle.

Et pour chaque cellule grise, créer une nouvelle feuille de la même couleur et avec le texte de la cellule.

Les cellules grises changent d'endroit en fonction du mois que l'on choisi.

Grace à l’enregistreur de macro, j’ai obtenu un nombre qui correspond à ma couleur de cellule :

.ThemeColor = xlThemeColorDark1

.TintAndShade = -0.349986266670736

J'arrive à créer les nouveaux onglets pour chaque jour du calendrier mais pas à griser les cellules du week-end.

Sub Ajouter_Feuilles()
Dim J As Long
Dim Ws As Worksheet

  Application.ScreenUpdating = False
  Set Ws = ActiveSheet
   For J = 1 To 31
    If Not FeuilleExiste(Ws.Range("A" & J).Value) And Len(Ws.Range("A" & J).Value) > 1 Then
      Sheets("Rapport").Copy after:=Sheets(Sheets.Count)
      ActiveSheet.Name = Ws.Range("A" & J)
    End If
  Next J
  Ws.Select
End Sub

'Si l'onglet  existe déjà, il n'est pas créé
Function FeuilleExiste(Nom As String) As Boolean
  On Error Resume Next
  FeuilleExiste = Sheets(Nom).Name <> ""
  On Error GoTo 0
End Function

Auriez-vous une idée ?

Merci d'avance

Florian

4forum-v3.xlsm (119.92 Ko)

Bonjour,

C'est compliqué de trouver la couleur obtenue par mise en forme conditionnelle d'une cellule, car en réalité la couleur de remplissage reste inchangée. On peut en revanche utiliser la même formule que dans la mise en forme conditionnelle pour définir la couleur (ou en tout cas dire si une cellule respecte les conditions de mise en forme).

PS : si ton histoire de couleur est en rapport avec les jours de la semaine, il existe une fonction Excel =JOURSEM(Date;PremierJourSemaine) et son équivalent VBA WeekDay(Date,PremierJourSemaine).

Merci de ton retour,

Oui j'ai vu de mon coté qu'en VBA il faut utiliser WeekDay.

Maintenant je voir comment l'adapter à mon problème.

Erreur sur ma ligne :

--> If Wsfunction.Weekday((Ws.Range("A" & J).Value), 2) > 5 Then

Sub Ajouter_Feuilles()
Dim J As Long
Dim Ws As Worksheet

  Application.ScreenUpdating = False
  Set Ws = ActiveSheet
   For J = 1 To 31
    If Not FeuilleExiste(Ws.Range("A" & J).Value) And Len(Ws.Range("A" & J).Value) > 1 Then
      If Wsfunction.Weekday((Ws.Range("A" & J).Value), 2) > 5 Then
      Sheets("Rapport").Copy after:=Sheets(Sheets.Count)
      ActiveSheet.Name = Ws.Range("A" & J)
      ActiveSheet.Tab.Color = RGB(127, 127, 127)
      Else
      Sheets("Rapport").Copy after:=Sheets(Sheets.Count)
      ActiveSheet.Name = Ws.Range("A" & J)
      End If
    End If
  Next J
  Ws.Select
End Sub

'Si l'onglet  existe déjà, il n'est pas créé
Function FeuilleExiste(Nom As String) As Boolean
  On Error Resume Next
  FeuilleExiste = Sheets(Nom).Name <> ""
  On Error GoTo 0
End Function

Je n'arrive pas à savoir quoi changer..help

Merci d'avance

Rechercher des sujets similaires à "formule nom feuille comme variable"