Rechercher : dans
Par :

Macro excel

Dernière réponse le 8 fév 2009 à 15:56:55 tototi, le 19 jan 2009 à 18:09:26 
 Signaler ce message aux modérateurs

Bonjour, qui peut me dire quelle est l'instruction, dans une macro excel, pour creer un fichier et y entrer des donnees, et le reouvrir pour lire ces donnees
merci d'une reponse

Configuration: Windows Vista
Internet Explorer 7.0

1

lermite222, le 19 jan 2009 à 18:25:11

Bonjour,

Sub EcrireFichier()
    F = FreeFile
    MaVar = "Je veux écrire dans un fichier texte."
    Open "Essais" For Output As #F
    Print #F, MaVar
    Close #F
End Sub

Sub LireFichier()
    F = FreeFile
    Open "Essais" For Input As #F
    Input #F, MaVar
    Close #F
    'Le texte est dans MaVar
End Sub



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)

Répondre à lermite222

2

tototi, le 19 jan 2009 à 19:08:12

Merci pour la reponse. si je comprends bien je dois creer une macro, et non pas demander la creation du fichier a l'interieur d'une macro. je vais essayer ca. j'essaye de reutiliser des prog. que j'avais fait en qbasic, c'est vieux, un truc pour gestion scolaire
ton histoire de cruche qui sonne creux me plait bien
merci

Répondre à tototi

3

lermite222, le 19 jan 2009 à 19:23:45

Si, tu peu utiliser le code à l'intérieur d'autre macro, c'était juste pour la démo. L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

4

tototi, le 19 jan 2009 à 19:59:58

Bon et bien je suis a cote. c'est un prog qui enregistre les classes crees, le nombre de ses eleves, les notes obtenues dans les differentes matieres, enfin ce genre de truc
j'ai pu rmettre a jour ls saisies "classses-eleves-matieres, etc..", mais je n'arrive pas a creer les fichiers nominatifs de ces classes afin d'attribuer a chacun...
alors voila la macro qui me cionce. si tu as un peu de temps peux tu voir pourquoi ca accroche. le passage de la souris atteste bien qu "mynom" a ete pris en compte, mais pas d'affichage

Sub fichier_enrg_noms()
Stop
Range("h38").Select
mynombre = Selection.Value
Selection.Value = mynombre
b = mynombre
Range("h41").Select
retour:
Mynom = Selection.Value ' lit le nom
Selection.Value = Mynom
Open "fichiernoms" For Output As #1
Print #1, Mynom
Close #1
Range("g44").Select
Selection.Offset(ligvar, colvar).Select
Open "fichiernoms" For Input As #1
Input #1, Mynom
Debug.Print , Mynom
Close #1
Range("h39").Select
ActiveCell.FormulaR1C1 = " "
b = b - 1
If b = 0 Then
ActiveCell.FormulaR1C1 = " fin "
Range("h34").Select
ActiveCell.FormulaR1C1 = " "
Range("h36").Select
ActiveCell.FormulaR1C1 = " "
Range("j37").Select
ActiveCell.FormulaR1C1 = " "
Range("e39").Select
ActiveCell.FormulaR1C1 = " "
Exit Sub
End If
GoTo retour
End Sub

merci de ton aide

Répondre à tototi

8

lermite222, le 20 jan 2009 à 07:47:41

Je n'ai pas toutes les données pour ajuster mais tu a déjà une idée avec cette macro.
'Mettre 10 noms (ou plus) à partir de G44 jusque G54 ou plus
'laisser une cellule vide après le dernier nom

Sub fichier_enrg_noms()
Dim Fich As Integer, FichierNoms As String
Dim Lig As Long, L
    
    'ouvre le fichier pour écrire tout les noms dedans
    FichierNoms = ThisWorkbook.Path & "\FichierDesNoms.txt"
    Fich = FreeFile 'Un N° de fichier libre
    Open FichierNoms For Output As #Fich
    With Sheets("Feuil1") 'adapter le nom de la feuille
        Lig = 44
        While Cells(Lig, 7) <> ""
            Print #Fich, Cells(Lig, 7)
            Lig = Lig + 1
        Wend
        Close #Fich
        'Ici tout les noms sont dans le fichier
    
        'Ont les reprend et les écrit dans la colonne J
        Lig = 44
        Open FichierNoms For Input As #Fich
        While Not EOF(Fich)
            Input #Fich, L
            Cells(Lig, 10) = L
            Lig = Lig + 1
        Wend
        Close #Fich
        Range("h39") = " fin "
        'Ont vide toutes tes cellules.
        Range("h34,h36,j37,e39").ClearContents
    End With
