IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Probleme de syntaxe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut Probleme de syntaxe
    Bonjour,

    J'ai un onglet par mois "2014-xx" par exemple
    le tableau que je dois compléter se trouve dans la Feuil1 C10:AH35.
    La ligne 10 étant le jour
    La colonne C contient la catégorie

    j'ai une erreur dans ma formule countif.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Dim mois, zone As String
    mois = Sheets("Réalisation Journalière").Range("D6").Value
    zone = (mois & "!AD;AD")
    For C = 11 To 35
     
    Cells(C.Row, 4).Value = Evaluate("=COUNTIF(zone,CONCATENATE(D10,Cells(C, 3))")
     
     
    Next C
    End Sub

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Par défaut
    Attention lorsque tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim mois, zone As String
    Mois n'est pas de type string mais variant. De plus tu n'as pas dimé C.

    Sinon je pense qu'il faut remplacer "AD;AD" par "AD:AD" ligne 4.

    Ligne 7: tu ne précise pas la feuille (ni le workbook) de Cells(C.Row, 4).Value ni de Cells(C, 3)

    Essaye déjà de régler ça

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    Bonjour ,

    J'ai comme resultat #NOM?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Sub Macro2()
     
    ' Macro2 Macro
     
    Dim mois As Variant
    Dim zone As String
     
    mois = Range("D6").Value
    zone = (mois & "!AD:AD")
    Sheets("Réalisation Journalière").Select
     
       For Each c In Range([B11], Cells(Rows.Count, 2).End(xlUp))
            If c <> "" And Cells(c.Row, 2) <> "" Then
                        Cells(c.Row, 4).Value = Evaluate("=COUNTIF(zone,CONCATENATE(Cells(10, 4),Cells(c.Row, 4))")
             End If
     
    Next c
     
    End Sub

  4. #4
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut



    Bonjour,

    entrer manuellement la formule directement dans une cellule d'une feuille de calculs puis,
    une fois au point, la publier ici afin de t'indiquer une méthode efficace pour la convertir en VBA …

    Dans le dernier code, il y a confusion entre texte et instructions ‼ Lire l'aide de la méthode Evaluate

  5. #5
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    Bonjour,

    voici le code que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ActiveCell.FormulaR1C1 = "=COUNTIF('2014-12'!C[26],R10C&RC[-1])"
        Range("D12").Select
    Merci pour votre aide

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut




    J'ai demandé la formule de calculs de la cellule, pas le code du Générateur de documents !

    Du coup, t'as trouvé la solution tout seul ! Voir aussi cette discussion


  7. #7
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,
    je ne sais plus ce que tu calcules, quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Cells(8, x + 3) = WorksheetFunction.CountIfs(Sheets(NomF).Range("AC:AC"), Cells(y, 8), Sheets(NomF).Range("L:L"), Cells(3, y))
    1 - Pourquoi "Range("AC:AC")" et "Range("L:L")", pourquoi ne prends-tu pas en compte la plage exacte, comme dans mon exemple
    2 - juste avant cette ligne essayes, afin de vérifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox  Cells(y, 8).address & " " & MsgBox Cells(3, y).address
    si les "Cells" appelées font parties de la feuille "Réalisation Journalière", mettre un point devant ".Cells(3, y)" sinon si c'est la feuille "NomF", le préciser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WorksheetFunction.CountIfs(Sheets(NomF).Range("AC:AC"),Sheets(NomF).Cells(y, 8)....
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  8. #8
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        .Cells(8, x + 3) = WorksheetFunction.CountIfs(NomF.Range("A2", Dl), "<>", NomF.Range("L2", Dl(1, 12)), "")
    donc la valeur de la cellule en ligne 8 et colonne x+3 compte le nombre de valeurs non vide en A et vides en L, Dl(1, 12) représentant la dernière cellule en A avec un décalage de 11 colonnes, avec offset ça s'écrirait Dl.Offset(0,11)
    CountIfs remplace SOMME.SI.ENS sur Excel, il suffit de regarder l'aide

    Non pas de "dim date as ? car Date est un mot réservé, tu peux choisir au hasard "dim ladate as ?", pour remplacer le "?", il faut savoir ce que tu veux faire :
    1 - se référer à une date donc 2 - se référer à un texte donc ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ladate = Worksheet(Range("D6"))
    Sheets(ladate).Ce que tu veux
    3 - se référer à une feuille donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim ladate as WorkSheet
    , ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set ladate = Worksheet(Range("D6").Value)
    ladate.ce que tu veux
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  9. #9
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    bonjour,

    voici mon code en revanche je bug sur le nb.si.ens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Sub findate()
     Dim AUJ, AUTM, FINM As Date, MM, AA As Integer
     Dim NomF As String
     Cells(7, 3) = Evaluate("=YEAR(C5)&""_""&TEXT(MONTH(C5),""00"")") 'nom de l'onglet mois
     NomF = Range("C7").Value
     AUJ = Range("C5")
     Range("D9:AH9").ClearContents
     MM = Month(AUJ)
     If MM < 12 Then
     AA = Year(AUJ)
     Else
     AA = Year(AUJ) + 1
     End If
     AUTM = CVDate("1/" & MM + 1 & "/" & AA)
     FINM = AUTM - 1
     JFINM = Day(FINM)
     
     Cells(9, 4) = AUJ
     For B = 5 To JFINM + 3
     Cells(9, B).Value = Cells(9, B - 1) + 1
     Next B
     
    Dim C As Range, x As Long, y As Long, z As Long
    Dim Cpte As Long
    Dim Tb2013, TbMensuel
    With Sheets("Réalisation Journalière")
       Range("D12:AH35") = Null 'ici remettre toutes les colonnes _
      quand le fichier aura toutes ses feuilles donc ".Range("D9:O32") = Null"
        Tb2013 = Range("D12:AH35") 'ici remettre toutes les colonnes _
      quand le fichier aura toutes ses feuilles donc ".Range("B9:O32") = Null"
      For x = 1 To JFINM 'le nombre de jours du mois
          TbMensuel = Sheets(NomF).Range("L2", Sheets(NomF).Range("L" & Sheets(NomF).Rows.Count).End(xlUp))
        For y = 1 To UBound(Tb2013, 1)
          For z = 1 To UBound(TbMensuel, 1)
            If Tb2013(y, 1) = TbMensuel(z, 1) Then Cpte = Cpte + 1
          Next z
          Tb2013(y, x) = Cpte
          Cpte = 0
        Next y
        Set Dl = Sheets(NomF).Range("A" & Sheets(NomF).Rows.Count).End(xlUp)
        .Cells(8, x + 3) = WorksheetFunction.CountIfs(Sheets(NomF).Range("AC:AC"), Cells(y, 8), Sheets(NomF).Range("L:L"), Cells(3, y))
      Next x
      .Range("D12").Resize(UBound(Tb2013, 1), UBound(Tb2013, 2)) = Tb2013
    End With
    Application.EnableEvents = True
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
     
     End Sub

  10. #10
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,

    ça ne résoudra pas ton problème mais fais cette expérience et tu verras que tu as une condition inutile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For Each c In Range([A9], Cells(Rows.Count, 1).End(xlUp))
      MsgBox c.Address & " " & Cells(c.Row, 1).Address
    Next
    donc ici, à corriger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If C <> "" And Cells(C.Row, 1) <> "" Then
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  11. #11
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    Bonjour,

    j'ai corrigé mon code il fonctionne en revanche pouvez vous m'aider a l'optimiser ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    Sub Macro2013()
    '
    ' Macro2013
    '
     
     
    Sheets("Annee_2013").Select
     
       For Each C In Range([A9], Cells(Rows.Count, 1).End(xlUp))
               If Cells(C.Row, 2) <> "" Then
               Cells(C.Row, 4).Value = Evaluate("=COUNTIF(2013_01!L:L,(B" & C.Row & "))")
               Cells(C.Row, 5).Value = Evaluate("=COUNTIF(2013_02!L:L,(B" & C.Row & "))")
               Cells(C.Row, 6).Value = Evaluate("=COUNTIF(2013_03!L:L,(B" & C.Row & "))")
               Cells(C.Row, 7).Value = Evaluate("=COUNTIF(2013_04!L:L,(B" & C.Row & "))")
               Cells(C.Row, 8).Value = Evaluate("=COUNTIF(2013_05!L:L,(B" & C.Row & "))")
               Cells(C.Row, 9).Value = Evaluate("=COUNTIF(2013_06!L:L,(B" & C.Row & "))")
               Cells(C.Row, 10).Value = Evaluate("=COUNTIF(2013_07!L:L,(B" & C.Row & "))")
               Cells(C.Row, 11).Value = Evaluate("=COUNTIF(2013_08!L:L,(B" & C.Row & "))")
               Cells(C.Row, 12).Value = Evaluate("=COUNTIF(2013_09!L:L,(B" & C.Row & "))")
               Cells(C.Row, 13).Value = Evaluate("=COUNTIF(2013_10!L:L,(B" & C.Row & "))")
               Cells(C.Row, 14).Value = Evaluate("=COUNTIF(2013_11!L:L,(B" & C.Row & "))")
               Cells(C.Row, 15).Value = Evaluate("=COUNTIF(2013_12!L:L,(B" & C.Row & "))")
     
            End If
     
    Next C
               Cells(8, 4).Value = Evaluate("=IF(COUNTA(2013_01!T:T)>=1,COUNTA(2013_01!T:T)-1,COUNTA(2013_01!T:T))")
               Cells(8, 5).Value = Evaluate("=IF(COUNTA(2013_02!T:T)>=1,COUNTA(2013_02!T:T)-1,COUNTA(2013_02!T:T))")
               Cells(8, 6).Value = Evaluate("=IF(COUNTA(2013_03!T:T)>=1,COUNTA(2013_03!T:T)-1,COUNTA(2013_03!T:T))")
               Cells(8, 7).Value = Evaluate("=IF(COUNTA(2013_04!T:T)>=1,COUNTA(2013_04!T:T)-1,COUNTA(2013_04!T:T))")
               Cells(8, 8).Value = Evaluate("=IF(COUNTA(2013_05!T:T)>=1,COUNTA(2013_05!T:T)-1,COUNTA(2013_05!T:T))")
               Cells(8, 9).Value = Evaluate("=IF(COUNTA(2013_06!T:T)>=1,COUNTA(2013_06!T:T)-1,COUNTA(2013_06!T:T))")
               Cells(8, 10).Value = Evaluate("=IF(COUNTA(2013_07!T:T)>=1,COUNTA(2013_07!T:T)-1,COUNTA(2013_07!T:T))")
               Cells(8, 11).Value = Evaluate("=IF(COUNTA(2013_08!T:T)>=1,COUNTA(2013_08!T:T)-1,COUNTA(2013_08!T:T))")
               Cells(8, 12).Value = Evaluate("=IF(COUNTA(2013_09!T:T)>=1,COUNTA(2013_09!T:T)-1,COUNTA(2013_09!T:T))")
               Cells(8, 13).Value = Evaluate("=IF(COUNTA(2013_10!T:T)>=1,COUNTA(2013_10!T:T)-1,COUNTA(2013_10!T:T))")
               Cells(8, 14).Value = Evaluate("=IF(COUNTA(2013_11!T:T)>=1,COUNTA(2013_11!T:T)-1,COUNTA(2013_11!T:T))")
               Cells(8, 15).Value = Evaluate("=IF(COUNTA(2013_12!T:T)>=1,COUNTA(2013_12!T:T)-1,COUNTA(2013_12!T:T))")
     
    If Range("D34").Value = 0 Then
    Range("D8:D32").Value = Null
    End If
     
    If Range("E34").Value = 0 Then
    Range("E8:E32").Value = Null
    End If
     
    If Range("F34").Value = 0 Then
    Range("F8:F32").Value = Null
    End If
     
     
    If Range("G34").Value = 0 Then
    Range("G8:G32").Value = Null
    End If
     
    If Range("H34").Value = 0 Then
    Range("H8:H32").Value = Null
    End If
     
    If Range("I34").Value = 0 Then
    Range("I8:I32").Value = Null
    End If
     
    If Range("J34").Value = 0 Then
    Range("J8:J32").Value = Null
    End If
     
    If Range("K34").Value = 0 Then
    Range("K8:K32").Value = Null
    End If
     
    If Range("L34").Value = 0 Then
    Range("L8:L32").Value = Null
    End If
     
    If Range("M34").Value = 0 Then
    Range("M8:M32").Value = Null
    End If
     
    If Range("N34").Value = 0 Then
    Range("N8:N32").Value = Null
    End If
     
    If Range("O34").Value = 0 Then
    Range("O8:O32").Value = Null
    End If
     
    End Sub

  12. #12
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir Stephane, Laurent, le forum
    Hum, ça me semble bien compliqué :p, un petit coup de main Casefayere ?
    Je suis un peu largué car, apparemment ce n'est pas le code que j'ai proposé
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  13. #13
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    bonjour,

    je suis d'accord ce n'est pas ton code mais je tente de multiple test parce que j'ai besoin d'obtenir un résultat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        For L = 3 To 31 'le jour  du  mois
        For M = 11 To 35 ' la category a comptabiliser
        Cells(M, L) = WorksheetFunction.CountIfs(Sheets(NomF).Range("AC2", Dl(1, 29)), Cells(9, L), Sheets(NomF).Range("L2", Dl(1, 12)), Cells(M, 2))
        Next M
        Next L
    pour répondre a qwerty je ne peux pas faire de régroupement de mois il me faut obligatoirement un onglet par mois.

  14. #14
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 121
    Par défaut
    Salut

    Alors sinon, pour le tableau de rapport annuel, dans la cellule D9 (2ème cellule de Janvier), tu places cette formule
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS(INDIRECT("'"&$F$4&"_"&TEXTE(COLONNE()-3;"00")&"'!L:L");$B9)
    Tu l'étires sur la colonne et ensuite tu l'étires sur le tableau complet.

    Puis dans la 1ère ligne du tableau (valeur vide), tu places la formule suivante et tu l'étires sur la ligne complète.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.VIDE(DECALER(INDIRECT("'"&$F$4&"_"&TEXTE(COLONNE()-3;"00")&"'!L1");0;0;NB.SI(INDIRECT("'"&$F$4&"_"&TEXTE(COLONNE()-3;"00")&"'!M:M");"<>");1))
    J'oubliais, j'ai supprimer toute les colonne vide dans les onglets 2013_xx (de sorte que category se retrouve en colonne L).
    Puis en colonne M, tu étends la formule suivante en partant de la cellule M2
    (c'est pour le tableau journalier mais je l'utilise pour compter le nombre de ligne pour les formule de la ligne une de la feuille annuel, donc il faut la mettre pour que tout se calcule bien)


    Pour le second tableau (répartition par journée)

    En cellule D11
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS(INDIRECT("'"&$D$6&"'!L:L");"";INDIRECT("'"&$D$6&"'!M:M");D$9)
    A étendre sur la ligne complète

    En cellule D12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NB.SI.ENS(INDIRECT("'"&$D$6&"'!L:L");$C12;INDIRECT("'"&$D$6&"'!M:M");D$9)
    A étendre sur le reste du tableau

    Pense à supprimer toutes les formules qui traine à droite à gauche et qui ne te serve plus, ça allégera un peu le temps de calcul.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  15. #15
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    Bonjour,

    Dans le tableau journalier je dois pouvoir changer le mois et avoir les valeurs du mois, je ne veux pas de tableau journalier pour chaque mois.

    D'où le tableau actualisé par macro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(M, L) = WorksheetFunction.CountIfs(Sheets(NomF).Range("AC2", Dl(1, 29)), Cells(9, L), Sheets(NomF).Range("L2", Dl(1, 12)), Cells(M, 2))
    en colonne AC colonne 29 de l'onglet 2013_01, j'ai la date du jour lorsque je fais Cells(9, L) il trouve bien la date recherchée

    en colonne L colonne 12 de l'onglet 2013_01, j'ai la category lorsque je fais Cells(M,2 ) il trouve bien la category recherchée

    Dans mon tableau il m'affiche le total global de chaque category sur touT le mois.

  16. #16
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    je veux bien t'aider mais il faut envoyer un fichier bidon avec quelques données pour qu je comprenne et puisse vérifier ce que je proposerai

    Si, sur ton fichier original, tu as beaucoup de données (à me confirmer), on passera certainement par des "variables tableau" beaucoup plus rapides au traitement

    exemple, pour ta 1ère partie, sans tableaux et à adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim C As Range, x As Long
    With Sheets("Annee_2013")
      For Each C In .Range("A9", .Range("A" & .Rows.Count).End(xlUp))
        If C(1, 2) <> "" Then
          For x = 4 To 15
            C(1, x) = WorksheetFunction.CountIf(Sheets("2013_0" & x - 3).Columns(12), "B" & C.Row)
          Next x
        End If
      Next C
      '.....
    End With
    remplacerait cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    '....
    If Cells(C.Row, 2) <> "" Then
               Cells(C.Row, 4).Value = Evaluate("=COUNTIF(2013_01!L:L,(B" & C.Row & "))")
               Cells(C.Row, 5).Value = Evaluate("=COUNTIF(2013_02!L:L,(B" & C.Row & "))")
               Cells(C.Row, 6).Value = Evaluate("=COUNTIF(2013_03!L:L,(B" & C.Row & "))")
               Cells(C.Row, 7).Value = Evaluate("=COUNTIF(2013_04!L:L,(B" & C.Row & "))")
               Cells(C.Row, 8).Value = Evaluate("=COUNTIF(2013_05!L:L,(B" & C.Row & "))")
               Cells(C.Row, 9).Value = Evaluate("=COUNTIF(2013_06!L:L,(B" & C.Row & "))")
               Cells(C.Row, 10).Value = Evaluate("=COUNTIF(2013_07!L:L,(B" & C.Row & "))")
               Cells(C.Row, 11).Value = Evaluate("=COUNTIF(2013_08!L:L,(B" & C.Row & "))")
               Cells(C.Row, 12).Value = Evaluate("=COUNTIF(2013_09!L:L,(B" & C.Row & "))")
               Cells(C.Row, 13).Value = Evaluate("=COUNTIF(2013_10!L:L,(B" & C.Row & "))")
               Cells(C.Row, 14).Value = Evaluate("=COUNTIF(2013_11!L:L,(B" & C.Row & "))")
               Cells(C.Row, 15).Value = Evaluate("=COUNTIF(2013_12!L:L,(B" & C.Row & "))")
     
            End If
    '...
    Bonne journée

    Comme je vais être absent, ci-dessous, une proposition pour le code complet, n'en garder que le principe n'ayant pas de fichier sous la main, à toi d'adapter les cellules à rechercher et cellules resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub Macro2013()
    Dim C As Range, x As Long
    With Sheets("Annee_2013")
      For Each C In .Range("A9", .Range("A" & .Rows.Count).End(xlUp))
        If C(1, 2) <> "" Then
          For x = 4 To 15
            C(1, x) = WorksheetFunction.CountIf(Sheets("2013_0" & x - 3).Columns(12), "B" & C.Row)
          Next x
        End If
      Next C
      For x = 4 To 15
        If WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20)) >= 1 Then
          .Cells(8, x) = WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20)) - 1
        Else
          .Cells(8, x) = WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20))
        End If
      Next x
      For x = 4 To 15
        If .Cells(34, x) = 0 Then
          .Range(.Cells(8, x), Cells(32, x)) = Null
        End If
      Next x
    End With
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  17. #17
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    voici le fichier

    Je n'ai mis que 3 mois problèmes de taille

    Tu verras que pour le calcul des category vide j'ai créé une colonne T il y a peut etre moyen de s'en passer mais je bloque sur l'analyse journaliere.
    Fichiers attachés Fichiers attachés

  18. #18
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonjour,

    essayes ce code, pour 3 mois comme tu l'as précisé, de toutes façon je pense qu'il faudra, une fois ce code vérifié, passer par des variables tableau car tu possède beaucoup de données et le temps d'execution risque d'être long, les variables tableau permettront d'aller beaucoup plus vite, mais ne grillons pas les étapes, comprends déjà cette procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub Macro2013_bis()
    Dim C As Range, x As Long
    With Sheets("Annee_2013")
        .Range("D9:F32") = Null 'ici remettre toutes les colonnes _
      quand le fichier aura toutes ses feuilles donc ".Range("D9:O32") = Null"
      For Each C In .Range("A9", .Range("A" & .Rows.Count).End(xlUp))
        If C(1, 2) <> "" Then
          For x = 4 To 6 'ici remettre 15 quand toutes les feuilles seront réintégrées
            C(1, x) = WorksheetFunction.CountIf(Sheets("2013_0" & x - 3).Columns(12), .Range("B" & C.Row))
          Next x
        End If
      Next C
      For x = 4 To 6 'ici remettre 15 quand toutes les feuilles seront réintégrées
        If WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20)) >= 1 Then
          .Cells(8, x) = WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20)) - 1
        Else
          .Cells(8, x) = WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20))
        End If
      Next x
    End With
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  19. #19
    Membre éclairé
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2014
    Messages
    326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2014
    Messages : 326
    Par défaut
    Merci je vais testé en revanche je me pose une question concernant la syntaxe de la ligne 9
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            C(1, x) = WorksheetFunction.CountIf(Sheets("2013_0" & x - 3).Columns(12), .Range("B" & C.Row))
    que se passera til a partir du mois d'octobre avec 2013_10

  20. #20
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir,

    Bonne question, je me suis fait piéger, il faut que j'y remédie, (une condition supplémentaire If x-3 < 10...Else...)

    Alors patience

    Essaies ce code avec des tableaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Sub Macro2013_bis()
    Dim C As Range, x As Long, y As Long, z As Long
    Dim Cpte As Long, NomF As Worksheet
    Dim Tb2013, TbMensuel
    With Sheets("Annee_2013")
      .Range("D9:F32") = Null 'ici remettre toutes les colonnes _
      quand le fichier aura toutes ses feuilles donc ".Range("D9:O32") = Null"
        Tb2013 = .Range("B9:F32") 'ici remettre toutes les colonnes _
      quand le fichier aura toutes ses feuilles donc ".Range("B9:O32") = Null"
      For x = 1 To 3 'ici remettre 12 quand toutes les feuilles seront réintégrées
        If x < 10 Then
          Set NomF = Sheets("2013_0" & x)
        Else
          Set NomF = Sheets("2013_" & x)
        End If
        With NomF
          TbMensuel = .Range("L2", .Range("L" & .Rows.Count).End(xlUp))
        End With
        For y = 1 To UBound(Tb2013, 1)
          For z = 1 To UBound(TbMensuel, 1)
            If Tb2013(y, 1) = TbMensuel(z, 1) Then Cpte = Cpte + 1
          Next z
          Tb2013(y, x + 2) = Cpte
          Cpte = 0
        Next y
      Next x
      .Range("B9").Resize(UBound(Tb2013, 1), UBound(Tb2013, 2)) = Tb2013
     
     
    'je n'ai pas, pour l'instant retraité la partie ci-dessous
     
      For x = 4 To 6 'ici remettre 15 quand toutes les feuilles seront réintégrées
        If WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20)) >= 1 Then
          .Cells(8, x) = WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20)) - 1
        Else
          .Cells(8, x) = WorksheetFunction.CountA(Sheets("2013_0" & x - 3).Columns(20))
        End If
      Next x
    End With
    End Sub
    Une autre mouture
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub Macro2013_bis()
    Dim C As Range, x As Long, y As Long, z As Long
    Dim Cpte As Long, NomF As Worksheet
    Dim Tb2013, TbMensuel
    With Sheets("Annee_2013")
      .Range("D9:F32") = Null 'ici remettre toutes les colonnes _
      quand le fichier aura toutes ses feuilles donc ".Range("D9:O32") = Null"
        Tb2013 = .Range("B9:F32") 'ici remettre toutes les colonnes _
      quand le fichier aura toutes ses feuilles donc ".Range("B9:O32") = Null"
      For x = 1 To 3 'ici remettre 12 quand toutes les feuilles seront réintégrées
        If x < 10 Then
          Set NomF = Sheets("2013_0" & x)
        Else
          Set NomF = Sheets("2013_" & x)
        End If
        TbMensuel = NomF.Range("L2", NomF.Range("L" & NomF.Rows.Count).End(xlUp))
        For y = 1 To UBound(Tb2013, 1)
          For z = 1 To UBound(TbMensuel, 1)
            If Tb2013(y, 1) = TbMensuel(z, 1) Then Cpte = Cpte + 1
          Next z
          Tb2013(y, x + 2) = Cpte
          Cpte = 0
        Next y
        If WorksheetFunction.CountA(NomF.Columns(20)) >= 1 Then
          .Cells(8, x + 3) = WorksheetFunction.CountA(NomF.Columns(20)) - 1
        Else
          .Cells(8, x + 3) = WorksheetFunction.CountA(NomF.Columns(20))
        End If
      Next x
      .Range("B9").Resize(UBound(Tb2013, 1), UBound(Tb2013, 2)) = Tb2013
    End With
    End Sub
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. probleme de syntaxe sql dans VB
    Par njac dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/05/2005, 14h41
  2. [VB.NET] Probleme de syntaxe
    Par microthib dans le forum Windows Forms
    Réponses: 4
    Dernier message: 17/03/2005, 13h49
  3. probleme fonction syntaxe
    Par gIch dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/02/2005, 09h52
  4. [Débutante] Problèmes de syntaxe
    Par new_wave dans le forum Prolog
    Réponses: 4
    Dernier message: 02/11/2004, 18h39
  5. Problemes de syntaxe
    Par maahta dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 01/10/2003, 13h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo