Bonjour,
J'ai déja vu le post de paritec qui parlait du même problème mais je n'arrive pas à comprendre comment il fonctionne. Si quelqu'un arriverai à m'expliquer .
https://www.excel-downloads.com/threads/macro-copiant-des-colonnes-sous-condition.143330/
Sinon voilà mon problème.
But : Copier les colonnes dans lesquelles la première ligne est "X". Les collers dans une nouvelle feuille excel. Que l'on nommera avec la date du jour dans le dossier dans lequel le fichier a été ouvert.
Les 2 problèmes: Le premier est que je ne trouve pas de moyen de copier les cellules à la condition de trouver un "X"
Le second problème: je ne trouve pas de moyen pour enregistrer le fichier dans le dossier d'ouverture
Je vous met ci-joint mon fichier avec mon avancement. Il ne fonctionne pas sous condition.
Voilà le code actuel
Sub ExportEnre()
'copie, créer'
Range("C:C,D,F:F,G:G").Select
Application.CutCopyMode = False
Selection.Copy
Workbooks.Add
Range("B1").Select
ActiveSheet.Paste
'enregistre'
Dim fso, Chemin, NomFichier, FichierExiste
Set fso = CreateObject("Scripting.FileSystemObject")
'//changer chemin'
Chemin = "C:\Documents and Settings\Mes documents\"
NomFichier = Format(Date, "dd-mm-yy")
NomFichier = "ReportD" & NomFichier & "_" & Format(Now, "hh-mm")
FichierExiste = IIf(fso.FileExists(NomFichier & ".xls"), True, False)
If FichierExiste = True Then
Application.Quit
End If
ActiveWorkbook.SaveAs Filename:=Chemin & NomFichier, FileFormat:=xlNormal
Range("A1").Select
End Sub
En ce qui concerne le code de Paritec
Sub copier()
Dim i&, fin&, li&, aa As Variant, a&, b&, y%, bb As Variant ' on définit les variables' Application.ScreenUpdating = False
Sheets.Add After:=Sheets(Sheets.Count) 'on ajoute une feuille count'
ActiveSheet.Name = Feuil1.Cells(10, 2) & "-" & Feuil1.Cells(12, 2) ' on la nomme'
fin = Feuil2.Range("A65000").End(xlUp).Row ' ?? je suppose que c'est définir la plage'
aa = Feuil2.Range("A1:R" & fin) ' de même avec aa ??'
For i = 1 To UBound(aa) ' 'et voilà c'est a partir de cette boucle que je ne comprends plus'
If Feuil1.Cells(10, 2) = aa(i, 1) Then a = i
If Feuil1.Cells(12, 2) = aa(i, 1) Then b = i
Next i
ReDim bb(UBound(aa), 2)
bb(a, 1) = aa(a, 1): bb(b, 1) = aa(b, 1)
y = 2
For i = 2 To 18
If aa(a, i) <> "" And aa(b, i) <> "" Then
ReDim Preserve bb(UBound(aa), y)
For li = 1 To fin
bb(li, y) = aa(li, i)
Next li
End If
y = y + 1
Next i
ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(UBound(aa), y - 1)) = bb
End Sub
J'ai déja vu le post de paritec qui parlait du même problème mais je n'arrive pas à comprendre comment il fonctionne. Si quelqu'un arriverai à m'expliquer .
https://www.excel-downloads.com/threads/macro-copiant-des-colonnes-sous-condition.143330/
Sinon voilà mon problème.
But : Copier les colonnes dans lesquelles la première ligne est "X". Les collers dans une nouvelle feuille excel. Que l'on nommera avec la date du jour dans le dossier dans lequel le fichier a été ouvert.
Les 2 problèmes: Le premier est que je ne trouve pas de moyen de copier les cellules à la condition de trouver un "X"
Le second problème: je ne trouve pas de moyen pour enregistrer le fichier dans le dossier d'ouverture
Je vous met ci-joint mon fichier avec mon avancement. Il ne fonctionne pas sous condition.
Voilà le code actuel
Sub ExportEnre()
'copie, créer'
Range("C:C,D,F:F,G:G").Select
Application.CutCopyMode = False
Selection.Copy
Workbooks.Add
Range("B1").Select
ActiveSheet.Paste
'enregistre'
Dim fso, Chemin, NomFichier, FichierExiste
Set fso = CreateObject("Scripting.FileSystemObject")
'//changer chemin'
Chemin = "C:\Documents and Settings\Mes documents\"
NomFichier = Format(Date, "dd-mm-yy")
NomFichier = "ReportD" & NomFichier & "_" & Format(Now, "hh-mm")
FichierExiste = IIf(fso.FileExists(NomFichier & ".xls"), True, False)
If FichierExiste = True Then
Application.Quit
End If
ActiveWorkbook.SaveAs Filename:=Chemin & NomFichier, FileFormat:=xlNormal
Range("A1").Select
End Sub
En ce qui concerne le code de Paritec
Sub copier()
Dim i&, fin&, li&, aa As Variant, a&, b&, y%, bb As Variant ' on définit les variables' Application.ScreenUpdating = False
Sheets.Add After:=Sheets(Sheets.Count) 'on ajoute une feuille count'
ActiveSheet.Name = Feuil1.Cells(10, 2) & "-" & Feuil1.Cells(12, 2) ' on la nomme'
fin = Feuil2.Range("A65000").End(xlUp).Row ' ?? je suppose que c'est définir la plage'
aa = Feuil2.Range("A1:R" & fin) ' de même avec aa ??'
For i = 1 To UBound(aa) ' 'et voilà c'est a partir de cette boucle que je ne comprends plus'
If Feuil1.Cells(10, 2) = aa(i, 1) Then a = i
If Feuil1.Cells(12, 2) = aa(i, 1) Then b = i
Next i
ReDim bb(UBound(aa), 2)
bb(a, 1) = aa(a, 1): bb(b, 1) = aa(b, 1)
y = 2
For i = 2 To 18
If aa(a, i) <> "" And aa(b, i) <> "" Then
ReDim Preserve bb(UBound(aa), y)
For li = 1 To fin
bb(li, y) = aa(li, i)
Next li
End If
y = y + 1
Next i
ActiveSheet.Range(ActiveSheet.Cells(1, 1), ActiveSheet.Cells(UBound(aa), y - 1)) = bb
End Sub
Pièces jointes
Dernière édition: