Print sur des cellules visibles

Hello,

Je viens de faire une macro pour écrire dans un fichier texte des données d'une feuille excel, en utilisant des PRINT.

Par contre, sur cette même feuille, je souhaite appliquer des filtres sur les colonnes avant l'écriture.

Le problème c'est que même si je filtre et après je lance la macro qui utilise les PRINT, la macro va écrire toutes les lignes, même celles qui sont filtrées.

C'est possible de n'écrire que celles qui restent?

Merci pour votre aide.

Vincent

Bonjour

Sans fichier

Ton code pourrait ressembler à celui-ci

Sub test()
  Range("A1:B100").AutoFilter field:=2, Criteria1:="toto"
  If Application.Subtotal(103, Columns("A")) > 1 Then
    Open "MonFichier" For Output As #1
    For Each cel In Range("A2:B100").SpecialCells(xlCellTypeVisible)
      Print #1, cel
    Next cel
    Close #1
  End If
End Sub

Oui mais ça implique de filtrer dans la macro ca non!

Bonjour

Tu joins ton fichier dans lequel tu indiques exactement ce que tu fais

Ah oui pardon!

Le voici en PJ.

Idéalement, j'aimerai par exemple dans l'onglet Feuil3, filtrer sur le nom pour garder uniquement Donnée 2 par exemple, et quand on exécute la macro, que cela écrive uniquement les deux lignes, sans l'entête, dans le fichier texte.

C'est assez clair ou tu veux que je précise un peu plus?

Juste au cas où, tu peux au lieu de mettre le fichier modifié en PJ, mettre la partie du code modifiée dans le message, je ne peux pas télécharger les PJ depuis l'ordi du boulot, c'est bloqué!

9brol.xlsm (19.73 Ko)

Bonjour

A vérifier

Voici le code

Sub fichier_VINCENT()
'
'Création du fichier
'

'---- Déclaration des variables
Dim chemin As String
Dim m As String
Dim resultat As String
Dim ecriture_ligne As String
Dim compteur_lignes As Byte
Dim Entete_Ligne_1 As String, Entete_Ligne_2 As String, Entete_Ligne_3 As String, Entete_Ligne_4 As String
Dim detail_nom As String
Dim detail_prix1 As String, detail_prix2 As String

Dim Enqueue_Ligne_1 As String, Enqueue_Ligne_2 As String
Dim NbLig As Integer
Dim i As Byte
Dim x As Integer
Dim Cel As Range

  Entete_Ligne_1 = "Entete ligne 1"
  Entete_Ligne_2 = "Entete ligne 2"
  Entete_Ligne_3 = "Entete ligne 3"
  Entete_Ligne_4 = "Entete ligne 4"

  Enqueue_Ligne_1 = "Enqueue ligne 1"
  Enqueue_Ligne_2 = "Enqueue ligne 2"

  NomFichier = Sheets("Général").Cells.Range("C4").Value

  '---- Vérification du champ nom du fichier
  If Trim(NomFichier) = "" Then
    Reponse2 = MsgBox("Le nom du fichier n'est pas renseigné.", vbOKOnly + vbCritical, "Nom du fichier non rensigné")
    GoTo Erreur
  End If

  '---- Génération du fichier texte
  chemin = ActiveWorkbook.Path
  m = chemin & "\" & Sheets.Item(1).Cells(4, 3).Value & ".txt"
  Open m For Output As #1

  '---- Ecriture de l'entête
  Print #1, Entete_Ligne_1
  Print #1, Entete_Ligne_2
  Print #1, Entete_Ligne_3
  Print #1, Entete_Ligne_4

  '---- Ecriture des lignes détails
  With Sheets(2)
    '---- Affichage du nombre de lignes
    NbLig = .Range("A1").CurrentRegion.Rows.Count
    MsgBox NbLig
    If Application.Subtotal(103, .Columns("A")) > 1 Then
      For Each Cel In .Range("A2:A" & NbLig).SpecialCells(xlCellTypeVisible)
        Print #1, Cel & " "; Cel.Offset(0, 1) & " "; Cel.Offset(0, 2)
      Next Cel
    End If
  End With
  '---- Eciture enqueue
  Print #1, Enqueue_Ligne_1
  Print #1, Enqueue_Ligne_2
  MsgBox ("Fichier " & NomFichier & " ecrit.")
Erreur:
  '---- Fermeture du fichier
  Close #1
End Sub

Ahhhh ça semble marcher! Merci beaucoup!

Par contre, j'ai du mal à comprendre vraiment comment marche le code!

Rechercher des sujets similaires à "print visibles"