Macro excel

Résolu
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

Résumé de la discussion

Plusieurs solutions VBA permettent de créer un fichier texte depuis Excel, d’y écrire des données et de le rouvrir ensuite pour les lire, afin de transférer des valeurs entre feuilles. La réponse recommandée présente une macro qui enregistre les noms ou données d’une plage dans un fichier texte proche du classeur, puis lit ce fichier pour réinscrire les valeurs en colonne. Elle utilise Open Fich For Output, Print Fich et For Input pour écrire puis lire les données, avec ThisWorkbook.Path pour situer le fichier et récupérer les valeurs dans Excel. D'autres variantes proposent des noms de fichier dynamiques et l'export de plusieurs colonnes, puis la concaténation lors de la lecture pour faciliter l'intégration.

Bobot (l’IA à votre service)
  1. Contributeur
    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+
    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
      1. Contributeur
        Si, tu peu utiliser le code à l'intérieur d'autre macro, c'était juste pour la démo.
        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
          1. Contributeur
            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+
          2. @lermite222bonjour 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
          3. Contributeur
            @tototiOui, 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...
          4. @lermite222miracle !!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...
          5. @lermite222bonjour. 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
        2. 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
          1. Contributeur
            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+
            1. merci à toi
              bonne soirée
          2. Contributeur
            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+
            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+
              1. Contributeur
                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+
                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 +