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
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