VBA EXCEL 2007 problème de sélection de plage

Marine -  
 Marine -
Bonjour,

j'ai réalisé un classeur de 4 pages et je souhaite exporter vers un fichier texte une plage(A:D) de l'une des 4 feuilles (celle nommée "badugi") toutes les minutes en supprimant les lignes vides.
Le code ci-dessous fonctionne seulement si je me trouve sur la feuille en question.
Si cette feuille n'est pas active donc que je suis sur un autre onglet j'ai une erreur d'exécution 1004: La méthode Select de la classe Range a échoué.

Sub enregistre()
'
' enregistre Macro

DansUneMinute = TimeSerial(Hour(Time), Minute(Time), Second(Time) + 60)
Application.OnTime DansUneMinute, "enregistre"

' Active une plage de cellule sur la feuille "badugi" même si elle est non active
Worksheets("badugi").Range("A1:F" & Sheets("badugi").Range("F65536").End(xlUp).Row).Select

' Déclaration variables
Dim i, j, nl, nc As Integer
Dim text As String

' Ouverture fichier d'enregistrement
Open "C:\Users\Cédric\Desktop\Badugi\badugi.txt" For Output As #1
nc = Selection.Columns.Count
nl = Selection.Rows.Count

' Boucle sur la selection
For i = 1 To nl
text = ""
For j = 1 To nc
' ajout de la tabulation comme separateur
If text <> "" Then text = text & Chr(9)
text = text & ActiveWindow.RangeSelection.Next(i, j - 1)
Next j
' Ecriture de la ligne dans le fichier si non vide
If text <> "" Then Print #1, text
Next i

' Fermeture fichier
Close #1

ActiveWorkbook.Save

End Sub

Merci de m'aider à trouver pourquoi.

4 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    1°) mettre la sub dans un module.bas et pas dans le module de feuille
    2°) Probablement séparer la ligne (des fois sa plante)
          sheets("badugi").Select 
         Range("A1:F" & Sheets("badugi").Range("F65536").End(xlUp).Row).Select 

    3°) Tu sauve tes données toutes les minutes mais là où je ne vois pas l'intèret c'est que tu écrase systématiquement le fichier précédant ?
    4°) Si tu est occupé sur une autre feuille il y a une autre façon de procéder pour ne pas interompre le travail en cour (éviter la sélection de la feuille). Ta macro peu aussi planter si tu a une cellule d'une autre feuille en édition.
    A+
    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  2. Marine
     
    Merci lermite222,

    Comme je débute en VBA:

    1°) je ne sais pas comment mettre la sub dans module.bas

    2°) merci du conseil

    3°) J'importe des données à intervalle régulier dans une feuille de mon classeur, j'applique des fonctions sur ses données et je les récupère dans la feuille "badugi" avant de les exporter en fichier texte.

    4°) Ce dernier point m'intéresse car je souhaite visualiser les autres feuilles et que le programme s'exécute normalement.

    Comment faire pour mettre la sub dans un module.bas. Je suppose que ça à rapport avec module de classe, module général et autres mais je ne connais pas le fonctionnement. Quel est l'intérêt de procéder de telle sorte.
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Bonjour,
    Dans l'éditeur VBA, clic >> Insertion >> Module >>
    La nouvelle fenêtre c'est un module.bas.
    Dans ce module tu colle le code ci-dessous
    Option Explicit 
    
    Sub enregistre() 
    Dim DerLig As Long, R As Range, Cel As Range, Txt As String 
    Dim NumFich As Integer, NomFich As String 
    'Pour numéroter les fichiers. 
    Static Numero As Long 
    
        With Sheets("badugi") 
        DerLig = .Range("F65536").End(xlUp).Rows 
        Set R = .Range(.Cells(1, 1), .Cells(DerLig, 6)) 
        End With 
        For Each Cel In R 
            If Cel <> "" Then 
                Txt = Txt & Cel.Text & Chr(9) 
            End If 
        Next Cel 
        NumFich = FreeFile 
        Numero = Numero + 1 
        NomFich = "C:\Users\Cédric\Desktop\Badugi\badugi " & Numero & ".txt" 
         
        Open NomFich For Output As #NumFich 
        Print #NumFich, Txt 
        Close #NumFich 
        Application.OnTime Now + TimeValue("00:01:00"), "enregistre" 
    End Sub

    La sub numérote les fichiers pour avoir la possibilité de les retrouver par ordre chronologique.
    Si tu veux, il y a aussi moyens d'ajouter les données dans le même fichier, alors voir Append dans l'aide
    A+

    L'expérience instruit plus sûrement que le conseil. (André Gide)
    Si tu te cogne à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    0
  4. Marine
     
    Bonjour lermite222,

    Merci pour la réponse et la précision, j'avais bien créé un module.bas.
    J'ai testé le code que tu me proposes mais j'ai une erreur d'exécution 1004 sur la ligne set R = ...
    Le but de mon code est de mettre à jour le fichier badugi.txt toutes les minutes. J'importe auparavant ce fichier ainsi que d'autres chacun dans une feuille différente dont le nom commence par importXXX.
    Ensuite des formules analysent et traitent ces données puis les informations sont copiées sur la feuille badugi et elles sont alors exportées dans le fichier badugi.txt.
    c'est pour cette raison qu'il me faut écraser les données systématiquement.
    0