MACRO / VBA
Résolu
Thelucas160
Messages postés
206
Date d'inscription
Statut
Membre
Dernière intervention
-
cs_Le Pivert Messages postés 7904 Date d'inscription Statut Contributeur Dernière intervention -
cs_Le Pivert Messages postés 7904 Date d'inscription Statut Contributeur Dernière intervention -
A voir également:
- MACRO / VBA
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
- Excel compter cellule couleur sans vba - Guide
6 réponses
Bonjour,
quelques pistes:
pour ouvrir un classeur excel:
https://analysistabs.com/vba/open-file-dialogbox-excel-macros-example-code/
pour exporter des colonnes en CSV:
https://www.auditsi.eu/?p=6387
utilisation des checkbox
https://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-B
Après avoir essayé cela reviens si tu as d'autres difficultés
quelques pistes:
pour ouvrir un classeur excel:
https://analysistabs.com/vba/open-file-dialogbox-excel-macros-example-code/
pour exporter des colonnes en CSV:
https://www.auditsi.eu/?p=6387
utilisation des checkbox
https://silkyroad.developpez.com/VBA/ControlesUserForm/#LII-B
Après avoir essayé cela reviens si tu as d'autres difficultés
Thelucas160
Messages postés
206
Date d'inscription
Statut
Membre
Dernière intervention
14
Merci beaucoup pour ta réponse, je vais voir si j'y arrive !
Voici un exemple avec les liens que je t'ai donnés.
A adapter
https://www.cjoint.com/c/HKgpuT70K7Q
Dézipper le fichier, il y a 2 classeurs pour les essais.
Le CSV s'enregistre dans le même dossier que le classeur au même nom avec l'extension CSV
A adapter
https://www.cjoint.com/c/HKgpuT70K7Q
Dézipper le fichier, il y a 2 classeurs pour les essais.
Le CSV s'enregistre dans le même dossier que le classeur au même nom avec l'extension CSV
Je me suis amusé à le faire pour ta problématique avec des checkbox, si cela peut t'aider
Dans un UserForm mettre 1 CommandButton et 2 CheckBox avec ce code:
Dans un UserForm mettre 1 CommandButton et 2 CheckBox avec ce code:
Option Explicit Dim dest As Workbook Dim nom As String Dim strFileToOpen As String Dim chemin As String Dim nomcsv As String Dim n As Long Private Sub UserForm_Initialize() CheckBox1.Enabled = False CheckBox2.Enabled = False CheckBox1.Caption = "Colonne A,H,J" CheckBox2.Caption = "Colonne K,P,U" End Sub Private Sub CheckBox1_Change() If CheckBox1.Value = True Then CheckBox2.Value = False n = Range("J65536").End(xlUp).Row 'dernière ligne If n > 1 Then 'colonne remplie dest.Sheets(1).Range("A1:A" & n & ",H1:H" & n & ",J1:J" & n & "").Select 'plage de cellule exportCSV 'enregistrement CSV Else MsgBox "Il y a une colonne vide!", vbExclamation, "Export CSV" End If End If End Sub Private Sub CheckBox2_Change() If CheckBox2.Value = True Then CheckBox1.Value = False n = Range("U65536").End(xlUp).Row 'dernière ligne If n > 1 Then 'colonne remplie dest.Sheets(1).Range("K1:K" & n & ",P1:P" & n & ",U1:U" & n & "").Select 'plage de cellule exportCSV 'enregistrement CSV Else MsgBox "Il y a une colonne vide!", vbExclamation, "Export CSV" End If End If End Sub Private Sub CommandButton1_Click() strFileToOpen = Application.GetOpenFilename _ (Title:="Sélectionnez le classeur à ouvrir", _ FileFilter:="Excel Files *.xlsx (*.xlsx),") Set dest = Workbooks.Open(Filename:=strFileToOpen) 'ouvre le classeur xlsx nom = Dir(strFileToOpen) 'nom classeur xlsx chemin = Replace(strFileToOpen, nom, "") 'chemin seul nomcsv = Replace(nom, "xlsx", "csv") 'nom csv on change l'extension CheckBox1.Enabled = True 'check opérationnelle CheckBox2.Enabled = True 'check opérationnelle End Sub Sub exportCSV() Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=chemin & nomcsv, FileFormat:=xlCSV, CreateBackup:=False 'enregistrement CSV ActiveWindow.Close Application.DisplayAlerts = True MsgBox "Votre classeur: " & nomcsv & " est enregistré dans le même dossier que votre classeur: " & nom, vbInformation, "Export CSV" dest.Close 'ferme le classeur Unload Me 'ferme l'UserForm End Sub
Est-il possible, lorsque l'on demander de choisir un fichier, d’ouvrir le sélectionneur de fichier a l'emplacement \\192.168.x.x\mesfichier. Sachant que ce chemin réseau doit ce connecter avec un compte (Utilisateur et mdp d'un utilisateur du domaine) et choisir ou enregistrer le fichier csv par la suite ? l'un des tuto qui vous m'avez envoyer permettrait de trouver tout ça ?
Pour ouvrir sur un dossier précis:
Pour enregistrer:
ou récupérer le chemin pour associer à la macro déjà existante:
Voilà
@+ Le Pivert
ChDir "C:\Users\LePivert\Documents\Exporter_CSV\" 'a adapter strFileToOpen = Application.GetOpenFilename _ (Title:="Sélectionnez le classeur à ouvrir", _ FileFilter:="Excel Files *.xlsx (*.xlsx),")
Pour enregistrer:
Dim Fichier As String ChDir "C:\Users\LePivert\Documents\Exporter_CSV\" a adapter Fichier = Application.GetSaveAsFilename(Fichier, "Fichiers CSV (*.csv), *.csv") ActiveWorkbook.SaveAs Fichier
ou récupérer le chemin pour associer à la macro déjà existante:
MsgBox Fichier
Voilà
@+ Le Pivert
J'ai un peu de temps, voilà comment procéder:
@+ Le Pivert
Option Explicit Dim dest As Workbook 'Dim nom As String Dim strFileToOpen As String 'Dim Chemin As String 'Dim nomcsv As String Dim n As Long Dim Fichier As String Private Sub UserForm_Initialize() CheckBox1.Enabled = False CheckBox2.Enabled = False CheckBox1.Caption = "Colonne A,H,J" CheckBox2.Caption = "Colonne K,P,U" End Sub Private Sub CheckBox1_Change() If CheckBox1.Value = True Then CheckBox2.Value = False n = Range("J65536").End(xlUp).Row 'dernière ligne If n > 1 Then 'colonne remplie dest.Sheets(1).Range("A1:A" & n & ",H1:H" & n & ",J1:J" & n & "").Select 'plage de cellule ChDir "C:\Users\LePivert\Documents\Exporter_CSV\" 'a adapter Fichier = Application.GetSaveAsFilename(Fichier, "Fichiers CSV (*.csv), *.csv") 'chemin de l'enregistrement exportCSV 'enregistrement CSV Else MsgBox "Il y a une colonne vide!", vbExclamation, "Export CSV" End If End If End Sub Private Sub CheckBox2_Change() If CheckBox2.Value = True Then CheckBox1.Value = False n = Range("U65536").End(xlUp).Row 'dernière ligne If n > 1 Then 'colonne remplie dest.Sheets(1).Range("K1:K" & n & ",P1:P" & n & ",U1:U" & n & "").Select 'plage de cellule ChDir "C:\Users\LePivert\Documents\Exporter_CSV\" 'a adapter Fichier = Application.GetSaveAsFilename(Fichier, "Fichiers CSV (*.csv), *.csv") 'chemin de l'enregistrement exportCSV 'enregistrement CSV Else MsgBox "Il y a une colonne vide!", vbExclamation, "Export CSV" End If End If End Sub Private Sub CommandButton1_Click() ChDir "C:\Users\LePivert\Documents\Exporter_CSV\" 'a adapter strFileToOpen = Application.GetOpenFilename _ (Title:="Sélectionnez le classeur à ouvrir", _ FileFilter:="Excel Files *.xlsx (*.xlsx),") Set dest = Workbooks.Open(Filename:=strFileToOpen) 'ouvre le classeur xlsx 'nom = Dir(strFileToOpen) 'nom classeur xlsx ' Chemin = Replace(strFileToOpen, nom, "") 'chemin seul ' nomcsv = Replace(nom, "xlsx", "csv") 'nom csv on change l'extension CheckBox1.Enabled = True 'check opérationnelle CheckBox2.Enabled = True 'check opérationnelle End Sub Sub exportCSV() Selection.Copy Workbooks.Add ActiveSheet.Paste Application.CutCopyMode = False Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:=Fichier, FileFormat:=xlCSV, CreateBackup:=False 'enregistrement CSV ActiveWindow.Close Application.DisplayAlerts = True MsgBox "Emplacement de votre classeur CSV: " & Fichier, vbInformation, "Export CSV" dest.Close 'ferme le classeur Unload Me 'ferme l'UserForm End Sub
@+ Le Pivert
Merci encore ^^ par contre j'ais une petite erreur en voulant modifier le code :


je veu choisir les colonne B et L sur un export, dnoc je change le n = Range("U65536") par n = Range("L65536")
et
dest.Sheets(1).Range("K1:K" & n & ",P1:P" & n & ",U1:U" & n & "").Select 'plage de cellule
remplacer par
dest.Sheets(1).Range("B1:B" & n & ",L1:L" & n & "").Select 'plage de cellule
Une idée ? j'ai du me louper quelque part
je veu choisir les colonne B et L sur un export, dnoc je change le n = Range("U65536") par n = Range("L65536")
et
dest.Sheets(1).Range("K1:K" & n & ",P1:P" & n & ",U1:U" & n & "").Select 'plage de cellule
remplacer par
dest.Sheets(1).Range("B1:B" & n & ",L1:L" & n & "").Select 'plage de cellule
Une idée ? j'ai du me louper quelque part
Ce que tu veux faire, c'est nommer une plage de données
Voir ceci:
http://www.helenemarchand.com/2010/05/31/excel-2007-nommer-une-plage-de-donnees/
Mais pour faire cela il faut avoir préalablement sélectionné la plage!
Voici un exemple de ce que l'on peut faire avec la sélection multiple:
https://www.cjoint.com/c/HKnmPiuj5RQ
l'avantage, cela nécessite très peu de code et évite une usine à gaz!
en prime j'ai ajouté la conversion de CSV vers Excel
Voilà
Voir ceci:
http://www.helenemarchand.com/2010/05/31/excel-2007-nommer-une-plage-de-donnees/
Mais pour faire cela il faut avoir préalablement sélectionné la plage!
Voici un exemple de ce que l'on peut faire avec la sélection multiple:
https://www.cjoint.com/c/HKnmPiuj5RQ
l'avantage, cela nécessite très peu de code et évite une usine à gaz!
en prime j'ai ajouté la conversion de CSV vers Excel
Voilà
Ça a l'aire bien compliquer de mettre un ordre spécifique ! Mais je me penche sur la selection multiple ! merci
Petite question, jais fait ce code :
If CheckBox2.Value = True Then
Range("B1, L1").Select
If (IsEmpty(ActiveCell)) Then
TextBox2.Text = "colonne vide : " & ActiveCell.Address
Else
TextBox2.Text = "Pret a l'export"
End If
Il fonctionne a moitie, lorsque B1 est vide ca fonctionne, mais lorsque B1 est pleine et L1 vide il dis que tout va bien.
C'est 1 seul bouton qui normalement me dis quelle colonne est vide (ici checkbox2 a besoin de B et L donc il faut vérifier quelle sois bien pleine et qu'il n'y est pas de décalage!)
Petite question, jais fait ce code :
If CheckBox2.Value = True Then
Range("B1, L1").Select
If (IsEmpty(ActiveCell)) Then
TextBox2.Text = "colonne vide : " & ActiveCell.Address
Else
TextBox2.Text = "Pret a l'export"
End If
Il fonctionne a moitie, lorsque B1 est vide ca fonctionne, mais lorsque B1 est pleine et L1 vide il dis que tout va bien.
C'est 1 seul bouton qui normalement me dis quelle colonne est vide (ici checkbox2 a besoin de B et L donc il faut vérifier quelle sois bien pleine et qu'il n'y est pas de décalage!)
Faire comme l'exemple ici sur les 2 colonnes:
https://forums.commentcamarche.net/forum/affich-35679687-macro-vba#5
C'est pour cela que je dis que c'est une usine à gaz, si il y a 3, 4 etc; colonnes!!!!!!!!!
enfin c'est toi le chef
j'ai eu un post qui me demandait de permuter les colonnes. Si cela t’intéresse j'ai fait une macro
@+ Le Pivert
https://forums.commentcamarche.net/forum/affich-35679687-macro-vba#5
C'est pour cela que je dis que c'est une usine à gaz, si il y a 3, 4 etc; colonnes!!!!!!!!!
enfin c'est toi le chef
j'ai eu un post qui me demandait de permuter les colonnes. Si cela t’intéresse j'ai fait une macro
@+ Le Pivert
faut vérifier quelle sois bien pleine et qu'il n'y est pas de décalage!)
comme ceci:
Pour permuter une colonne:
Voilà
@+ Le Pivert
comme ceci:
Private Sub CheckBox2_Change() Dim nB As Integer Dim nL As Integer If CheckBox2.Value = True Then nB = Range("B65536").End(xlUp).Row 'dernière ligne B nL = Range("L65536").End(xlUp).Row 'dernière ligne L If nB = nL Then 'colonne égale MsgBox "Pret a l'export" Else MsgBox "une des 2 colonnes n'est pas égale" End If End If End Sub
Pour permuter une colonne:
Dim coldepart As String Dim coldest As String coldepart = InputBox("Entrez la lettre de la colonne à permuter", "Permuter colonne", "A") Do While Len(coldepart) = 0 Exit Sub Loop coldest = InputBox("Entrez la lettre de la colonne de destination", "Permuter colonne", "E") 'si destination A->Z colonne a gauche de la lettre choisie, si destination A<-Z colonne lettre choisie Do While Len(coldest) = 0 Exit Sub Loop Columns(coldepart & ":" & coldepart).Select Selection.Cut Columns(coldest & ":" & coldest).Select Selection.Insert Shift:=xlToRight
Voilà
@+ Le Pivert
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Par contre, est-il possible de prendre les colonne A,B,C,D (par exemple)
et de les mettre a a partie de A3, B3, C3, D3
tout en disant de remplir A1 avec Test, B2 avec Truc2 etc... ? je ne suis pas claire je pense mais compliquer d'expliquer :/
et de les mettre a a partie de A3, B3, C3, D3
tout en disant de remplir A1 avec Test, B2 avec Truc2 etc... ? je ne suis pas claire je pense mais compliquer d'expliquer :/
Tu t'embarques encore dans une usine à gaz ! -:(
mettre ce code à l'ouverture du classeur:
à adapter les autres cellules de remplissage
ne pas oublier à la fermeture du classeur de ne pas enregistrer les modifications
mettre ce code à l'ouverture du classeur:
Dim n As Integer n = 2 'nbre lignes à ajouter ActiveSheet.Rows(1).Resize(n).Insert Shift:=xlDown Range("A1").Value = "machin" Range("A2").Value = "truc"
à adapter les autres cellules de remplissage
ne pas oublier à la fermeture du classeur de ne pas enregistrer les modifications
Les usine a gaz j'adore çà apparemment :/
Si vous voulez auriez vue mon programme actuellement...
Pour l'instant il faut que, en appuyant sur le bouton enregistrer, il prenne les colonne de fichier Custommer et les mette dans des autre colonne du nouveau fichier.. je ne sais pas si sans permutation c'est possible.
Pour bien comprendre. a la tout fin, je choisir le fichier custommer et j'en sort 2 fichier différent.
A quoi correspond c'es ligne :
n = 2 'nbre lignes à ajouter
ActiveSheet.Rows(1).Resize(n).Insert Shift:=xlDown
Moi j'avais penser a simplement faire [B1]="Test" quand on clique sur enregistrer (qui fonctionne pour le moment) Mais ce n'est peu-être pas ergonomique
Si vous voulez auriez vue mon programme actuellement...
Pour l'instant il faut que, en appuyant sur le bouton enregistrer, il prenne les colonne de fichier Custommer et les mette dans des autre colonne du nouveau fichier.. je ne sais pas si sans permutation c'est possible.
Pour bien comprendre. a la tout fin, je choisir le fichier custommer et j'en sort 2 fichier différent.
A quoi correspond c'es ligne :
n = 2 'nbre lignes à ajouter
ActiveSheet.Rows(1).Resize(n).Insert Shift:=xlDown
Moi j'avais penser a simplement faire [B1]="Test" quand on clique sur enregistrer (qui fonctionne pour le moment) Mais ce n'est peu-être pas ergonomique
n = 2 'nbre lignes à ajouter
c'est assez explicite
tu peux mettre aussi ceci:
Donc quand tu lances ce code, il va ajouter 2 lignes avant les en-têtes, ensuite il te suffit de permuter tes colonnes, de sélectionner celles à enregistrer et d'ajouter le texte aux cellules que tu désires.
Quand toute ta tambouille est faite tu n'as plus qu'à enregistrer!
C'est simple :-)
@+
c'est assez explicite
tu peux mettre aussi ceci:
ActiveSheet.Rows(1).Resize(2).Insert Shift:=xlDown '1 première ligne, 2 lignes a ajouter
Donc quand tu lances ce code, il va ajouter 2 lignes avant les en-têtes, ensuite il te suffit de permuter tes colonnes, de sélectionner celles à enregistrer et d'ajouter le texte aux cellules que tu désires.
Quand toute ta tambouille est faite tu n'as plus qu'à enregistrer!
C'est simple :-)
@+
Bonjour, Merci pour la dernière, je n'est pas eu de temps de repondre.
Petit question :
J'ai 2 colonne,
A = CODE CLIENT ou 1/2/3 etc.. ( sachant que 1 peu resortir plusieur fois par exemple)
B = V50 ou V10 ou V100 ou V20 etc...
j'aimerait avoir une colonne pour chaque V10 V20 etc en fonction de ce que dispose le client.
donc une sorte de tableau croiser dynamique en vba avec un commandbutton
Serais-ce possible ?
Petit question :
J'ai 2 colonne,
A = CODE CLIENT ou 1/2/3 etc.. ( sachant que 1 peu resortir plusieur fois par exemple)
B = V50 ou V10 ou V100 ou V20 etc...
j'aimerait avoir une colonne pour chaque V10 V20 etc en fonction de ce que dispose le client.
donc une sorte de tableau croiser dynamique en vba avec un commandbutton
Serais-ce possible ?