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

Fermé
Marine - 30 mai 2010 à 16:06
 Marine - 2 juin 2010 à 15:46
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.
A voir également:

4 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 30/05/2010 à 21:17
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
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 31/05/2010 à 13:00
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
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