Macro excel

Résolu
tototi Messages postés 63 Statut Membre -  
tototi Messages postés 63 Statut Membre -
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

11 réponses

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
  2. tototi Messages postés 63 Statut Membre 1
     
    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
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    Si, tu peu utiliser le code à l'intérieur d'autre macro, c'était juste pour la démo.
    0
  4. tototi Messages postés 63 Statut Membre 1
     
    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
    0
    1. lermite222 Messages postés 9042 Statut Contributeur 1 199
       
      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+
      0
    2. tototi Messages postés 63 Statut Membre 1 > lermite222 Messages postés 9042 Statut Contributeur
       
      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
      0
    3. lermite222 Messages postés 9042 Statut Contributeur 1 199 > tototi Messages postés 63 Statut Membre
       
      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...
      0
    4. tototi Messages postés 63 Statut Membre 1 > lermite222 Messages postés 9042 Statut Contributeur
       
      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...
      0
    5. tototi Messages postés 63 Statut Membre 1 > lermite222 Messages postés 9042 Statut Contributeur
       
      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
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lp1904
     
    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
    0
  7. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
    1. lp1904
       
      merci à toi
      bonne soirée
      0
  8. mika
     
    bonjour escuse moi je sais plus comment on met sur resolu lol !!
    0
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
  10. tototi Messages postés 63 Statut Membre 1
     
    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+
    0
  11. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
  12. tototi Messages postés 63 Statut Membre 1
     
    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 +
    0