Excel / Visual Basic / Création et transfert d'informations
Résolu
SliDeeNz
Messages postés
223
Date d'inscription
Statut
Membre
Dernière intervention
-
SliDeeNz Messages postés 223 Date d'inscription Statut Membre Dernière intervention -
SliDeeNz Messages postés 223 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Excel / Visual Basic / Création et transfert d'informations
- Visual basic - Télécharger - Langages
- Word et excel gratuit - Guide
- Liste déroulante excel - Guide
- Si et excel - Guide
- Microsoft 365 basic - Accueil - Microsoft Office
4 réponses
Bonjour,
Ensuite nous verrons pour la collecte des donnees
A+
'code a affecter a un bouton sur une feuille Sub Choix_Fichier_CSV() Dim CheminFichier As Variant Const Fichier As String = "Fichier CSV (*.csv), *.csv" Const Ext As String = "csv" 'Choisir le fichier source CheminFichier = Application.GetOpenFilename(Fichier) 'test pas de fichier selectionne If Right(SCheminFichier, 3) <> Ext Then MsgBox "Vous n'avez pas choisi de fichier csv !! Bye ..." Exit Sub Else 'importer le fichier choisi Import_Fichier_rapport (CheminFichier) End If End Sub 'code modife en partant d'un import donnees externes avec l'enregistreur de macro 'vous deverez adapter cette ligne '.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1) 'en fonction du nombre de colonnes du fichier csv. 'Le mieux serait de faire avec l'enregistreur de macro l'import de votre fichier Sub Import_Fichier_rapport(Fichier) 'nom de feuille a adapter Worksheets("Data_TXT").Activate Worksheets("Data_TXT").Cells.ClearContents With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & Fichier, Destination:=Range("$A$1")) '.CommandType = 0 '.Name = "498 499 23°C yaw pitch" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 1252 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = False .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With End Sub
Ensuite nous verrons pour la collecte des donnees
A+
Re,
fichier excel xls et fichier csv pour demo, les cellules copiees sont dans les colonnes texte en rouge, adaptez a votre besoin
https://www.cjoint.com/c/EIEmm6dyrqf
fichier excel xls et fichier csv pour demo, les cellules copiees sont dans les colonnes texte en rouge, adaptez a votre besoin
https://www.cjoint.com/c/EIEmm6dyrqf
Re,
Veuillez m'excuser,
Oui effectivement il peut y avoir plusieurs lignes à balayer en fonction du nombre d'utilisateurs qui soient modifie leur profil ou créé un profil.
Plus il y a de personnes qui modifie ou créés un profil, plus il y a de lignes à balayer sur le fichier CSV et donc plus il y aura de lignes sur le fichier Excel.
Veuillez m'excuser,
Oui effectivement il peut y avoir plusieurs lignes à balayer en fonction du nombre d'utilisateurs qui soient modifie leur profil ou créé un profil.
Plus il y a de personnes qui modifie ou créés un profil, plus il y a de lignes à balayer sur le fichier CSV et donc plus il y aura de lignes sur le fichier Excel.
Re,
code precedent Sub Traitement() a remplacer:
code precedent Sub Traitement() a remplacer:
Sub Traitement() With Worksheets("feuil1") 'raz cellules derlig = .Range("A" & Rows.Count).End(xlUp).Row .Range("E2,H2,I2,L2,O2,P2").ClearContents .Range("E2:E" & derlig).ClearContents .Range("H2:H" & derlig).ClearContents .Range("I2:I" & derlig).ClearContents .Range("L2:L" & derlig).ClearContents .Range("O2:O" & derlig).ClearContents .Range("P2:P" & derlig).ClearContents 'ecriture Infos derlig = Worksheets("Import_CSV").Range("A" & Rows.Count).End(xlUp).Row Worksheets("Import_CSV").Range("E2:E" & derlig).Copy .Range("E2:E" & derlig) Worksheets("Import_CSV").Range("H2:H" & derlig).Copy .Range("H2:H" & derlig) Worksheets("Import_CSV").Range("I2:I" & derlig).Copy .Range("I2:I" & derlig) Worksheets("Import_CSV").Range("L2:L" & derlig).Copy .Range("L2:L" & derlig) Worksheets("Import_CSV").Range("O2:O" & derlig).Copy .Range("O2:O" & derlig) Worksheets("Import_CSV").Range("P2:P" & derlig).Copy .Range("P2:P" & derlig) End With End Sub
Re,
Merci sa fonctionne,
Donc si j'ai bien compris actuellement on utilise quelques informations du fichier CSV et on les utilises au endroit défini dans le Excel.
Et ce que en balayant le fichier CSV on ne pourrait pas connaitre le nombre de ligne a ajouter dans le fichier Excel et donc générer automatiquement les lignes qui contiendrons toujours les mêmes valeurs (les valeurs par défaut qui ne changent pas lors du traitement du fichier CSV) ?
Merci sa fonctionne,
Donc si j'ai bien compris actuellement on utilise quelques informations du fichier CSV et on les utilises au endroit défini dans le Excel.
Et ce que en balayant le fichier CSV on ne pourrait pas connaitre le nombre de ligne a ajouter dans le fichier Excel et donc générer automatiquement les lignes qui contiendrons toujours les mêmes valeurs (les valeurs par défaut qui ne changent pas lors du traitement du fichier CSV) ?
Re,
sub Traitement a remplacer. Je me repete, deux fois copie de colonne D normal ou pas et infos fixe J : 1,98001E+11-----> Z'etes sur
sub Traitement a remplacer. Je me repete, deux fois copie de colonne D normal ou pas et infos fixe J : 1,98001E+11-----> Z'etes sur
Sub Traitement() With Worksheets("feuil1") 'raz cellules derlig = .Range("A" & Rows.Count).End(xlUp).Row .Range("A2:P" & derlig).ClearContents 'ecriture Infos automatiques derlig = Worksheets("Import_CSV").Range("A" & Rows.Count).End(xlUp).Row Worksheets("Import_CSV").Range("A2:A" & derlig).Copy .Range("E2:E" & derlig) Worksheets("Import_CSV").Range("B2:B" & derlig).Copy .Range("H2:H" & derlig) Worksheets("Import_CSV").Range("C2:C" & derlig).Copy .Range("I2:I" & derlig) Worksheets("Import_CSV").Range("D2:D" & derlig).Copy .Range("L2:L" & derlig) Worksheets("Import_CSV").Range("D2:D" & derlig).Copy .Range("P2:P" & derlig) 'ecriture Infos fixes 'A: R1W5R1W5 .Range("A2:A" & derlig) = "R1W5R1W5" 'B: TV .Range("B2:B" & derlig) = "TV" 'C: R1W5R1W5 .Range("C2:C" & derlig) = "R1W5R1W5" 'D: N .Range("D2:D" & derlig) = "N" 'F: UJF2015 .Range("F2:F" & derlig) = "UJF2015" 'G: UJF2015 .Range("G2:G" & derlig) = "UJF2015" 'J : 1,98001E+11 .Range("J2:J" & derlig) = "1,98001E+11" 'K : 10101010101 .Range("K2:K" & derlig) = "10101010101" 'M: FR .Range("M2:M" & derlig) = "FR" 'N: EUR .Range("N2:N" & derlig) = "EUR" 'O: structure UJF .Range("O2:O" & derlig) = "structure UJF" End With End Sub
Re,
C'est bon les entêtes fonctionne, c'était du a un problème avec mon fichier CSV !
Dernière chose,
dans le fichier CSV j'ai une case qui indique si la personne a modifier son profil, en a créé un ou n'a pas effectué de modification.
Seul les personnes ayant créé un profil m'intéresse et doivent figurer dans le fichier Excel, est-ce qu'il est possible de créé un genre de filtre pour faire cela ?
La colonne contenant ces information dans le fichier CSV est la "F" et les différentes informations sont : "no_change","create","update".
Je ne doit garder que les create sans afficher cette information dans le fichier Excel.
C'est bon les entêtes fonctionne, c'était du a un problème avec mon fichier CSV !
Dernière chose,
dans le fichier CSV j'ai une case qui indique si la personne a modifier son profil, en a créé un ou n'a pas effectué de modification.
Seul les personnes ayant créé un profil m'intéresse et doivent figurer dans le fichier Excel, est-ce qu'il est possible de créé un genre de filtre pour faire cela ?
La colonne contenant ces information dans le fichier CSV est la "F" et les différentes informations sont : "no_change","create","update".
Je ne doit garder que les create sans afficher cette information dans le fichier Excel.
Re,
code modifie:
code modifie:
Sub Traitement() With Worksheets("feuil1") 'raz cellules derlig = .Range("A" & Rows.Count).End(xlUp).Row .Range("A2:P" & derlig).ClearContents 'ecriture Infos automatiques derlig = Worksheets("Import_CSV").Range("A" & Rows.Count).End(xlUp).Row Worksheets("Import_CSV").Range("A2:A" & derlig).Copy .Range("E2:E" & derlig) Worksheets("Import_CSV").Range("B2:B" & derlig).Copy .Range("H2:H" & derlig) Worksheets("Import_CSV").Range("C2:C" & derlig).Copy .Range("I2:I" & derlig) Worksheets("Import_CSV").Range("D2:D" & derlig).Copy .Range("L2:L" & derlig) Worksheets("Import_CSV").Range("D2:D" & derlig).Copy .Range("P2:P" & derlig) Worksheets("Import_CSV").Range("F2:F" & derlig).Copy .Range("A2:A" & derlig) 'suppression lignes <> "create" For x = derlig To 2 Step -1 If .Range("A" & x) <> "create" Then .Rows(x).Delete End If Next x 'ecriture Infos fixes derlig = .Range("A" & Rows.Count).End(xlUp).Row 'A: R1W5R1W5 .Range("A2:A" & derlig) = "R1W5R1W5" 'B: TV .Range("B2:B" & derlig) = "TV" 'C: R1W5R1W5 .Range("C2:C" & derlig) = "R1W5R1W5" 'D: N .Range("D2:D" & derlig) = "N" 'F: UJF2015 .Range("F2:F" & derlig) = "UJF2015" 'G: UJF2015 .Range("G2:G" & derlig) = "UJF2015" 'J : 1,98001E+11 .Range("J2:J" & derlig) = "1,98001E+11" 'K : 10101010101 .Range("K2:K" & derlig) = "10101010101" 'M: FR .Range("M2:M" & derlig) = "FR" 'N: EUR .Range("N2:N" & derlig) = "EUR" 'O: structure UJF .Range("O2:O" & derlig) = "structure UJF" End With End Sub
Pour l'instant j'ai fait la création du bouton et j'ai compris la première partie du code :
Mais j'ai un petit problème qui apparait, il passe toujours dans le IF même si je sélectionne un fichier CSV.
Tu as une petite idée du problème ? Merci beaucoup !
remplacez cette ligne
par
et
remplacez cette ligne:
par
A+
Je vient de l'identifier : CheminFichier
Dans le IF CheminFichier avait un "S" devant.
Maintenant tout fonctionne !
Je passe donc a la deuxième partie du codage.
Pour l'instant je n'ai fait que un copié coller est j'essaie de comprendre,
j'ai une erreur a cette endroit la :
Tu indiques que "le nom est a adapter", je doit donner un nous au fichier qui va être créé ici (à l'endroit ou il y à Data_TXT) c'est bien sa ?
En tout cas je l'est nommé "test_integration" et la lors de l'exécution j'ai une erreur qui me dit que l'indice n'appartient pas a la sélection. (erreur d'exécution "9").
D'où vient l'erreur et est ce que j'ai bien compris le fonctionnement ?
Merci d'avance pour ta réponse et bonne journée.
Pour le "S" en trop, ma faute suite a modif.
L'import fichier doit ce faire dans un onglet du nom que vous aurez choisi et vous devez mettre ce nom a la place de Data_TXT dans les deux lignes de programme.
Pour avoir le bon nombre de colonne importee, selectionnez l'onglet d'import, ensuite vous devez aller dans menu developpeur, enregistrer une macro, ok, menu donnees, donnees externes, fichier txt, choix du fichier (ici un csv) et suivre les indications de choix
A+
D'accord, j'ai compris et sa fonctionne.
Maintenant je doit trier les différentes informations pour pouvoir placer l'email dans la colonne email, pareil pour nom, prénom, etc...