Exporter des données vers un ficher crée
bonjour a tous .je reviens vers vous encore une fois parce que ce forum était toujours à l’écoute avec ses membres réactives . merci à vous
j'ai un petit soucis avec mon code qu me lance un erreur d’exécution '9'. en fait je souhaite copier des lignes de la feuille DATA dont la colonne T est vide vers un autre ficher que je souhaite créer qui s'appel wb_sms_non_envoyes
voici mon code :
Sub extract()
Dim wb_sms_non_envoyes As Workbook
Dim nbLignes As Integer
Dim trig As Integer
' récupération nombre lignes non vides
' dans la page DATA pour extraire à partir de la ligne suivante
nbLignes = Sheets("DATA").Range("T104").End(xlUp).Row
Set wb_sms_non_envoyes = Workbooks.Add
With wb_sms_non_envoyes
.SaveAs Filename:=wb.Path & "wb_sms_non_envoyes" & ".xlsx"
End With
trig = 0
' boucle allant de 1 jusqu'à la dernière ligne non vide de la feuille DATA
For x = 1 To nbLignes
' si la cellule en T1 ... Tx est vide
' alors on copie la ligne entière dans le fichier wb_sms_non_envoyes
If Sheets("DATA").Cells(x, 20).Value = "" Then
Sheets("DATA").Cells(x, 20).EntireRow.Copy Destination:=wb_sms_non_envoyes("Feuille1").Cells(nbLignes + 1, 1).Offset(trig, 0).EntireRow
trig = trig + 1
End If
Next x
End Sub
quelqu'un pourra m'aider s'il vous plait ?
merci par avance
cordialement.
Bonjour,
A partir de cette instruction :
Set wb_sms_non_envoyes = Workbooks.Add
Ton nouveau classeur devient ton classeur actif. Attention donc, quand tu fais référence à Sheets("DATA") qui n'est pas présent sur ce nouveau fichier. Par ailleurs, chez moi les feuilles avant d'être renommées sont du genre "Feuil1" et non "Feuille1".
Bonjour Pedro .et merci pour votre réactivité . en fait j'ai pas bien compris ce qu'il faut exactement changer sur le code . pour le deuxième point je me suis trompé , c'est bien "Feuil1".
cdlt
Pour continuer :
- Ta variable trig est inutile car elle est égale à x - 1
- Le type de x n'est pas déclarée
- Tes syntaxes peuvent être simplifiées
Une proposition à tester :
Sub extract()
Dim WBsms As Workbook, LigMax As Integer, x As Integer
' récupération nombre lignes non vides dans la page DATA pour extraire à partir de la ligne suivante
With ThisWorkbook.Sheets("DATA")
nbLignes = .Range("T104").End(xlUp).Row
Set WBsms = Workbooks.Add
WBsms.SaveAs Filename:=ThisWorkbook.Path & "\wb_sms_non_envoyes.xlsx"
' boucle allant de 1 jusqu'à la dernière ligne non vide de la feuille DATA
For x = 1 To LigMax
' si la cellule en T1 ... Tx est vide alors on copie la ligne entière dans le fichier wb_sms_non_envoyes
If IsEmpty(.Cells(x, 20)) Then .Rows(x).Copy Destination:=WBsms.Sheets(1).Rows(LigMax + x)
Next x
End With
End Sub
pour que je vous facilite la compréhension ci dessous mon fichier et la macro se trouve dans la feuille 1
merci par avance
Bonjour Pedro .et merci pour votre réactivité . en fait j'ai pas bien compris ce qu'il faut exactement changer sur le code . pour le deuxième point je me suis trompé , c'est bien "Feuil1".
cdlt
Lorsque tu ne précises pas le classeur d'un objet, c'est considéré par défaut comme le classeur actif :
Sheets("MaFeuille").Range("A1")
'Revient à écrire :
ActiveWorkbook.Sheets("MaFeuille").Range("A1")
Lorsque tu crées un nouveau classeur avec Workbooks.Add, ce dernier devient le classeur actif. Quand tu écris :
Sheets("DATA").Cells(x, 20)
'Cela revient à :
ActiveWorkbook.Sheets("DATA").Cells(x, 20)
'Ou dit autrement à :
Workbooks("wb_sms_non_envoyes.xlsx").Sheets("DATA").Cells(x, 20)
Or ce nouveau classeur ne comporte pas de feuille appelée "DATA"...
Pour continuer :
- Ta variable trig est inutile car elle est égale à x - 1
- Le type de x n'est pas déclarée
- Tes syntaxes peuvent être simplifiées
Une proposition à tester :
Sub extract() Dim WBsms As Workbook, LigMax As Integer, x As Integer ' récupération nombre lignes non vides dans la page DATA pour extraire à partir de la ligne suivante With ThisWorkbook.Sheets("DATA") nbLignes = .Range("T104").End(xlUp).Row Set WBsms = Workbooks.Add WBsms.SaveAs Filename:=ThisWorkbook.Path & "\wb_sms_non_envoyes.xlsx" ' boucle allant de 1 jusqu'à la dernière ligne non vide de la feuille DATA For x = 1 To LigMax ' si la cellule en T1 ... Tx est vide alors on copie la ligne entière dans le fichier wb_sms_non_envoyes If IsEmpty(.Cells(x, 20)) Then .Rows(x).Copy Destination:=WBsms.Sheets(1).Rows(LigMax + x) Next x End With End Sub
merci bcp pour votre aide le code marche sans aucun soucis , mais je vois qu'il ne copie rien ???
merci bcp pour votre aide le code marche sans aucun soucis , mais je vois qu'il ne copie rien ???
Je n'ai pas ton fichier sous les yeux pour tester la macro, et pas la possibilité de la tester aujourd'hui de toute façon. Je te conseille de faire l'exécution pas à pas (F8) pour voir ce que fait la macro et les valeurs prises par les variables.
merci bcp pour votre aide le code marche sans aucun soucis , mais je vois qu'il ne copie rien ???
Je n'ai pas ton fichier sous les yeux pour tester la macro, et pas la possibilité de la tester aujourd'hui de toute façon. Je te conseille de faire l'exécution pas à pas (F8) pour voir ce que fait la macro et les valeurs prises par les variables.
Merci infiniment en tout cas .tes précisions été très utiles pour moi.
Merci infiniment en tout cas .tes précisions été très utiles pour moi.
Pas de quoi, n'hésite pas à transmettre la solution du problème si tu la trouve, et a indiquer que ton sujet est résolu.
Si ça ne fonctionne pas malgré tes tentatives, tu devras peut-être patienter un peu (en ce qui me concerne) ou compter sur qqn d'autre.
Merci infiniment en tout cas .tes précisions été très utiles pour moi.
Pas de quoi, n'hésite pas à transmettre la solution du problème si tu la trouve, et a indiquer que ton sujet est résolu.
Si ça ne fonctionne pas malgré tes tentatives, tu devras peut-être patienter un peu (en ce qui me concerne) ou compter sur qqn d'autre.
Oui d'accord , vous inquiétez pas ,merci encore une fois
cdlt
finalement j'ai pu résoudre mon problème ci-dessous le code :
Function sms_non_envoyes()
Dim str As String
Dim Dl2, x As Long
' récupération nombre lignes non vides dans la page DATA pour extraire à partir de la ligne suivante
With ws
Dl = ws.Range("T" & ws.Rows.Count).End(xlUp).Row
Set WBsms = Workbooks.Add
WBsms.SaveAs Filename:=ThisWorkbook.Path & "\SMS NON ENVOYES DU " & Format(Now(), "dd mm yy") & ".xlsx"
' boucle allant de 1 jusqu'à la dernière ligne non vide de la feuille DATA
For x = Dl To 1 Step -1
Dl2 = WBsms.Sheets(1).Range("A" & ws.Rows.Count).End(xlUp).Row
' si la cellule en T1 ... Tx est vide alors on copie la ligne entière dans le fichier wb_sms_non_envoyes
str = ws.Range("T" & x)
If ws.Range("T" & x) = "" Then
ws.Rows(x).Cut Destination:=WBsms.Sheets(1).Rows(Dl2 + 1)
ws.Rows(x).Delete
'suppression
End If
Next x
End With
WBsms.Save
WBsms.Close
End Function