Exporter resultats pour calcul %

Bonsoir le forum

Je suis bloqué pour la suite de mon développement.

Je vais essayer d'être le plus précis possible.

Code feuille "DATA"

Private Sub Worksheet_Activate()
FRM_Gestion.Hide

Dim i As Integer
Const myFormula As String = "=COUNTIF(Tbl_1[CONFORME O / N / PE],""PE"")"

Application.ScreenUpdating = False

        With Sheets("DATA")
            .Range("D9:D60").ClearContents
            .Range("F9:F60").ClearContents
            .Range("G9:G60").ClearContents
        End With

    For i = 3 To Sheets.Count  'A partir de l'onglet 3 et jusqu'a la dernière
        With Sheets("DATA")    'Choix de l'onglet "DATA"
            .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
            .Range("F" & 9 + i - 3) = "=COUNTIF(Tbl_1[CONFORME O / N / PE],""O"")"
            .Range("G" & 9 + i - 3) = "=COUNTIF(Tbl_1[CONFORME O / N / PE],""N"")"
        End With
    Next i
Application.ScreenUpdating = True
End Sub

Ce code à pour but:

De lister toutes les feuilles après la feuille "ADMINISTRATEUR" et de mettre aussi le Nbre de "O" et "N" à partir de "D9" de chaque feuilles

Soit en "D9" = Tbl_1-P1 en "F9" le nbre de "O" en "G9" le nbre de "N".

Pour l'intant, j'ai bien la liste des feuilles , mais pas les nbres "O" et "N" correspondant.

Code Userform2

PROCEDURE METTRE "PE" DANS COLONNE D A PARTIR DE LA LIGNE 3 SI CELLULE B N'EST PAS VIDE sur toutes les feuilles

Private Sub CommandButton3_Click()
 Dim plage As Range
Dim i%, Y%
    For i = 3 To Worksheets.Count
         With Worksheets(i)
             For Y = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
                If Not IsEmpty(.Cells(Y, 3)) Then
                .Cells(Y, 4) = "PE"                                     'Ecriture pas essayer "PE"
                .Range(.Cells(Y, 5), .Cells(Y, 10)).ClearContents   'Raz des informations de saisie
                .Columns("G:I").EntireColumn.Hidden = True              ' Choix des colonnes METTRE LE MASQUE
                '.Range("E9") = "=COUNTIF(Tbl_1[CONFORME O / N / PE],""PE"")"  ' Compte le nbre de cellule ou "PE" est inscrit par feuilles
                End If
            Next Y
         End With
    Next i
        MsgBox "Toutes les feuilles sont mises à jour", vbInformation 'Dim derlig As Long
    Unload UserForm2

End Sub

Ce code à pour but:

De mettre dans la feuill "DATA" en "D9" le nbre de "PE" quand je fais "INIT DOSSIER", ce qui va me permettre de pouvoir après faire un calcul %

Je vous joint mon fichier

Merci de votre aide

A bientôt

Bonjour,

Pour la première macro:

Private Sub Worksheet_Activate()
    Dim i As Integer
    FRM_Gestion.Hide

    Application.ScreenUpdating = False
    With Sheets("DATA")
        .Range("D9:D60").ClearContents
        .Range("E9:E60").ClearContents
        .Range("F9:F60").ClearContents
        .Range("G9:G60").ClearContents
    End With

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then
            Tbl = Left(Sheets(i).Name, 5)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
                .Range("e" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"
                .Range("f" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")"
                .Range("g" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""N"")"
            End With
        End If
    Next i
End Sub

Pour la deuxième macro, j'ai pas compris,

De mettre dans la feuill "DATA" en "D9" le nbre de "PE" En D9 il y a déjà la liste des onglets!

Cdlt

Bonjour le forum

Bonjour Arturo83 et merci de ton aide

Première Macro

Merci cela fonctionne , je vais regarder la différence entre les 2

Private Sub Worksheet_Activate()
    Dim i As Integer
    FRM_Gestion.Hide

    Application.ScreenUpdating = False
    With Sheets("DATA")
        .Range("D9:D60").ClearContents
        '.Range("E9:E60").ClearContents
        .Range("F9:F60").ClearContents
        .Range("G9:G60").ClearContents
    End With

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then
            Tbl = Left(Sheets(i).Name, 5)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
                '.Range("e" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"
                .Range("f" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")"
                .Range("g" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""N"")"
            End With
        End If
    Next i
End Sub

Cette ligne de la première macro je l'ai désactivée volontairement

'.Range("e" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"

j'aimerais qu'elle soit dans la seconde macro Code Userform2
Ce qui va me permettre d'avoir le nbre de "PE" a l'initialisation du dossier et donc me donner la valeur fixe de "PE"
ce nbre sera mis en feuil "DATA" en "e9" pour chaque sheets (i) Name
A partir de cela je pense pouvoir calculer le % de "O" et le "N" par rapport à "PE"
Voilà
Merci de ton aide

Re le forum

Après vérification, je me suis réjoui un peux trop top

la macro 1 ne fonctionne pas correctement:

1- ne sait pas faire la différence entre "O" et "N"

2-N'accepte pas d'ajout de feuilles en plus dans le classeur

Merci de votre aide

A bientôt

Bonjour,

D'abord, pour ce que vous avez demandé:

Ce qui va me permettre d'avoir le nbre de "PE" a l'initialisation du dossier et donc me donner la valeur fixe de "PE"
ce nbre sera mis en feuil "DATA" en "e9" pour chaque sheets (i) Name

'PROCEDURE METTRE "PE" DANS COLONNE D A PARTIR DE LA LIGNE 3 SI CELLULE B N'EST PAS VIDE sur toutes les feuilles

Private Sub CommandButton3_Click()
    Dim plage As Range
    Dim i%, Y%
    For i = 1 To Worksheets.Count
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then
            Tbl = Left(Sheets(i).Name, 5)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
                .Range("e" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"
                '.Range("f" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")"
                '.Range("g" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""N"")"
            End With
        End If
    Next i
    Next i
    MsgBox "Toutes les feuilles sont mises à jour", vbInformation 'Dim derlig As Long
    Unload UserForm2
End Sub

Ensuite,

la macro 1 ne fonctionne pas correctement:

1- ne sait pas faire la différence entre "O" et "N", J'ai refait plusieurs essais et ça fonctionne très bien

2- N'accepte pas d'ajout de feuilles en plus dans le classeur, C'est normal, si vous avez fait des "copiés-collés", d'une feuille sur l'autre, il faut penser à renommer le tableau structuré, exemple, j'ai copié la feuille "Tbl_3-PS" et collé dans une nouvelle feuille, dans la feuille "Tbl_3-PS" le tableau structuré s'appelait "Tbl3", et dans la nouvelle feuille, suite au copié-collé, il devient "Tbl35", son numéro ne correspond pas, il faut le renommer "Tbl4" et ainsi de suite pour les autres créations de feuilles.

Question: le nombre de feuilles "Tbl_xxxx" sera-t-il supérieur à 9?

Cdlt

Bonsoir le forum

Bonsoir Arthuro83

1- ne sait pas faire la différence entre "O" et "N", J'ai refait plusieurs essais et ça fonctionne très bien

Je pense que j'avais mes deux fichiers ouvert , je vérifie cela demain

2- N'accepte pas d'ajout de feuilles en plus dans le classeur

j'ai bien fait attention pour que chaque onglet contienne le numéro de tableau "Tbl_1" , Tbl_2 ,ect Ils sont bien nommés dans le gestionnaire de noms

Par contre ne fait pas la différence avec Tbl_11. Tbl_21

Le fichier que je propose est une synthèse

C'est pour cela que je part sur

For i = 3 To Sheets.Count

Désolé si je t'ai fait passer du tps suite à mes explications peu claires.

Tbl = Left(Sheets(i).Name, 5)

Peux tu m'expliquer ce bout de ton code stp

Merci

Bonne fin de journée à tous

Bonjour,

Par contre ne fait pas la différence avec Tbl_11. Tbl_21, parce qu'on dépasse un certain nombre de feuilles, d'où ma dernière question dans mon dernier post.

Voici la modification:

- Dans le module de la feuille "DATA"

Private Sub Worksheet_Activate()
    Dim i As Integer
    FRM_Gestion.Hide

    Application.ScreenUpdating = False
    With Sheets("DATA")
        .Range("D9:D60").ClearContents
        .Range("E9:E60").ClearContents
        .Range("F9:F60").ClearContents
        .Range("G9:G60").ClearContents
    End With

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then
            PosTiret = InStr(1, Sheets(i).Name, "-", 1)
            Tbl = Left(Sheets(i).Name, PosTiret - 1)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
                .Range("e" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"
                .Range("f" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")"
                .Range("g" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""N"")"
            End With
        End If
    Next i
End Sub

- Dans le module de l'userform 2:

'PROCEDURE METTRE "PE" DANS COLONNE D A PARTIR DE LA LIGNE 3 SI CELLULE B N'EST PAS VIDE sur toutes les feuilles

Private Sub CommandButton3_Click()
    Dim plage As Range
    Dim i%, Y%
    For i = 1 To Worksheets.Count
    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then
            PosTiret = InStr(1, Sheets(i).Name, "-", 1)
            Tbl = Left(Sheets(i).Name, PosTiret - 1)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
                .Range("e" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"
                '.Range("f" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")"
                '.Range("g" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""N"")"
            End With
        End If
    Next i
    Next i
    MsgBox "Toutes les feuilles sont mises à jour", vbInformation 'Dim derlig As Long
    Unload UserForm2
End Sub

Cdlt

Bonjour le forum

Bonjour Arturo83

Merci pour tes 2 codes, j'ai vérifié et cela fonctionne bien .

Comment faire pour que les lignes ci dessous:

J'ai volontairement supprimé la ligne concernant "PE" car elle est dans Userform2

.Range("f" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")"
.Range("g" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""N"")"

Ce qui me pose problème, c'est que après "INIT DOSSIER" , quand je viens remplacer "PE" par "O" ou "N" dans les onglets Tbl .
Dans "DATA", j'ai automatiquement la correction "E9" de "PE".
Je perd donc ma valeur initiale des "PE" que j'ai par "INIT DOSSIER "

Y a t-il une méthode pour dire que je ne veux que la valeur dans

.Range("f" & 9 + i - 3) et .Range("g" & 9 + i - 3)

Je pense qu'en appliquant cette méthode aussi dans Userform2, cela devrais résoudre mon problème.

Merci de ton aide

Bonne journée à tous

Bonsoir,

Y a t-il une méthode pour dire que veux que la valeur dans

.Range("f" & 9 + i - 3) et .Range("g" & 9 + i - 3)

Pas sûr d'avoir bien compris, d'après ce que vous avez écrit, il suffit de mettre une apostrophe devant chaque ligne pour quelles soient ignorées.

Cdlt

Bonjour le forum

Je ne trouve pas la solution sur cette erreur

Erreur d’exécution La méthode 'Range de l'objet _Worksheet a échoué

.Range("AB" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")" 'Compte le nbre de "O" a partir de "D3" de chaque onglet

Cette ligne de code appartient à cette procédure

Cette procédure fonctionne très bien quand je sollicite la feuille "DATA"

'PROCEDURE NB.SI SUR TOUS LES ONGLETS POUR COMPTER LE Nbre "O" et "N" depuis "D3" de chaque onglet

Private Sub Worksheet_Activate()
    Dim i As Integer
    FRM_Gestion.Hide

    Application.ScreenUpdating = False ' Désactivation actualisation écran
    With Sheets("DATA")
        .Range("F9:F60").ClearContents  ' Nettoyage plage ""O" Conforme"
        .Range("G9:G60").ClearContents  ' Nettoyage plage ""N" Non Conforme"
    End With

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then
            PosTiret = InStr(1, Sheets(i).Name, "-", 1)
            Tbl = Left(Sheets(i).Name, PosTiret - 1)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                 .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet

                .Range("AB" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""O"")" 'Compte le nbre de "O" a partir de "D3" de chaque onglet
                .Range("AB" & 9 + i - 3).Copy       'Copie la plage
                .Range("F" & 9 + i - 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False  'Collage de la plage dans le tableau sans la formule NB.SI

                .Range("AC" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""N"")" 'Compte le nbre de "N" a partir de "D3" de chaque onglet
                .Range("AC" & 9 + i - 3).Copy  'Copie la plage
                .Range("G" & 9 + i - 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False  'Collage de la plage dans le tableau sans la formule NB.SI

            End With
        End If
    Next i
             With Sheets("DATA")
                .Range("AB9:AB60").ClearContents  'Nettoyage de la plage après collage spécial
                .Range("AC9:AC60").ClearContents  'Nettoyage de la plage après collage spécial

            End With

    Application.CutCopyMode = False   'Nettoyage du presse papier
    Application.ScreenUpdating = True ' Activation actualisation écran

End Sub

Cette erreur apparait uniquement quand :

Private Sub CommandButton3_Click()

Cette procédure est lancé depuis l'userform "Gestion" par le Bp "INIT DOSSIER"

'PROCEDURE METTRE "PE" DANS COLONNE D A PARTIR DE LA LIGNE 3 SI CELLULE B N'EST PAS VIDE sur toutes les feuilles

Private Sub CommandButton3_Click()
 Dim plage As Range
Dim i%, Y%

Application.ScreenUpdating = True

 With Sheets("DATA")
       .Range("E9:E60").ClearContents
 End With

    For i = 3 To Worksheets.Count
         With Worksheets(i)
             For Y = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
                If Not IsEmpty(.Cells(Y, 3)) Then
                    .Range(.Cells(Y, 4), .Cells(Y, 10)).ClearContents   'Raz des informations précédentes
                    .Cells(Y, 4) = "PE"                                     'Ecriture pas essayer "PE"
                    .Columns("G:I").EntireColumn.Hidden = True             ' Choix des colonnes a masquer
                End If
             Next Y
        End With
    Next i

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then
            PosTiret = InStr(1, Sheets(i).Name, "-", 1)
            Tbl = Left(Sheets(i).Name, PosTiret - 1)
        With Sheets("DATA")    'Choix de la l'onglet "DATA"
            .Range("AA" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"  'Compte le nbre de "O" a partir de "D3" de chaque onglet suite "INIT DOSSIER"
            .Range("AA" & 9 + i - 3).Copy
            .Range("E" & 9 + i - 3).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False  'Collage de la plage dans le tableau sans la formule NB.SI
            .Range("AA9:AA60").ClearContents  'Nettoyage de la plage après collage spécial
        End With
        End If
    Next i

     Application.CutCopyMode = False   'Nettoyage du presse papier

        MsgBox "Toutes les feuilles sont mises à jour", vbInformation
Unload UserForm2
 Application.ScreenUpdating = True

 End Sub

Je vous joint mon fichier

Merci de votre aide

Bonsoir,

Cette forme d'écriture devrait mieux aller:

.Range("AB" & 9 + i - 3) = "=COUNTIF(Tbl[CONFORME O / N / PE],""O"")"

Cdlt

Bonsoir le forum

Bonsoir Arturo83 déja merci de ta réponse, mais désolé cela ne fonctionne pas.

Le message d'erreur n'apparait uniquement quand je lance la procédure "INIT DOSSIER"

En fait j'ai l’impression que la Feuille "DATA" s'active à ce moment là.

Une idée

Merci de

Bonjour,

Ceci va t-il mieux?

Cdlt

Bonsoir le Forum

Bonsoir Arthuro83

Oui merci la modification fonctionne.

J'ai presque compris ton nouveau code, mais si tu peux me mettre les commentaires stp , ce serait un plus

Merci

Sinon je le ferai et tu me corrigeras

Serait -il possible sur "INIT DOSSIER" :

La colonne des "PE" est enregistrée dans ( feuil "DATA" Cellule I9 jusqu’à la dernière ligne non vide et en B5 la somme de cette colonne sera faite) est ne sera modifier uniquement que par l'action "INIT DOSSIER"

Pour info j'ai mis les cellules en jaune pour te guider.

En fait je cherche a avoir une "mémoire"

Merci

Bonne soirée à tous

Bonjour,

Si j'ai bien compris, le remplissage de la colonne "I" (Nbre PE) ne doit se faire que par "INIT DOSSIER" et non lors de la sélection de la feuille "DATA".

Cdlt

bonjour le forum

Bonjour Arthuro83

Oui c’est bien cela

Merci

Bonne journée à tous

Bonjour le forum

Bonjour Arthuro83

Désolé pour la réponse tardive par manque de tps.

Merci pour ta réponse qui me fais encore avancer.

Je pense clôturer ce post bientôt, encore quelques vérifications .

Ton aide m'a permis de progresser

Bonne journée à tous

Bonjour le forum

Bonjour Arturo83

Retour après essais:

La partie liste des onglets "O" ; "N" et "PE" sans NB.SI -> ok , je l'ai appelé tableau dynamique

La partie sur btn "INIT DOSSIER" là soucis.

Je m'explique :

Ce code:

'PROCEDURE METTRE "PE" DANS COLONNE D A PARTIR DE LA LIGNE 3 SI CELLULE B N'EST PAS VIDE sur toutes les feuilles

Private Sub Btn_InitDossier_Click()
    Dim plage As Range
    Dim i%, Y%
    Dim DerLig As Long
    Dim Data As Long

        Application.ScreenUpdating = False  'Désactive l'actualisation de l'écran
        Unload UserForm2         'fermeture userform

    For i = 3 To Worksheets.Count
         With Worksheets(i)
             For Y = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
                If Not IsEmpty(.Cells(Y, 3)) Then
                    .Range(.Cells(Y, 4), .Cells(Y, 10)).ClearContents   'Raz des informations précédentes
                    .Cells(Y, 4) = "PE"                                     'Ecriture pas essayer "PE"
                    .Columns("G:I").EntireColumn.Hidden = True             ' Choix des colonnes a masquer pour saisir les informations: Columns("G:I") étant la phase corrective sur "N"
                End If
             Next Y
        End With
    Next i

     DerLig_Data = Range("D" & Rows.Count).End(xlUp).Row
     If DerLig_Data > 8 Then Range("D9:E" & DerLig_Data).ClearContents

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then    'toutes les feuilles sauf "DATA" et "ADMINISTRATEUR"
            PosTiret = InStr(1, Sheets(i).Name, "-", 1) 'relevé de l'emplacement du tiret dans le nom de l'onglet
            Tbl = Left(Sheets(i).Name, PosTiret - 1)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
                .Range("E" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")"
            End With
        End If
    Next i

    DerLig_Data = Range("D" & Rows.Count).End(xlUp).Row
    If DerLig_Data > 8 Then Range("D9:E" & DerLig_Data).Value = Range("D9:E" & DerLig_Data).Value

    MsgBox "Toutes les feuilles sont mises à jour", vbInformation

    Application.ScreenUpdating = True   'Résactive l'actualisation de l'écran

End Sub

mais cette partie

DerLig_Data = Range("D" & Rows.Count).End(xlUp).Row
    If DerLig_Data > 8 Then Range("D9:E" & DerLig_Data).Value = Range("D9:E" & DerLig_Data).Value
    

n'est pas exécuté.

Sauf si je me positionne sur la feuille "DATA" et que lance la procédure depuis l'éditeur.

Donc j'ai modifié ton code par celui-ci

PROCEDURE METTRE "PE" DANS COLONNE D A PARTIR DE LA LIGNE 3 SI CELLULE B N'EST PAS VIDE sur toutes les feuilles

Private Sub Btn_InitDossier_Click()
    Dim plage As Range
    Dim i%, Y%
    Dim DerLig As Long
    Dim Data1 As Long

        Application.ScreenUpdating = False  'Désactive l'actualisation de l'écran
        Unload UserForm2         'fermeture userform

    For i = 3 To Worksheets.Count
         With Worksheets(i)
             For Y = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
                If Not IsEmpty(.Cells(Y, 3)) Then
                    .Range(.Cells(Y, 4), .Cells(Y, 10)).ClearContents   'Raz des informations précédentes
                    .Cells(Y, 4) = "PE"                                     'Ecriture pas essayer "PE"
                    .Columns("G:I").EntireColumn.Hidden = True             ' Choix des colonnes a masquer pour saisir les informations: Columns("G:I") étant la phase corrective sur "N"
                End If
             Next Y
        End With
    Next i

     DerLig_Data1 = Range("D" & Rows.Count).End(xlUp).Row
     If DerLig_Data1 > 8 Then Range("D9:E" & DerLig_Data).ClearContents

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> "DATA" And Sheets(i).Name <> "ADMINISTRATEUR" Then    'toutes les feuilles sauf "DATA" et "ADMINISTRATEUR"
            PosTiret = InStr(1, Sheets(i).Name, "-", 1) 'relevé de l'emplacement du tiret dans le nom de l'onglet
            Tbl = Left(Sheets(i).Name, PosTiret - 1)
            With Sheets("DATA")    'Choix de la l'onglet "DATA"
                .Cells(9 + i - 3, "D") = Sheets(i).Name 'Nom de l'onglet
                .Range("w" & 9 + i - 3) = "=COUNTIF(" & Tbl & "[CONFORME O / N / PE],""PE"")" 'Compte le Nbre de "PE" dans chaque chaque Tbl par onglet

            End With
        End If

    Next i

     With Sheets("DATA")    'Choix de la l'onglet "DATA"
        .Range("w" & 9 + i - 3).Copy 'Copie le résultat
        .Range("E" & 9 + i - 3).PasteSpecial Paste:=xlPasteValues, operation:=xlNone, skipblanks:=False, Transpose:=False 'Colle le résultat en enlevant la formule
    End With

    Worksheets("DATA").Range("w9:w60").ClearContents   'Efface la zone de copy

    MsgBox "Toutes les feuilles sont mises à jour", vbInformation

    Application.CutCopyMode = False  'Raz presse papier

    Application.ScreenUpdating = True   'Résactive l'actualisation de l'écran

End Sub

Je vous met les 2 fichiers

2021-11-14 V1 Cahier essais trav DATA ta version

2021-11-17 V2 Ledzep trav DATA ma version

En espérant que je me suis bien expliqué

Bonne journée à tous

Bonjour,

Je vois une erreur dans votre code, à cette ligne

    If DerLig_Data1 > 8 Then Range("D9:E" & DerLig_Data).ClearContents

"DerLig_Data" n'existe pas, c'est "DerLig_Data1" il manque le 1


Cdlt

Bonjour le forum

Bonjour Arthuro83

J'ai modifié suite à ta remarque sur le fichier que j'ai adapté 2021-11-17 V2 Ledzep trav DATA

Celui qui ne veux pas exécuter la ligne de code que tu m'avais donnée

DerLig_Data = Range("D" & Rows.Count).End(xlUp).Row
    If DerLig_Data > 8 Then Range("D9:E" & DerLig_Data).Value = Range("D9:E" & DerLig_Data).Value

Fait partie du fichier joint .

Le code est dans Userform2.

ce code se lance depuis l'onglet "ADMINISTRATEUR" par Btn "INIT DOSSIER"

Et quand tu vas chercher l'onglet "DATA" , la formule reste en colonne "E9"

C'est là que je comprends pas pourquoi que ton code ci dessus ne s’exécute pas

J'espère que tu vas comprendre mon explication

Merci de ton aide

Bonne journée à tous

Rechercher des sujets similaires à "exporter resultats calcul"