VBA Macro Excel
Résolu
Fillot_PC
Messages postés
18
Date d'inscription
Statut
Membre
Dernière intervention
-
F_PC -
F_PC -
Bonjour,
Je débute (depuis aujourd'hui) avec VBA sur excel... et ce n'est pas évident !
Voilà ce que j'aimerai faire :
J'importe un fichier texte dans excel (jusque là tout va bien).
Mes données sont des groupes d'informations :
[ ] = colonne
[A][B][C]
[Nom1]
[Spécificité1][Spécificité2][Spécificité3]
[données][ données][ données]
[données][ données][ données]
ligne vide
[Nom2]
[Spécificité1][Spécificité2][Spécificité3]
[données][ données][ données]
[données][ données][ données]
ligne vide
etc
Je voudrais que excel :
-cherche [nom1] (les noms sont toujours les mêmes mais pas forcément à la même place)
- qu'il sélectionne le groupe (tout ce qui suit jusqu'à la ligne vide suivante)
- qu'il colle la sélection dans la feuille suivante.
J'ai commencé un début de code, j'arrive à trouver [Nom1] et à le coller dans la feuille suivante mais je ne sais pas comment sélectionner et coller ce qui m'intéresse.
Merci d'avance !
Je débute (depuis aujourd'hui) avec VBA sur excel... et ce n'est pas évident !
Voilà ce que j'aimerai faire :
J'importe un fichier texte dans excel (jusque là tout va bien).
Mes données sont des groupes d'informations :
[ ] = colonne
[A][B][C]
[Nom1]
[Spécificité1][Spécificité2][Spécificité3]
[données][ données][ données]
[données][ données][ données]
ligne vide
[Nom2]
[Spécificité1][Spécificité2][Spécificité3]
[données][ données][ données]
[données][ données][ données]
ligne vide
etc
Je voudrais que excel :
-cherche [nom1] (les noms sont toujours les mêmes mais pas forcément à la même place)
- qu'il sélectionne le groupe (tout ce qui suit jusqu'à la ligne vide suivante)
- qu'il colle la sélection dans la feuille suivante.
J'ai commencé un début de code, j'arrive à trouver [Nom1] et à le coller dans la feuille suivante mais je ne sais pas comment sélectionner et coller ce qui m'intéresse.
Merci d'avance !
A voir également:
- VBA Macro Excel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
28 réponses
Bonjour,
Une petite piste..
Une petite piste..
Sub ColleSuite() Dim Lig As Long, Lig2 As Long Dim Cherch As Variant, Index As Integer Cherch = "Nom1" Index = ActiveSheet.Index + 1 For Lig = 1 To [A65536].End(xlUp).Row If Cells(Lig, 1) = Cherch Then Lig2 = Cells(Lig, 1).End(xlDown).Row Rows(Lig & ":" & Lig2).Copy Sheets(Index).Range("A" & Sheets(Index).[A65536].End(xlUp).Row + 2) Exit Sub End If Next Lig End SubA+
Et inutile de réécrire la macro pour chaque mot...
Mais vu que tu renomme les feuilles serait plus évident de mettre les noms des feuilles plutôt que leur index, si tu veux je remet le code modifier pour utiliser les noms.
Sub Conversion() Dim B As Boolean Workbooks.OpenText Filename:="C:\Users\Fabien\Desktop\Blabla.inp", Origin:= _ xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _ , ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _ False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _ , Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True Sheets.Add After:=Sheets(Sheets.Count) Sheets("Feuil1").Name = "COORDINATES" Sheets.Add After:=Sheets(Sheets.Count) Sheets("Feuil2").Name = "VERTICES" B = Cherch1("[COORDINATES]", 1) 'peu tester Si retour de B = False c'est pas trouver B = Cherch1("[VERTICES]", 2) End Sub Public Function Cherch1(Ch As String, Index As Integer) As Boolean Dim Lig As Long, Lig2 As Long Dim Cherch As Variant, Index As Integer Cherch = Ch Sheets("Blabla").Select Index = ActiveSheet.Index + Index For Lig = 1 To [A65536].End(xlUp).Row If Cells(Lig, 1) = Cherch Then Lig2 = Cells(Lig, 1).End(xlDown).Row Rows(Lig & ":" & Lig2).Copy Sheets(Index).Range("A" & Sheets(Index).[A65536].End(xlUp).Row) Cherch1 = True Exit Function End If Next Lig End Function
Mais vu que tu renomme les feuilles serait plus évident de mettre les noms des feuilles plutôt que leur index, si tu veux je remet le code modifier pour utiliser les noms.
OK, j'ai fais une tite erreur,..
Et puisque la création des fichier texte est reportée après éventuelle modif j'ai supprimer, ont verras ça après.
Remplace la sub...
Les 2 feuilles devraient êtres créée
Et puisque la création des fichier texte est reportée après éventuelle modif j'ai supprimer, ont verras ça après.
Remplace la sub...
Sub Conversion() Dim i As Integer, Col As Integer, g As Integer, TB Dim NomFich As String, ChemFich As String, Sep As String Dim Lig As Long, Lig2 As Long, Txt As String, Fich As Integer Dim NomFeuill As String NomFich = Application.GetOpenFilename(Title:="Sélectionnez le fichier à convertir") If NomFich = "Faux" Then 'pas de sélection faite Exit Sub End If On Error GoTo Sortie Workbooks.OpenText Filename:=NomFich, Origin:= _ xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _ , ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _ False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _ , Array(3, 1), Array(4, 1)) ', TrailingMinusNumbers:=True On Error GoTo 0 TB = Array("COORDINATES", "VERTICES") NomFeuill = ActiveSheet.Name With Sheets(NomFeuill) For Lig = 1 To .[A65536].End(xlUp).Row If .Cells(Lig, 1) Like "*" & TB(i) & "*" Then Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = TB(i) Lig2 = .Cells(Lig, 1).End(xlDown).Row .Rows(Lig & ":" & Lig2).Copy Rows([A65536].End(xlUp).Row) i = i + 1: If i > UBound(TB) Then Exit For End If Next Lig End With Sortie2: Exit Sub Sortie: Resume Sortie2 End Sub
Les 2 feuilles devraient êtres créée
Je ne sais pas si tout sera juste n'ayant pas les fichiers réel mais je pense que le principe est bon.
Nouveau classeur
J'ai laisser un stop dans la dernière sub, avec explication.
A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Nouveau classeur
J'ai laisser un stop dans la dernière sub, avec explication.
A+
Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
MERCI BEAUCOUP BEAUCOUP ! :D
Et dire qu'avant je le faisais à la main !
C'est vraiment génial !!!
Juste une dernière question, quelle est la syntaxe pour que Workbooks(cormes.essai.inp) devienne Workbooks(NomFich) ? Je m'explique : dans la 3 ème sub il y a Workbooks(cormes.essai.inp) or j'aimerais que la macro reprenne le premier fichier ouvert. En effet le nom du premier fichier sera différent à chaque fois.
J'ai essayer Workbooks(NomFich), Workbooks("NomFich"),Workbooks(NomWK & NomFich) mais sans succès...
Et dire qu'avant je le faisais à la main !
C'est vraiment génial !!!
Juste une dernière question, quelle est la syntaxe pour que Workbooks(cormes.essai.inp) devienne Workbooks(NomFich) ? Je m'explique : dans la 3 ème sub il y a Workbooks(cormes.essai.inp) or j'aimerais que la macro reprenne le premier fichier ouvert. En effet le nom du premier fichier sera différent à chaque fois.
J'ai essayer Workbooks(NomFich), Workbooks("NomFich"),Workbooks(NomWK & NomFich) mais sans succès...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
merci pour ton aide !!
Ca marche super bien pour le nom 1 (à copier dnas la feuille 2) mais quand je veux copier/coller nom2 dans la feuille 3, rien ne se passe ... :(
Et je ne comprends pas trop pourquoi...
Ensuite je voudrais que chaque feuille (sauf la première) s'enregistre en tant que fichier texte. J'ai vu plein de choses avec .csv mais pas .txt. Ensuite j'utilise un logiciel pour convertir les données et il n'accepte que les .txt...
Une idée ?
Merci
Voilà où j'en suis pour l'instant :
merci pour ton aide !!
Ca marche super bien pour le nom 1 (à copier dnas la feuille 2) mais quand je veux copier/coller nom2 dans la feuille 3, rien ne se passe ... :(
Et je ne comprends pas trop pourquoi...
Ensuite je voudrais que chaque feuille (sauf la première) s'enregistre en tant que fichier texte. J'ai vu plein de choses avec .csv mais pas .txt. Ensuite j'utilise un logiciel pour convertir les données et il n'accepte que les .txt...
Une idée ?
Merci
Voilà où j'en suis pour l'instant :
Sub Conversion() Workbooks.OpenText Filename:="C:\Users\Fabien\Desktop\Blabla.inp", Origin:= _ xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote _ , ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, Comma:= _ False, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), Array(2, 1) _ , Array(3, 1), Array(4, 1)), TrailingMinusNumbers:=True Sheets.Add After:=Sheets(Sheets.Count) Sheets("Feuil1").Name = "COORDINATES" Sheets.Add After:=Sheets(Sheets.Count) Sheets("Feuil2").Name = "VERTICES" Sheets("Blabla").Select Dim Lig As Long, Lig2 As Long Dim Cherch As Variant, Index As Integer Cherch = "[COORDINATES]" Index = ActiveSheet.Index + 1 For Lig = 1 To [A65536].End(xlUp).Row If Cells(Lig, 1) = Cherch Then Lig2 = Cells(Lig, 1).End(xlDown).Row Rows(Lig & ":" & Lig2).Copy Sheets(Index).Range("A" & Sheets(Index).[A65536].End(xlUp).Row) Exit Sub End If Next Lig ' La partie suivante ne mache pas : .... Sheets("Blabla").Select Cherch = "[VERTICES]" Index = ActiveSheet.Index + 2 For Lig = 1 To [A65536].End(xlUp).Row If Cells(Lig, 1) = Cherch Then Lig2 = Cells(Lig, 1).End(xlDown).Row Rows(Lig & ":" & Lig2).Copy Sheets(Index).Range("A" & Sheets(Index).[A65536].End(xlUp).Row) Exit Sub End If Next Lig End Sub
Fonctionne pas bien.
La première copie marche.
Mais il ne se passe rien pour la copie du deuxième groupe de donnée.
La troisième feuille reste vide.
La première copie marche.
Mais il ne se passe rien pour la copie du deuxième groupe de donnée.
La troisième feuille reste vide.
Oui je veux bien mais je ne comprends pas trop la différence entre l'index des feuilles et leurs noms.
J'ai corrigé un petit truc dans le code que tu m'as donné :
Maintenant ça marche pour les copies :)
J'ai corrigé un petit truc dans le code que tu m'as donné :
Public Function Cherch1(Ch As String, Ind As Integer) As Boolean Dim Lig As Long, Lig2 As Long Dim Cherch As Variant, Index As Integer Cherch = Ch Index = Ind
Maintenant ça marche pour les copies :)
L'index c'est le N° d'ordre de la feuille, dépend du placement.
sheets(Index)
Avec le nom tu est certain d'être toujours avec la bonne feuilles.
Sheets("VERTICES") quel que soit sa position.
Il y a encore moyen d'optimiser ce code avec quelques renseignements supplémentaire.
Ton fichier texte comporte combien (+-) de "Nom" ?
Tu crée à chaque fois une nouvelle feuille ?
Pour enregistrer tes fichiers, 1 fichier par pages ou un seul fichier ?
Note : Peut être sauver en texte et lu en csv avec séparateur Espace
Fini pour le moment.. Promenade
A+
sheets(Index)
Avec le nom tu est certain d'être toujours avec la bonne feuilles.
Sheets("VERTICES") quel que soit sa position.
Il y a encore moyen d'optimiser ce code avec quelques renseignements supplémentaire.
Ton fichier texte comporte combien (+-) de "Nom" ?
Tu crée à chaque fois une nouvelle feuille ?
Pour enregistrer tes fichiers, 1 fichier par pages ou un seul fichier ?
Note : Peut être sauver en texte et lu en csv avec séparateur Espace
Fini pour le moment.. Promenade
A+
Mon fichier texte comporte 28 Noms, [coordinates] et [vertices] sont les 24 et 25 ème
Je sais pas trop comment répondre à :
"Tu crée à chaque fois une nouvelle feuille ?"
J'ouvre excel, je lance la macro qui ouvre mon fichier texte (1ere Feuille) et ensuite la macro crée 2 feuilles supplémentaires qui servent à la copie.
Pour enregistrer mes fichiers, il me faudrait un fichier texte pour chaque feuille. Il me faut comme séparateur des tabulations.
Bon j'ai un problème avec la lecture de mon fichier texte avec le logiciel de conversion... Je vais essayer de régler ça aujourd'hui mais c'est pas gagné...
j'ai vu qu'il était possible de faire apparaitre des "boutons" mais je n'ai pas trop compris leur utilisation...
Serait-il possible d'en faire apparaitre un pour pouvoir choisir le fichier .txt à ouvrir en début de macro ?
Ca éviterait de toujours devoir retourner dans le code...
Mais je sais pas si c'est possible ! :p
J'espère que la promenade s'est bien passée
A+
Je sais pas trop comment répondre à :
"Tu crée à chaque fois une nouvelle feuille ?"
J'ouvre excel, je lance la macro qui ouvre mon fichier texte (1ere Feuille) et ensuite la macro crée 2 feuilles supplémentaires qui servent à la copie.
Pour enregistrer mes fichiers, il me faudrait un fichier texte pour chaque feuille. Il me faut comme séparateur des tabulations.
Bon j'ai un problème avec la lecture de mon fichier texte avec le logiciel de conversion... Je vais essayer de régler ça aujourd'hui mais c'est pas gagné...
j'ai vu qu'il était possible de faire apparaitre des "boutons" mais je n'ai pas trop compris leur utilisation...
Serait-il possible d'en faire apparaitre un pour pouvoir choisir le fichier .txt à ouvrir en début de macro ?
Ca éviterait de toujours devoir retourner dans le code...
Mais je sais pas si c'est possible ! :p
J'espère que la promenade s'est bien passée
A+
Très bien merci, le temps était de la partie.
Un fichier qui fera ce que tu souhaite, du moins je crois.
Le classeur.xls
Je pense que tu est avec le 2007 mais il ira aussi.
D'abord voir le code et adapter le répertoire de destination des fichiers txt à créer.
Et aussi le séparateur de texte.
Le reste est automatique, clic sur le bouton de la feuille 3
C'est nécessaire de créer les feuilles Excel ?
A+
Un fichier qui fera ce que tu souhaite, du moins je crois.
Le classeur.xls
Je pense que tu est avec le 2007 mais il ira aussi.
D'abord voir le code et adapter le répertoire de destination des fichiers txt à créer.
Et aussi le séparateur de texte.
Le reste est automatique, clic sur le bouton de la feuille 3
C'est nécessaire de créer les feuilles Excel ?
A+
Merci
Je vais tester ça de suite.
Pour les feuilles... Je vais dire oui.
Les données (coordonnées par exemple) ont parfois besoin d'être pré-traitées avant la conversion.
Je vais tester ça de suite.
Pour les feuilles... Je vais dire oui.
Les données (coordonnées par exemple) ont parfois besoin d'être pré-traitées avant la conversion.
Je viens d'essayer.
Le bouton marche très bien :) c'est exactement ce qu'il fallait
mais par contre les sélections sont mauvaises.
Je n'ai plus les bonnes données copiées.
J'ai essayé de réintégrer le code (pour la copie) d'avant en changeant les variables mais j'ai une erreur... la 9 l'indice n'appartient pas à la sélection
Et les .csv ne conservent pas la mise en forme alors que j'ai besoin que les colonnes restent des colonnes séparées par des tabulations
Merci d'avance
Le bouton marche très bien :) c'est exactement ce qu'il fallait
mais par contre les sélections sont mauvaises.
Je n'ai plus les bonnes données copiées.
J'ai essayé de réintégrer le code (pour la copie) d'avant en changeant les variables mais j'ai une erreur... la 9 l'indice n'appartient pas à la sélection
Et les .csv ne conservent pas la mise en forme alors que j'ai besoin que les colonnes restent des colonnes séparées par des tabulations
Merci d'avance
Voilà le fichier de départ :
http://cjoint.com/data3/3dBoeIcHTsS.htm
Ensuite les deux fichiers à extraire en sortie doivent ressemble à la mis en forme pour le logiciel de conversion : (Nom X Y )
http://cjoint.com/data3/3dBoeIcHTsS.htm
Ensuite les deux fichiers à extraire en sortie doivent ressemble à la mis en forme pour le logiciel de conversion : (Nom X Y )
Re,
J'ai réussi à créer mes 2 fichiers texte avec des : "print"
Par contre je n'ai pas compris comment recréer un bouton gris dans la page (comme celui présent dans la Feuil3)...
Et comment peut-on le déplacer et choisir sur quelle feuille il sera ?
En fait j'aimerai créer une nouvelle macro (qui se lance en cliquant sur le deuxième bouton) qui fonctionne un peu en sens inverse :
une fois les fichiers texte traités, les ouvrir avec excel copier toutes les données et les mettre à la place des données du tout premier fichier texte importé, printer la feuille mise à jour et voilà.
Je vais essayer d'adapter le code pour que ça marche.
A+
J'ai réussi à créer mes 2 fichiers texte avec des : "print"
Par contre je n'ai pas compris comment recréer un bouton gris dans la page (comme celui présent dans la Feuil3)...
Et comment peut-on le déplacer et choisir sur quelle feuille il sera ?
En fait j'aimerai créer une nouvelle macro (qui se lance en cliquant sur le deuxième bouton) qui fonctionne un peu en sens inverse :
une fois les fichiers texte traités, les ouvrir avec excel copier toutes les données et les mettre à la place des données du tout premier fichier texte importé, printer la feuille mise à jour et voilà.
Je vais essayer d'adapter le code pour que ça marche.
A+
C'est bon j'ai trouvé pour les boutons !
Par contre là où je bloque, c'est que pour ouvrir le fichier .txt il faudrait que je puisse accéder à "ouvrir et réparer" pour pouvoir définir les séparateurs (avec les flèches).
Le fichier.txt a plusieurs ligne d'entete qui font que les 4 premières colonnes du fichier texte sont regroupées dans la première colonne sur excel.
Je sais pas si c'est très clair.
Merci
Par contre là où je bloque, c'est que pour ouvrir le fichier .txt il faudrait que je puisse accéder à "ouvrir et réparer" pour pouvoir définir les séparateurs (avec les flèches).
Le fichier.txt a plusieurs ligne d'entete qui font que les 4 premières colonnes du fichier texte sont regroupées dans la première colonne sur excel.
Je sais pas si c'est très clair.
Merci
Une fois mes données traitées par le logiciel de conversion,
j'obtiens un fichier comme celui là : https://www.cjoint.com/?3dBujlqnLdO
En tout j'en ai 2 : Coordinates et Vertices
Je voudrais ensuite ouvrir ces fichiers avec excel mais avec l'assistant d'importation pour pouvoir définir moi-même les limites de colonnes.
Voilà le classeur avec le code: https://www.cjoint.com/?3dBuoSZ5Wyq
Dans la fenètre ouvrir ouverte par la macro il n'y a pas possibilité de lancer l'assistant ... (ouvrir et réparer...)
je pense que ça sera plus clair avec les fichiers en question ;)
j'obtiens un fichier comme celui là : https://www.cjoint.com/?3dBujlqnLdO
En tout j'en ai 2 : Coordinates et Vertices
Je voudrais ensuite ouvrir ces fichiers avec excel mais avec l'assistant d'importation pour pouvoir définir moi-même les limites de colonnes.
Voilà le classeur avec le code: https://www.cjoint.com/?3dBuoSZ5Wyq
Dans la fenètre ouvrir ouverte par la macro il n'y a pas possibilité de lancer l'assistant ... (ouvrir et réparer...)
je pense que ça sera plus clair avec les fichiers en question ;)