test si colonne vide à partir de la 2eme ligne - VB/VBA/VBS - Programmation
Marsh Posté le 28-02-2006 à 10:34:34
Bon ben j'ai réussi à trouver ca toute seule
mais le pb c'est que quand la deuxième cellule est vide et que les autres ne le sont pas ca m'efface quand meme la colonne
Worksheets("shares" ).Columns("B:B" ).Rows(2).Select
For Each Cell In Selection
If IsEmpty(Cell.Value) Then
Worksheets("shares" ).Columns("B:B" ).Delete
End If
Next Cell
Marsh Posté le 28-02-2006 à 11:41:54
Salut madilina,
au lieu de tester si chacune des cellules est vide tu peut tester si la première cellule vide est en ligne 2 en partant du bas de ton tableau :
(code à main levée)
Code :
|
En ajoutant une boucle for pour faire varier la colone tu devrais pouvoir passer ton tableau en revue.
@+
ps: ton code avec les balises serait plus lisible
Marsh Posté le 28-02-2006 à 11:50:28
désolée je suis novice pour les balises je ne sais pas si ca va marcher
j'ai pas trop compris ce que tu m'as proposé de faire
J'ai encore avancé depuis tout à l'heure mais c'est toujours le meme problème ca me supprime les colonnes qui ont la deuxième ligne vide alors qu'il y a du texte après
Code :
|
Il me semble que c'est la bouche qui pose problème
Marsh Posté le 28-02-2006 à 18:01:26
l'idée que je t'avançais est la suivante :
tu part de la ligne 65536 (limite d'excel), tu lui dis de remonter jusqu'à la première cellule vide.
si cette cellule est en ligne 2 c'est que toute tes cellules sauf la première donc tu supprime la colone.
Si c'est autre chose que 2 c'est qu'au moins une case est remplie donc tu ne supprime pas la colone.
ceci t'évite de tester le contenu de chacune de tes cellules.
En reprennant ton code ça donne ceci :
Code :
|
ps nickel les balises
Marsh Posté le 28-02-2006 à 18:15:02
Code :
|
Sur ton code ici ce qui ne marche pas
1- Worksheets("shares" ).Range("F2" ).Select
Selection.End(xlDown).Select
derniereligne = ActiveCell.Row
Worksheets("shares" ).Columns("F:F" ).Rows("2:" & derniereligne).Select
tu lui fait sélectionner soit la dernière cellule pleine si F2 est rempli soit la première cellule pleine si F2 est vide le tout en partant de la ligne 2 vers la ligne 65536.
2- If IsEmpty(cell.Value) Then
Worksheets("shares" ).Columns("F:F" ).Delete
End If
ici sur ta mauvaise plage dés qu'il rencontre une cellule vide il supprime la colone donc à chaque fois que F2 est vide la colone est supprimée. Si tu avais pris la plage maximun du tableau comme avec le F2:F1000 excel aurait également suprimé tout la colonne dès qu'il aurait reconté une seule cellule vide.
bon courage
Marsh Posté le 03-03-2006 à 15:36:19
Bon tout marche avec le code :
Code :
|
Seulement n'étant pas du tout calée, je fais ca pour chaque colonne, donc jusqu'à F voir plus et pour chaque feuille... Vous imaginez la taille du code.... il faudrait que je l'optimise en mettant une boucle ou en remplacant les noms de colonnes par des variables et appeler des fonctions mais je galère...
J'en ai marre je suis spécialisée réseau pas programmation
Marsh Posté le 04-03-2006 à 12:05:11
Madilina a écrit : Seulement n'étant pas du tout calée, je fais ca pour chaque colonne, donc jusqu'à F voir plus et pour chaque feuille... Vous imaginez la taille du code.... il faudrait que je l'optimise en mettant une boucle ou en remplacant les noms de colonnes par des variables et appeler des fonctions mais je galère... |
Salut madilina
Une fois de plus je reviens avec l'idée que pour optimiser ton code il vaut mieux ne pas tester chaque cellule de la plage mais tester pour chaque colonne le numéro de ligne de la première cellule vide.
Je ne sais pas comment ton code en plus peut fonctionner si ta cellule en ligne 2 est vide à mois que tu aie en plus rajouté un tri sur la colonne avant.
Si tu veux optimiser le taille de ton code et sa vitesse pour l'appliquer non seulement à toutes les colones de ton ta bleau mais aussi à toutes les feuilles de ton classeur (si j'ai bien compris tu intégre dans le même classeur plusieurs fichiers texte essaye donc ce code. Il est commenté, ça t'indiquera ce qu'il fait !
Code :
|
Taille du code seul 8 lignes, ça devrait te convenior mieux non ?
Sur ce, bonne lecture !
En espérant que tu en tienne compte.
Edit : orthographe
Marsh Posté le 06-03-2006 à 08:40:25
Merci beaucoup pour la structure de la boucle, reste plus qu'à compléter car pour l'intant ca ne marche pas, merci vraiment pour ton attention watashi, je vais essayer de faire comme toi... Pas de démotivation, mais c'est pas évident, surtout un lundi matin
Marsh Posté le 07-03-2006 à 10:17:59
Salut madilina,
Caz ne marche pas c'est un peu vague... Que fait le code sur ton tableau
Quel est le problème exact ?
Si tu précise plus on pourra t'aider mais sans informations concrètes c'est impossible .
@+
Marsh Posté le 07-03-2006 à 13:34:15
Bien le bonjour vous!
Alors c'est bon après pas mal de prise de tête ca marche correctement
Code :
|
Bon par contre je suis désolée je ne t'ai encore pas écoutée pour l'histoire de la deuxième ligne
Mais bon, le principal c'est que tout marche et que ca m'a enlevé une bonne centaine de lignes
Merci encore pour ton aide, ta boucle m'a beaucoup aidé!
J'ai pas encore tout a fait fini, il faut que je fasse la mise en page pour pouvoir ensuite imprimer le fichier Excel. Je pense que le plus dur est passé!
Encore merci!
A bientot
Marsh Posté le 28-02-2006 à 10:05:29
Bonjour à tous!
Je suis en bts IG option réseaux... Je suis en stage et je dois faire un bout de progr en VBA bien sur je galère pas mal... J'ai déjà pas mal avancé mais la, je bloque
Je fais un export de fichiers texte d'un logiciel (dameware).
Le but de la manoeuvre était de rassembler ces fichiers textes dans un classeur excel avec une feuille pour chaque fichier.txt. jusque là ca va, j'ai du redimmensionner les colonnes, supprimer celles dont on avait pas besoin jusque là ca va aussi, mais voilà ou ca se corse:
Dans les colonnes à supprimer il faut supprimer celles qui sont vides, seulement il ya toujours l'intitulé de la colonne ce qui fait qu'une bête commande ne marche pas puisqu'il trouve toujours une valeur dans la colones, donc comment faire pour chercher dans chaque colonnes de chaque feuilles et à partir de la deuxième ligne. Voilà le code ou j'en suis mais c'est pas très optimisé...
Worksheets("shares" ).Range("F2:F1000" ).Select
For Each Cell In Selection
If IsEmpty(Cell.Value) Then
Worksheets("shares" ).Columns("F:F" ).Delete
End If
Next Cell
j'attends vos conseils et votre aide d'avance merci