End Sub

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)

Répondre à lermite222

9

tototi, le 20 jan 2009 à 10:04:40

Bonjour lermite222, c'est encore moi, merci de ta reponse mais ca cionce encore au niveau de :
Fich = FreeFile 'Un N° de fichier libre
Open FichierNoms For Output As #Fich
j'ai fait "Fich=FreeFile(1)", essaye FileNumber a la place de fich (mot cle donne par excel), et essaye encore d'autres formulation, je bute toujours sur l'ouverture du fichier. (erreur chemin d'acces (75))
je sais que j'abuse, mais aurais tu encore un peu de temps, je voudrais bien comprendre car ce probleme va se representer par la suite
merci

Répondre à tototi

10

lermite222, le 20 jan 2009 à 10:15:03

Oui, tu à certainbement essayé sur Classeur1 qui n'est pas sauvé.
Tu sauve le classeur dans un répertoir ensuite ça devrais aller.
Et tu ne doit rien changer dans la macros, je l'ai testée avant de te la passer et toiut est clean.
Tu dit... L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

11

tototi, le 20 jan 2009 à 10:42:21

Miracle !!ca marche ! ca resonnera moins si je cogne un pot. un petit probleme avec la selection de la feuille, poutant bien sur feuil1, ca ne lui a pas plu. pas tres grave, je devrais y arriver
un grand merci a toi, voila une semaine qu je cherchais cette solution.

si a mon tour je peux t'aider...

Répondre à tototi

12

tototi, le 24 jan 2009 à 09:23:31

Bonjour. autre question, si possible
comment forcer mon fichier a prendre pour nom (Open FichierNoms For Output As #Fich) un intitule cree lors de la saisie qui se presente sous forme de chaine (truc 1a), et qui de plus soit reconnu par les differentes macros. cet intitule (on peut supprimer l'espace) est appele a changer (machin 2b) mais qu'apres le passage par toutes les macros, lors d'une nouvelle saisie. en basic j'avais fait une variable (machin$) que je n'arrive pas a creer sous excel
merci d'une reponse

Répondre à tototi

13

lermite222, le 24 jan 2009 à 13:32:07

Bonjour
Dans un module général (Module1 par ex.) tu met

    Pubilc NomFic As String

Tu peu l'initialiser n'importe où dans l'appli (c'est une variable texte)

Sub fichier_enrg_noms()
Dim Fich As Integer   , FichierNoms As String
Dim Lig As Long, L
    
    'ouvre le fichier pour écrire tout les noms dedans
    'Il ne faut pas que l'extention soit déjà mise
    FichierNoms = ThisWorkbook.Path & "\" & NomFic & ".txt" 
    ......
    ......


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)

Répondre à lermite222

14

tototi, le 26 jan 2009 à 09:12:20

Bonjour. ca progresse, je crois en voir le bout
J’incorpore sur mon module d’entree la declaration de variable
Sub debut2
Pubilc NomFic As String
Je remplace l’instruction d’ouverture de fichier par
Sub fichier_enrg_noms()
Dim Fich As Integer , FichierNoms As String
Dim Lig As Long, L
FichierNoms = ThisWorkbook.Path & "\" & NomFic & ".txt"
et la suite
Si je lance mon module d’entree la declaration de variable est refuse (erreur de syntaxe)
J’ai essayer plusieurs trucs, private, public conts, etc, ca marche pas
Si j’annule cette declaration mon programme se poursuit et cree un fichier \.txt (sans le nom qui devrait etre ma variable)
Ce fichier s’ouvre dans excel, je le complete par des valeurs numeriques dans les lignes
Je veux enregistrer ce fichier sous un autre nom (variable)
Quelle est l’instruction pour enregistrer la ligne complete, excel refuse line input, sans avoir a taper toutes les cellules
Ca va etre pareil pour write ou append, connais tu les equivalents
question subsidiaire, vb6 vaut il l'effort ou un autre langage
merci encore une fois pour ton aide

