Manipulation objet: designer une autre colonne ?

mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 3 oct. 2017 à 09:23 - Dernière réponse : mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention
- 7 nov. 2017 à 11:30
Bonjour,

Je ne maitrise pas du tout les codes objets et cherche à contrôler si une colonne est vide pour agir, mais je ne sais comment faire (ligne en gras).

Voici mon code:

Open "D:\Votants.csv" For Output As #1

For Each oL In Plage.Rows 'pour chaque ligne de la plage
if colonne Q de la même ligne est vide then 'si la colonne "Q" est vide faire
Tmp = ""
For Each oC In oL.Cells 'pour chaque colonne de ligne
Tmp = Tmp & CStr(oC.Text) & Sep
Next
Tmp = Left(Tmp, Len(Tmp) - 1) 'supression du dernier séparateur
Print #1, Tmp 'impression dans le fichier CSV
End If
Next
Close 'ferme le fichier CSV

Quelqu'un saura-t-il m'aider, svp?


Afficher la suite 

13 réponses

Répondre au sujet
yg_be 4165 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention - 3 oct. 2017 à 20:36
0
Utile
3
bonsoir, je suggère:
If oL.Cells(1, "Q") = Empty Then
mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 3 oct. 2017 à 21:15
bonsoir yg_be,

je te remercie pour le code . Néanmoins pourquoi le '1' ?
ne serait-ce pas '6' dans mon cas ? Car la plage va de la ligne 6 à la dernière.

J'aimerais comprendre la méthode 'oL.Cells'
yg_be 4165 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention > mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 3 oct. 2017 à 21:19
comme oL contient une ligne, oL.Cells(1, "Q") correspond à la colonne Q de la première ligne de cette ligne.
mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 3 oct. 2017 à 22:04
je l'ai mis ainsi:
For Each oL In Plage.Rows 'pour chaque ligne de la plage
If oL.Cells(1, "Q") = Empty Then

mais je n'ai pas le tri que je souhaite.
Commenter la réponse de yg_be
yg_be 4165 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention - 3 oct. 2017 à 22:36
0
Utile
1
tu n’obtiens pas ce que tu souhaites. qu’obtiens-tu? rien, trop, pas assez?
si tu supprimes le test, qu'obtiens-tu?
es-tu certain que Plage soit correct?
je te suggère d'ajouter
option explicit
en début de module.
tu ne montres qu'une partie de ton code, es-tu certain que le reste est correct?
mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 3 oct. 2017 à 22:49
en supprimant le test j'ai toutes les lignes de plage.
Avec le test j'ai la même chose.
mon code:

Sub ExporteCSV()
Dim Plage As Object, oL As Object, oC As Object, Tmp As String, chemin As String, Sep$

chemin = "D:\monfichier.xlsm"
Worksheets("Votes").Select
Sep = ","

'Définie la plage de recherche
Set Plage = ActiveSheet.Range("B6:C" & ActiveSheet.Range("C65000").End(3).Row)

'Crée dans emplacement nom du fichier CSV
Open "D:\Votants.csv" For Output As #1

For Each oL In Plage.Rows 'pour chaque ligne de la plage
If oL.Cells(1, "Q") = Empty Then 'si la colonne "Q" est vide faire sinon changer de ligne
Tmp = ""
For Each oC In oL.Cells 'pour chaque colonne de ligne
Tmp = Tmp & CStr(oC.Text) & Sep
Next
Tmp = Left(Tmp, Len(Tmp) - 1) 'supression du dernier séparateur
Print #1, Tmp 'impression dans le fichier CSV
End If
Next
Close 'ferme le fichier CSV
End Sub
Commenter la réponse de yg_be
yg_be 4165 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention - 3 oct. 2017 à 22:59
0
Utile
6
mieux ainsi?
If Plage.Parent.Cells(oL.Cells(1, 1).Row, "Q") = Empty Then

 
mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 7 nov. 2017 à 02:28
Bonjour,
Je reviens sur le sujet car je dois écrire un titre dans chaque colonne avant de récupérer les données.
j'ai utilisé :

Print #1, "Numéro de carte"
Print #1, Tag(2); "Numéro de lot"

La première instruction écrit bien sur la 1ere ligne 1ere colonne mais
la deuxième écrit sur la 2e ligne, 1e colonne, au lieu de 1ere ligne ligne et 2e colonne.

Comment puis-je y arriver svp?
yg_be 4165 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention > mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 7 nov. 2017 à 09:53
peut-être ainsi?
Print #1, "Numéro de carte" & Sep & "Numéro de lot"
mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 7 nov. 2017 à 10:08
bonjour,
le problème c'est qu'il faut que Numéro de Lot soit dans la 2e colonne car se fichier va être traité ensuite donc pas besoin de séparateur mais en plus le texte doit être identique.
yg_be 4165 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 16 décembre 2017 Dernière intervention > mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 7 nov. 2017 à 10:32
il serait sans doute utile que tu montres ton code.
mod77 1237 Messages postés vendredi 10 juillet 2009Date d'inscription 7 novembre 2017 Dernière intervention - 7 nov. 2017 à 11:30
Mon code est celui qui est au poste 6 mais ce n'est plus la peine ta solution fonctionne.

merci
Commenter la réponse de yg_be