Excel VBA question débutant
Bonjour, je voudrai de l'aide je suis un débutant en excel VBA, je travaille sur un projet d'extraction et je voudrai copier d'une case pour le copier sur toutes les autre case exemple : copier valeur (ligne 2, colonne3) et les coller sur toutes les case qui contient un identifiant unique. ci-joint mon exemple je veux affecter la valeur Pop_IT à toutes les IUD, j'ai du mal aussi sur les entêtes si quelqu'un peut m'aider à insérer les entêtes comme je l'ai fait sur le fichier joint. merci d'avance.
Bonjour,
Peux-tu donner un exemple plus conséquent et mettre à côté le résultat attendu ?
Je ne comprends pas la question relative aux en-têtes.
Cdlt.
Bonjour,
j'ai le résultat classeur.1xlsx et je veux avoir le résultat test.xlsx.
quelqu'un peut m'aider please ??????
Bonjour,
Si tu parles de VBA cela veut dire que tu cherches une macro ?
une bonne partie de la macro peut être trouvée avec l'enregistreur.
Ensuite on vient modifier avec des variables et on simplifie la saisie de donnée.
Si après on voit la variable DX qui représente la dernière ligne non vide de la feuille.
On utilise ensuite DX pour indiquer la plage dans laquelle toutes les cellules auront la valeur "Pop_IT"
( à partir de la ligne 2 dans la colonne 3 puisque la ligne de titre et présente au début du code jusqu'à DX )
Sub Macro1()
Dim DX As Long
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Value = "IUD"
Range("B1").Value = "Droit"
Range("C1").Value = "Nom pack"
DX = Range("A65536").End(xlUp).Row
Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT"
End Sub
Bonjour,
Si tu parles de VBA cela veut dire que tu cherches une macro ?
une bonne partie de la macro peut être trouvée avec l'enregistreur.
Ensuite on vient modifier avec des variables et on simplifie la saisie de donnée.
Si après on voit la variable DX qui représente la dernière ligne non vide de la feuille.
On utilise ensuite DX pour indiquer la plage dans laquelle toutes les cellules auront la valeur "Pop_IT"
( à partir de la ligne 2 dans la colonne 3 puisque la ligne de titre et présente au début du code jusqu'à DX )
Sub Macro1() Dim DX As Long Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Value = "IUD" Range("B1").Value = "Droit" Range("C1").Value = "Nom pack" DX = Range("A65536").End(xlUp).Row Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT" End SubClasseur1 (1).xlsm
un grand merci.
Bonjour,
Si tu parles de VBA cela veut dire que tu cherches une macro ?
une bonne partie de la macro peut être trouvée avec l'enregistreur.
Ensuite on vient modifier avec des variables et on simplifie la saisie de donnée.
Si après on voit la variable DX qui représente la dernière ligne non vide de la feuille.
On utilise ensuite DX pour indiquer la plage dans laquelle toutes les cellules auront la valeur "Pop_IT"
( à partir de la ligne 2 dans la colonne 3 puisque la ligne de titre et présente au début du code jusqu'à DX )
Sub Macro1() Dim DX As Long Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Value = "IUD" Range("B1").Value = "Droit" Range("C1").Value = "Nom pack" DX = Range("A65536").End(xlUp).Row Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT" End SubClasseur1 (1).xlsm
Rebonjour et merci de votre aide, j'ai un autre problème, au fait, j'extrais mes données dans un fichier qui se trouve sur C/Documents du si j'applique ça
Sub Macro1()
Dim DX As Long
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Value = "IUD"
Range("B1").Value = "Droit"
Range("C1").Value = "Nom pack"
DX = Range("A65536").End(xlUp).Row
Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT"
End SubClasseur1 (1).xlsm
j'ai les résultats dans la feuille alors que je veux avoir les résultats dans mon fichier de sortie qui s'appelle "ouput.csv" qui se dans trouve C/Documents. Si quelqu'un peut m'aider pour savoir ce que je dois ajouter sur mon code pour que j'arrive à écrire sur cette sortie "output.csv"
merci d'avance.
Re, bonjour
Une petite modification du code :
Enregistre d'abord ce fichier dans le même répertoire que ton fichier output.cvs
Principe du nouveau code :
On utilise le même chemin que le fichier d'importation.
Après ouverture du fichier csv on copie les infos et on ferme le fichier.
Dans le fichier import on colle les infos
Puis on lance le reste de la macro déjà existante.
Sub Macro1()
Dim chemin As String
Dim monfichier As String
Dim nbligne As Long
chemin = ThisWorkbook.Path & "\"
monfichier = "output.csv"
Workbooks.Open Filename:=chemin & monfichier
nbligne = Range("A65536").End(xlUp).Row
Range(Cells(1, 1), Cells(nbligne, 3)).Select
Selection.Copy
ActiveWorkbook.Close
Windows("Classeur (test import).xlsm").Activate
Range("A1").Select
ActiveSheet.Paste
Dim DX As Long
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Value = "IUD"
Range("B1").Value = "Droit"
Range("C1").Value = "Nom pack"
DX = Range("A65536").End(xlUp).Row
Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT"
End SubRe, bonjour
Une petite modification du code :
Enregistre d'abord ce fichier dans le même répertoire que ton fichier output.cvs
Classeur (test import).xlsm
Principe du nouveau code :
On utilise le même chemin que le fichier d'importation.
Après ouverture du fichier csv on copie les infos et on ferme le fichier.
Dans le fichier import on colle les infos
Puis on lance le reste de la macro déjà existante.
Sub Macro1() Dim chemin As String Dim monfichier As String Dim nbligne As Long chemin = ThisWorkbook.Path & "\" monfichier = "output.csv" Workbooks.Open Filename:=chemin & monfichier nbligne = Range("A65536").End(xlUp).Row Range(Cells(1, 1), Cells(nbligne, 3)).Select Selection.Copy ActiveWorkbook.Close Windows("Classeur (test import).xlsm").Activate Range("A1").Select ActiveSheet.Paste Dim DX As Long Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Value = "IUD" Range("B1").Value = "Droit" Range("C1").Value = "Nom pack" DX = Range("A65536").End(xlUp).Row Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT" End Sub
merci, par contre ça marche pas comme je le veux lorsque je l'ai adapté à mon programme, le fichier de sortie en réalité se crée automatique dans C/Document c'est pas un fichier csv que j'ai crée donc "output.csv" est un fichier excel pas un csv.
voici l'exmple de création du fichier outpu.csv :
' Parametrage du Fichier
strName = "output.csv"
strPath = ".\"
If (objFSO.FileExists(strPath & strName)) Then
objFSO.DeleteFile strPath & strName
End If
Set objF = objFSO.CreateTextFile(strPath & strName)
objF.Close
Set objF = objFSO.openTextFile(strPath & strName, ForAppending)
alors j'ai comme résultat : il écrit tous sur une méme cellule aulieu de les afficher sur les differentes cellules
exemple : IUD sur cellule A1 il doit recopier les IUD, Droit sur B1, Nom pack sur C1.
si quelque peut m'aider à résoudre ce problème please.
mes un bout de fichier output.csv original sans transformation préalable ; sinon on tourne en rond là avec les infos
qui arrivent au compte goutte.
Comprend plus là c'est du csv ou du excel ? mes un bout de fichier output.csv original sans transformation préalable ; sinon on tourne en rond là avec les infos
qui arrivent au compte goutte.
Commeje l'ai dit, j'extrait des données et je l'ai enrégistre directement sur C/Document donc pas csv c'est juste la notation du fichier.
j'ai déja mes résultat d'extraction du coup je veux juste mettre mes en-têtes et dupliquer la ligne comme suit sur mon fichier de sortie output (fichier excel enrégistré sur C/Document):
Dim DX As Long
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Value = "IUD"
Range("B1").Value = "Droit"
Range("C1").Value = "Nom pack"
par compte lorsque je le fais il écrit sur mon classeur pas sur mon fichier de sortie.
Bonjour,
Ah !
Un problème bien posé est à moitié résolu…
Cdlt.
En traduction tu veux une macro qui va aller appliquer une certaines mise en forme sur
un fichier "csv" existant et pas importer les données d'un fichier cvs.
En important les données tu pouvais enregistrer une copie en csv cela revient presque au même
Sinon voici la macro corrigée : on ouvre le csv comme un fichier texte et on convertit avec le " ; " comme séparateur.
ensuite le code reste identique.
Pour le fichier macro, idem à enregistrer d'abord dans le même répertoire que output.csv
Sub Macro1()
Dim chemin As String
Dim monfichier As String
Dim nbligne As Long
chemin = ThisWorkbook.Path & "\"
monfichier = "output.csv"
Workbooks.OpenText Filename:=chemin & monfichier
Columns("A:A").Select
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, OtherChar _
:=";", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True
Dim DX As Long
Rows("1:1").Select
Selection.Insert Shift:=xlDown
Range("A1").Value = "IUD"
Range("B1").Value = "Droit"
Range("C1").Value = "Nom pack"
DX = Range("A65536").End(xlUp).Row
Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT"
End SubEn traduction tu veux une macro qui va aller appliquer une certaines mise en forme sur
un fichier "csv" existant et pas importer les données d'un fichier cvs.
En important les données tu pouvais enregistrer une copie en csv cela revient presque au même
Sinon voici la macro corrigée : on ouvre le csv comme un fichier texte et on convertit avec le " ; " comme séparateur.
ensuite le code reste identique.
Pour le fichier macro, idem à enregistrer d'abord dans le même répertoire que output.csv
Classeur (test-modif-output-csv).xlsm
Sub Macro1() Dim chemin As String Dim monfichier As String Dim nbligne As Long chemin = ThisWorkbook.Path & "\" monfichier = "output.csv" Workbooks.OpenText Filename:=chemin & monfichier Columns("A:A").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ Semicolon:=True, Comma:=False, Space:=False, Other:=False, OtherChar _ :=";", FieldInfo:=Array(1, 1), TrailingMinusNumbers:=True Dim DX As Long Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Value = "IUD" Range("B1").Value = "Droit" Range("C1").Value = "Nom pack" DX = Range("A65536").End(xlUp).Row Range(Cells(2, 3), Cells(DX, 3)).Value = "Pop_IT" End Sub
je vous remercie c'est ce qu'il me fallait,
encore un grand merci à vous