Répondre à tototi

15

lermite222, le 26 jan 2009 à 10:09:56

Tu a mis quelque chose dans NomFic ?
NomFic = "LeNomDuFichierIci"
Si oui, c'est que tu n'a pas mis la déclaration au bon endroit.
Si VBA (excel) dans un module général (Module1)
Si VB6 (parceque tu me parle de VB6 ?) aussi sur un module général. 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)

Répondre à lermite222

16

tototi, le 26 jan 2009 à 10:40:41

Oui, public FichierNoms as string, dans le module de depart
reponse de excel : (attribut incorrect dans une procedure sub ou fonction)

dans l'aide je trouve

(Certains attributs sont incorrects dans des procédures. Cause et solution de cette erreur :

Un attribut Public ou Private apparaît au sein d'une définition de procédure.
Supprimez l'attribut de la procédure. Pour élargir la portée de la variable, déplacez la déclaration jusqu'au niveau module. Les variables déclarées au sein des procédures sont toujours Private.)

mystere

Répondre à tototi

17

lermite222, le 26 jan 2009 à 14:47:41

Tu n'y est pas du tout....
Je ne sais plus comment je doit expliquer....!!!!!!
Revoir le poste 13
Et quand ont te pose une question la moindre des chose c'est d'y répondre.
VB6 ou VBA ???????
Vu que tu parlais d'excel je vais considérer que tu est en VBA
Quand tu est dans l'éditeur de macro...
>> Insertion >> Module >> et c'est dans cette nouvelle fenêtre que tu doit écrire
Public NomFic as string
et rien d'autre.
.
ensuite tu modifie le début de la macro pour que ce soit comme ci-dessous

Sub fichier_enrg_noms()
Dim Fich As Integer   , FichierNoms As String
Dim Lig As Long, L
    NomFic = InputBox("Entrer le nom du fichier"
    'ouvre le fichier pour écrire tout les noms dedans
    'Il ne faut pas que l'extention soit déjà mise
    FichierNoms = ThisWorkbook.Path & "\" & NomFic & ".txt" 
    ......
    ......

Autre alternative
Dans Excel en Z1 tu tape le nom que tu veux donner à ton fichier
par exemple Annee2009 ou encore Machin ou Truc
et tu adapte le début de la macro comme ci-dessous.
Sub fichier_enrg_noms()
Dim Fich As Integer   , FichierNoms As String
Dim Lig As Long, L
    NomFic = ActiveSheet.range("Z1")
    'ouvre le fichier pour écrire tout les noms dedans
    'Il ne faut pas que l'extention soit déjà mise
    FichierNoms = ThisWorkbook.Path & "\" & NomFic & ".txt" 
    ......
    ......

En tout cas, t'est dur à la détente :-)
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)

Répondre à lermite222

18

tototi, le 26 jan 2009 à 16:09:04

Je vais entrer tes dernieres instructions, instructions excel
excel, vba ?, le probleme est bien la. je suis sur excel et j'ai monte visual basic 2008 express sur une autre machine, et les macros qui fonctionnent sur excel coince la dessus, justement au niveau des enregistrements
ma question etait quel est le plus facile entre vba et autre langage
merci pour ton aide, je vais pas t'enerve plus, et te dirais si ca marche
merci encore

a+

Répondre à tototi

20

lermite222, le 26 jan 2009 à 17:33:30

Je suis pas enervé du tout mais je voulais un peu te secouer les puces :-))
Rien de ce dont ont discute ne va aller sur VB2008.Net et c'est tout a fait autre chose.
Il y a VB6 qui est identique au VBA d'excel mais il n'est plus commercialisé et vaux mieux apprendre le 2008
A+ L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

21

tototi, le 26 jan 2009 à 18:17:00

Content que tu ne soit pas enerve. ton instruction excel fonctionne, je me suiis arrange pour retrouver "z1" a chaque macro. peut etre pas tres orthodoxe mais ca marche. meme en xls a la place de txt. je vais essayer de passr ca en "variable constante" et voir pour enregistrer et reafficher en "line input".
ca va bien te laisser respirer quelques jours :-))
a+

Répondre à tototi

22

tototi, le 29 jan 2009 à 09:33:24

