Bouton de remplissage de tableau sur un autre fichier
Bonjour à tous
Je sollicite votre aide pour trouver une solution à mon problème. J'ai un fichier " Impr.Avancement CTP" qui comporte une extraction de notre base de donnée. Chaque semaine j'imprime ce tableau par "CTP" selon la sélection de liste déroulante que j'ai créé. Certaine personne aimerais l'avoir en version papier et d'autre en version excel.Je veux rajouter un bouton "Export Excel" en dessous de "Imprimer" qui copie le contenu du tableau entier "section => remarques" vers un autre fichier "Avancement Excel".
le contenu du tableau varie selon la selection de la liste déroulante déjà existante donc il n'a pas de taille fixe
A chaque fois que je vais appuier sur le bouton "Export Excel" le tableau devrais se vider avant de pouvoir afficher le nouveau résultat
Je vous joint le dossier qui comporte les deux fichier
Encore merci pour votre aide
Bonjouir,
Dans le fichier joint, sélectionnez vos critères en A1 et A2 puis cliquez sur le bouton "Préparation pour export excel" , cette action remplit la feuille et l'enregistre en tant que classeur en fonction des critères sélectionnés puis, vous devrez choisir l'emplacement et le nom que vous donnerez à ce classeur.
le code dans le module 1:
Sub Export_Excel()
Dim f1 As Worksheet, f3 As Worksheet
Dim DerLig_f1 As Long, DerLig_f3 As Long, NbLig As Long, i As Long
Dim Crit21 As String, Crit2 As String, Nom_Classeur As String
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set f1 = Sheets("BASE")
Set f3 = Sheets("Sheet1")
f3.Range("B3:O" & 10000).Clear
DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row
f1.Range("A1:N" & DerLig_f1).Copy f3.Range("B3")
'ne conserver que les CTP demandés
DerLig_f3 = DerLig_f1 + 3
Crit1 = f3.Range("A1").Value
Crit2 = f3.Range("A2").Value
For i = DerLig_f3 To 4 Step -1
If f3.Cells(i, "C") <> "" And f3.Cells(i, "D") <> Crit1 And f3.Cells(i, "D") <> Crit2 Then f3.Rows(i).Delete
Next i
'Suppression des colonnes "F2D, F2E,F3I"
f3.Columns("K:M").Delete
'Préparation^pour l'Export
ActiveSheet.Copy
Nom_Classeur = Application.GetSaveAsFilename 'sélectionnez le chemin et le nom à donner à cet enregistrement
If Nom_Classeur <> Faux Then
ActiveWorkbook.SaveAs Filename:=Nom_Classeur & ".xlsx" 'la feuille est enregistrée en tant que classeur prête à être expédiée
ActiveSheet.Shapes.Range(Array("Picture 1")).Delete
ActiveSheet.Shapes.Range(Array("ZoneTexte 1")).Delete
Columns("A:A").Delete Shift:=xlToLeft
End If
Set f1 = Nothing
Set f3 = Nothing
End SubCdlt
Merci énormément
C'est même mieux que j'imaginais.
C'est vraiment nickel.
Désolé j'ai parlé trop vite.
Un petit problème:
Quand je lance l'extraction excel, le fichier initial (dans ce cas:ksiksi1-bouton-de-remplissage-de-tableau-sur-un-autre-fichier) change et les formules /mise en forme condionnelle sont effacé et remplacer par le tableau que j'ai extré en format valeur
Ok, je n'avais pas fais attention aux MFC, voici le code corrigé:
Dim DerLig_f3 As Long
Sub Export_Excel()
Dim f1 As Worksheet, f3 As Worksheet
Dim Crit21 As String, Crit2 As String, Nom_Classeur As String
Dim DerLig_f1 As Long, NbLig As Long, i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set f1 = Sheets("BASE")
Set f3 = Sheets("Sheet1")
f3.Range("B3:O" & 10000).Clear
DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row
f1.Range("A1:N" & DerLig_f1).Copy f3.Range("B3")
'ne conserver que les CTP demandés
DerLig_f3 = DerLig_f1 + 3
Crit1 = f3.Range("A1").Value
Crit2 = f3.Range("A2").Value
For i = DerLig_f3 To 4 Step -1
If f3.Cells(i, "C") <> "" And f3.Cells(i, "D") <> Crit1 And f3.Cells(i, "D") <> Crit2 Then f3.Rows(i).Delete
Next i
'Suppression des colonnes "F2D, F2E,F3I"
f3.Columns("K:M").Delete
'Préparation^pour l'Export
ActiveSheet.Copy
Nom_Classeur = Application.GetSaveAsFilename 'sélectionnez le chemin et le nom à donner à cet enregistrement
If Nom_Classeur <> Faux Then
ActiveWorkbook.SaveAs Filename:=Nom_Classeur & ".xlsx" 'la feuille est enregistrée en tant que classeur prête à être expédiée
ActiveSheet.Shapes.Range(Array("Picture 1")).Delete
ActiveSheet.Shapes.Range(Array("ZoneTexte 1")).Delete
Columns("A:A").Delete Shift:=xlToLeft
FormatConditionnel
End If
Set f1 = Nothing
Set f3 = Nothing
End Sub
Sub FormatConditionnel()
Dim Plage_MFC As Excel.Range, FC1 As Excel.FormatCondition
On Error Resume Next
Range("I1").Select
Set Plage_MFC = Range("I4:I" & DerLig_f3)
Plage_MFC.FormatConditions.Delete
Set FC1 = Plage_MFC.FormatConditions.Add(Type:=xlExpression, Formula1:="=$I4=0,95")
FC1.Interior.Color = RGB(255, 192, 0)
FC1.Font.Color = RGB(192, 0, 0)
End SubCdlt
Bonjour
Le problème n'est pas sur le fichier exporté mais sur le fichier d'origine(source).(feuille Sheet1)
Une fois qu'on clique sur le bouton le tableau enlève les mise en forme ainsi que la formule "filtre" qui est sur la cellule B4.
Bonjour,
Dans ce cas il suffit de déplacer la ligne suivante pour appeler la macro du même nom:
FormatConditionnelet de prendre la colonne J au lieu de I dans cette macro même macro
Dim DerLig_f3 As Long
Sub Export_Excel()
Dim f1 As Worksheet, f3 As Worksheet
Dim Crit21 As String, Crit2 As String, Nom_Classeur As String
Dim DerLig_f1 As Long, NbLig As Long, i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set f1 = Sheets("BASE")
Set f3 = Sheets("Sheet1")
f3.Range("B3:O" & 10000).Clear
DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row
f1.Range("A1:N" & DerLig_f1).Copy f3.Range("B3")
'ne conserver que les CTP demandés
DerLig_f3 = DerLig_f1 + 3
Crit1 = f3.Range("A1").Value
Crit2 = f3.Range("A2").Value
For i = DerLig_f3 To 4 Step -1
If f3.Cells(i, "C") <> "" And f3.Cells(i, "D") <> Crit1 And f3.Cells(i, "D") <> Crit2 Then f3.Rows(i).Delete
Next i
'Suppression des colonnes "F2D, F2E,F3I"
f3.Columns("K:M").Delete
FormatConditionnel
'Préparation^pour l'Export
ActiveSheet.Copy
Nom_Classeur = Application.GetSaveAsFilename 'sélectionnez le chemin et le nom à donner à cet enregistrement
If Nom_Classeur <> Faux Then
ActiveWorkbook.SaveAs Filename:=Nom_Classeur & ".xlsx" 'la feuille est enregistrée en tant que classeur prête à être expédiée
ActiveSheet.Shapes.Range(Array("Picture 1")).Delete
ActiveSheet.Shapes.Range(Array("ZoneTexte 1")).Delete
Columns("A:A").Delete Shift:=xlToLeft
End If
Set f1 = Nothing
Set f3 = Nothing
End Sub
Sub FormatConditionnel()
Dim Plage_MFC As Excel.Range, FC1 As Excel.FormatCondition
On Error Resume Next
Range("I1").Select
Set Plage_MFC = Range("J4:K" & DerLig_f3)
Plage_MFC.FormatConditions.Delete
Set FC1 = Plage_MFC.FormatConditions.Add(Type:=xlExpression, Formula1:="=$J4=0,95")
FC1.Interior.Color = RGB(255, 192, 0)
FC1.Font.Color = RGB(192, 0, 0)
End SubCdlt
Le soucis viens peut être de "Then f3.Rows(i).Delete" dans le boucle.
Ceci efface le contenu du fichier initial ainsi que la formule au B4.
L'idée c'est vraiment de copier le contenu du tableau sheet1 dans le fichier source (selon la selection du CTP") et de coller les valeurs dans le nouveau fichier
Bonjour,
Je pense que vous n'avez pas bien compris. Après avoir cliquez sur le bouton "Préparation pour export excel", un nouveau classeur est crée ne contenant que la feuille filtrée, c'est ce classeur que vous avez sous les yeux, fermez-le et vous constaterez que le fichier original est bien présent et intact.
Cdlt
Bonjour
Je fait l'extraction et je ferme le nouveau fichier que j'ai généré mais sur le fichier initial je perd la formule du B4.
Est ce que vous pouvez m'envoyer votre fichier svp ? peut être que j'ai merder quelque part
Bonjour,
Le problème c'est que votre formule ne marche pas sur mon PC, la voici telle que je la vois dans la barre de formule:
=FILTRE(_xlfn._TRO_TRAILING(BASE!A2:I282);(_xlfn._TRO_TRAILING(BASE!C2:C282)=$A$1)+(_xlfn._TRO_TRAILING(BASE!C2:C282)=$A$2);"ERROR")si je la valide , toutes les données disparaissent, il faut la réécrire comme ceci en B4:
=FILTRE(BASE!A2:I282;(BASE!C2:C282=$A$1)+(BASE!C2:C282=$A$2);"ERROR")et là, ça marche.
Cdlt
Bonjour,
La formule que j'ai sur mon fichier est bel est bien "=FILTRE(BASE!A2:I282;(BASE!C2:C282=$A$1)+(BASE!C2:C282=$A$2);"ERROR")" et pourtant à chaque fois que je clique sur le bouton d'extraction ça enlève la formule du fichier initial.
OK, alors il suffit de mettre en remarque la ligne suivante, c'est à dire mettre une apostrophe en début de ligne:
'f3.Range("B3:O" & 10000).Clearle code en entier
Dim DerLig_f3 As Long
Sub Export_Excel()
Dim f1 As Worksheet, f3 As Worksheet
Dim Crit21 As String, Crit2 As String, Nom_Classeur As String
Dim DerLig_f1 As Long, NbLig As Long, i As Long
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set f1 = Sheets("BASE")
Set f3 = Sheets("Sheet1")
'f3.Range("B3:O" & 10000).Clear
DerLig_f1 = f1.Range("A" & Rows.Count).End(xlUp).Row
f1.Range("A1:N" & DerLig_f1).Copy f3.Range("B3")
'ne conserver que les CTP demandés
DerLig_f3 = DerLig_f1 + 3
Crit1 = f3.Range("A1").Value
Crit2 = f3.Range("A2").Value
For i = DerLig_f3 To 4 Step -1
If f3.Cells(i, "C") <> "" And f3.Cells(i, "D") <> Crit1 And f3.Cells(i, "D") <> Crit2 Then f3.Rows(i).Delete
Next i
'Suppression des colonnes "F2D, F2E,F3I"
f3.Columns("K:M").Delete
FormatConditionnel
'Préparation^pour l'Export
ActiveSheet.Copy
Nom_Classeur = Application.GetSaveAsFilename 'sélectionnez le chemin et le nom à donner à cet enregistrement
If Nom_Classeur <> Faux Then
ActiveWorkbook.SaveAs Filename:=Nom_Classeur & ".xlsx" 'la feuille est enregistrée en tant que classeur prête à être expédiée
ActiveSheet.Shapes.Range(Array("Picture 1")).Delete
ActiveSheet.Shapes.Range(Array("ZoneTexte 1")).Delete
Columns("A:A").Delete Shift:=xlToLeft
End If
Set f1 = Nothing
Set f3 = Nothing
End Sub
Sub FormatConditionnel()
Dim Plage_MFC As Excel.Range, FC1 As Excel.FormatCondition
On Error Resume Next
Range("I1").Select
Set Plage_MFC = Range("J4:K" & DerLig_f3)
Plage_MFC.FormatConditions.Delete
Set FC1 = Plage_MFC.FormatConditions.Add(Type:=xlExpression, Formula1:="=$J4=0,95")
FC1.Interior.Color = RGB(255, 192, 0)
FC1.Font.Color = RGB(192, 0, 0)
End SubCdlt
C'est toujours le même soucis.
La formule disparait :(
Question: A quoi vous sert la formule puisque le code fourni se charge de rapatrier les données de la feuille "Base" et ne conserve que celles répondant aux critères en A1 et An A2?
Edit: j'ai compris vous ne voulez pas forcément envoyer la feuille lorsque vous changez de critère donc, voici le nouveau fichier, la feuille "Sheets1" est recalculée dès que vous changez de critère.
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A2")) Is Nothing Then Selection_CTP
End Sub
Un message d'erreur avec Selection_CTP non définie
sinon l'extraction marche très bien.
Aussi quand je vais faire l'impression en version papier la zone d'impression se met uniquement sur l'entête (vu que la feuille est recalculée à chaque fois qu'on sélectionne un CTP).J'aurais aimer la figer sur la longeur du tableau mais vu que ce n'est pas possible je me suis dit imprimer d'office 3 page à chaque fois
Ok, j'avais oublié de tester l'export après la modification, voici le fichier corrigé:
Cdlt
Désolé je t'embêter avec ça mais je pense que c'était mieux avec la formule en B4 par ce que là la zone d'impression se décale à chaque fois et les MFC sur le fichier initial n'apparaissent plus .
L'idée était de créer un fichier à partir du fichier source en copiant uniquement les valeurs et la MFC(si possible) selon le choix du CTP.
Si c'est pas possible de faire de la sorte dit moi et je verrais pour faire autrement ou manuellement
Non, les formules ne changeront rien, il faut simplement recalculer la zone d'impression, voilà qui est fait dans le code du nouveau fichier.
parfait !!
Merci beaucoup