macro suppression colonne presque vide

Darnel

XLDnaute Impliqué
Bonjour a tout le forum

je cherche une pitite macro qui me permettrait de supprimer toutes les colonnes d'une base de donnée à condition que celles ci soient vides.
le problème c'est que la première ligne est toujours remplie par l'intitulé de ces colonnes

merci d'avance
 

Darnel

XLDnaute Impliqué
Bonjour et merci de t'interesser à mon problème


Non mon but est de faire un tri dans une base de donnée avec beaucoup de colonnes et de supprimer toutes les colonnes pour lesquelles il n'y a aucun aliment.
le truc c'est que je veu que ca le fasse automatiquement, sans avoir à effacer manuellement l'intitulé de la colonne

merci pour ce que tu pourra faire pour m'aider. :)
 

porcinet82

XLDnaute Barbatruc
Salut Darnel, salut Dan,

Essaye cette petite macro qui te supprime toutes les colonnes pour lesquelles la deuxième lignes est vides.

Code:
Sub sup_col()
Dim j As Integer

For j = Range('IV1').End(xlToLeft).Column To 1 Step -1
    If Cells(2, j).Value = '' Then
        Columns(j).Delete
    End If
Next j
End Sub

@+
 

Darnel

XLDnaute Impliqué
bonjour porcinet


merci pour ta proposition, mais ca me pose un problème quand même.
si une colonne est entièrement pleine d'infos, sauf la deuxieème ligne, ca me la vire quand meme, or moi, meme si il n'y a qu'une seul info dedans, je veu la garder.
en fait je pensais faire un truc du style:
si(toutes les colonnes)sont vides de la ligne 2 à la fin, supprimer colonne

C'est la que j'ai besoin d'aide parceque moi et le VBA pour l'instant c'est pas ca
je vien a peine de m y mettre
Merci a vous pour votre aide precieuse
 

porcinet82

XLDnaute Barbatruc
re,

Il fallait dire tout de suite, ca aurait été plus simple. A noter pour la prochaine fois qu'un petit exemple vaut mieux qu'un long discours.

Essaye avec cette macro et ca devrait fonctionner :

Code:
Sub sup_col_v2()
Dim j As Integer, i As Integer
Dim x As Boolean

x = False
For j = Range('IV1').End(xlToLeft).Column To 1 Step -1
    For i = 2 To Range('a65536').End(xlUp).Row
        If x = True Then Exit For
        If Cells(i, j).Value DIFF '' Then x = True
    Next i
    If x = False Then
        Columns(j).Delete
    End If
x = False
Next j
End Sub

@+

PS:Remplace DIFF par inférieur-supérieur
 

Darnel

XLDnaute Impliqué
Re


Merci pour ta réponse

Je te fait confiance sur le résultat à obtenir mais il y a un pitit problème de syntaxe apparemment:
la ligne


If Cells(i, j).Value DIFF '' Then x = True

ne semble pas bonne et je ne peu pas vraiment savoir d'ou vient le pblm

merci
 

Darnel

XLDnaute Impliqué
re et bonjour mutzik


merci a vous.

a ce propos, j'ai quelques questions peut etre un peu compliquées pour les réponses mais je tente:
que sont les booléén ?
sinon, dans les macro, quand elles commencent par Dim, ça entend quoi comme principe de fonctionnement.
je traduit ma question parceque j'ai une vague tendance très perceptible je crois à m'embrouiller et a etre pas clair a cause que je parle n'importe comment et que je fait des phrases super longues

donc traduction : If ... Else ...end If
égal:condition : Si... ou ... fin de condition

merci

Message édité par: darnel, à: 09/02/2006 16:48
 

porcinet82

XLDnaute Barbatruc
re, salut Mutzik,

Je ne suis pas trop doué pour les explications, mais je vais tout de meme essayé d'etre le plus clair possible.
Je te propose l'explication de la macro pas à pas (pour plus de clareté, copie colle sous vba) :

Code:
Sub sup_col_v2()
Dim j As Integer, i As Integer
'declaration des variables i et j en integer, cest a dire quils peuvent prendre de valeurs comprisent
'entre -32 768 et 32 767
Dim x As Boolean
'declaration de x en booléen, cad quil peut prendre les valeurs True ou False

x = False
'initialisation de x à False
For j = Range('IV1').End(xlToLeft).Column To 1 Step -1
'pour j allant de la derniere colonne non vide de la ligne 1 a la colonne 1 avec un pas de -1
    For i = 2 To Range('a65536').End(xlUp).Row
    'pour i allant de la ligne 2 a la derniere cellule non vide de la colonne A
        If x = True Then Exit For
        'si x vaut True alors je sors de la boucle for
        If Cells(i, j).Value DIFF '' Then x = True
        'si la cellule ligne i, colonne j est différente de vide alors x prend la valeur True
    Next i
    If x = False Then
    'si x vaut False alors
        Columns(j).Delete
        'la colonne j est supprimée
    End If
x = False
'on reinitialise x à False
Next j
End Sub

Je rajouterai en plus au cas ou ce ne serait pas tres clair que le Dim permet de declarer les variables presentent dans la macro.

Les Booléen permettent de faire un test logique VRAI/FAUX sur une variable.

Si je ne suis pas assez clair, refais signe, j'essairai de te donner de nouvelles explications.

@+
 

Dan

XLDnaute Barbatruc
Bonsoir,

eh bien j'arrive après la guerre on dirait ..; :)

Ben Mutsik, c'était bien le sens de ma question à Darmel car je me doutais que la colonne ne serait pas totalement vide et là son explication avec la ligne de titre m'a mis' la puce à l'oreille' en quelque sorte.

Bonne nuit

;)
 

Darnel

XLDnaute Impliqué
Bonjour
me revoila de bon matin

Tout d'abord merci beaucoup porcinet pour cette explication qui me convient parfaitement.
j'ai saisi grosso modo ce que cela signifiait, mais la, a cette heure, ca me dit pas trop de plonger dans le fonctionnement d'une macro.
j'ai compris les bases, je décortiquerait ca à une heure plus tardive.
Merci pour ce petit cour de VBA, c'est bien sympa

bonne journée et à plus
 

Discussions similaires

Statistiques des forums

Discussions
312 495
Messages
2 088 964
Membres
103 992
dernier inscrit
Christine 974