Bonjour. juste pour info, mais si tu as la solution...
je suis sur une machine avec vista premiun, l'autre sur xp pro mediacenter, le meme excel sur les deux
j'ai une macro avec l'instruction
With Sheets("archive")
.Activate
LigDispo = .Range(Cells(65536, 1), Cells(65536, 1)).End(x1Up).Row + 1
.Range(Cells(LigDispo, 1), Cells(LigDispo, 1)).Select
End With
la machine en xp l'accepte, pas vista. sur ce vista j'ai ce meme excel sur un virtuel, et c'est pas accepte non plus
j'ai contourne ce truc mais je me demande si ce programme, si j'arrive au bout, fait sur vista sera lisible sur xp
a+

Répondre à tototi

5

lp1904, le 19 jan 2009 à 20:08:42

Bonjour,
j'ai créer un userform avec liste déroulante qui s'ouvre lorsque une cellule A1 est selectionée.
Dans une macro, j'ai besoin à un moment de selectionner cette cellule A1 pour la copier vers une autre et aussi pour effacer son contenu... mais voilà, mon userform s'ouvre dés que ma macro se positionne sur cette cellule A1!!!
en fait, je voudrais qu'à ce moment précis dans ma macro, le selection de cette cellule A1 ne lance pas mon userform mais l'ignore !!
merci de votre aide

Répondre à lp1904

6

lermite222, le 19 jan 2009 à 20:25:38

Tu colle le code ci-dessous dans le module de ta feuille

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        If Target <> "" Then
            'Userform1.show
        End If
    End If
End Sub

Quand il y aura du texte dans A1 l'UF sera ouvert sinon non.
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)

Répondre à lermite222

7

lp1904, le 19 jan 2009 à 21:14:53

Merci à toi
bonne soirée

Répondre à lp1904

19

mika, le 26 jan 2009 à 16:26:26

Bonjour escuse moi je sais plus comment on met sur resolu lol !!

Répondre à mika

23

lermite222, le 29 jan 2009 à 10:41:34

Je reprend sur une nouvelle fenêtre parce que les réponse commence à être trop petites et il me manque la moitié des mots.

1°) LigDispo = .Range(Cells(65536, 1), Cells(65536, 1)).End(x1Up).Row + 1
pas besoin de 2 x Cells tu remplace par

LigDispo = .Range("A65536")).End(x1Up).Row + 1 
ou
LigDispo = .Cells(65536,1)).End(x1Up).Row + 1

2°) concernant ta question, j'ignore pourquoi mais il arrive qu'avec With excel refuse certaine fonction que ce soit sur XP ou vista.
Quand j'ai ça, je ne me casse pas la tête, j'emploi l'une de ces 2 solutions.
Si tu n'a que la ligne où tu initialise LigDispo le with vaut pas la peine, je fait
    LigDispo = Sheets("archive").Range("A65536")).End(x1Up).Row + 1 


Si plusieur lignes y fait appel
Dim FL1 as WorkSheet
    Set FL1 = Sheets("archive") 
    LigDispo = FL1.Range("A65536")).End(x1Up).Row + 1

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)

Répondre à lermite222

24

tototi, le 3 fév 2009 à 10:32:16

Bonjour. et bien avec ton aide je suis arrive au bout de mon bidule. reste tout de meme une question, si j'ai dans une
colonne x cellules (1, 12,ou autre) a renseigner, est il possible de faire apparaitre un bouton de commande apres la derniere saisie. pas evident a priori
encore une fois merci de ton aide
a+

Répondre à tototi

25

lermite222, le 5 fév 2009 à 09:25:38

Bonjour,
Pas de problème,
mettre un bouton sur la feuille avec sa propriété Visible = False
Dans l'événement SelectionChange de la feuille tester les cellules à remplir et si elles sont remplie mettre le bouton à Visible=true.
Si tu veux Créer le bouton par code Voir là
Une idée pour Le test des cellules
A+
L'expérience instruit plus sûrement que le conseil. (André G­ide)  
Si tu te cogne à un pot et que ça sonne creux, c'est pas for­cément le pot qui est vide. ;-)(Confucius)

Répondre à lermite222

26

 tototi, le 8 fév 2009 à 15:56:55

Bonjour
de retour devant l'ecran, j'ai suivi tes instructions, et ca marche. la cerise suir le gateau
grand merci pour ton aide
a +

Répondre à tototi