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. 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 +
    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. 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
          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. 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. 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. 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. Contributeur
              Si, tu peu utiliser le code à l'intérieur d'autre macro, c'était juste pour la démo.
              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
                  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+