Excel 2007 supprimer colonne

Résolu
VG13 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
VG13 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
mon précédent post n'ayant pas trouvé de succès je vais formuler autrement

Quelqu'un aurais-t'il une idée de macro pour garder sur un tableau (de colonnes ou ligne variable) que les colonnes où il y à la valeur 1 dans une cellule et bien entendu supprimer toutes les autres colonnes ?

Il me manque juste cette partie de code pour finir mon projet.

Merci


A voir également:

10 réponses

melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,

sub suppression ()

i=1

do while cells(i,1) <> "" ' tant que dans ta colonne A tu as une valeur
j=1
do while cells(i,j)<>"" 'tant que dans tes colonnes de la ligne itu as une valeur
if cells(i,j) <> 1 then 'si tu as dans ta colonnej et ligne i une valeur différente de 1, tu supprimes cette cellule
cells(i,j).select
Selection.Delete Shift:=xlToLeft
j=j-1
end if
j=j+1 'on va à la colonne suivante
loop
i=i+1 'on va à la ligne suivante
loop

end sub
0
VG13 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour Mélanie1324,

Merci pour ta réponse, j'ai testé ce matin ta boucle. Elle supprime toutes les cellules qui n'ont pas la valeur 1. Je me retrouve avec un tableau qu'avec des 1.

J'ai du mal m'exprimer sur mon post ce que je veux c'est garder les colonnes entières qui ont la valeur 1 dans au moins une de leur cellules et supprimer les colonnes qui n'ont pas la valeur 1 dans une cellule.
Exemple si dans la colonne A j'ai A1=0 A2=1 A3=0 il me garde toute la colonne A
Si a l'inverse dans la colonne B B1=0 B2=0 B3=0 alors il me supprime toute la colonne B car aucune cellule n'est = à 1

je joins un fichier pour mieux expliquer

http://www.cijoint.fr/cjlink.php?file=cj201105/cijrtoV6sS.xls

Je te remercie encore pour ta réponse

CDT
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Bonjour,

ok, je comprend smieux alors voici le code :

sub suppression ()

j=1

do while cells(1,j) <> "" ' tant que dans ta colonne A tu as une valeur
a=""
i=1
do while cells(i,j) <> "" 'tant que tu as une valeur dans la ligne i et la colonne j
if cells(i,j)= 1 then 'si la celule contient 1 alors la variable a = trouve
a="trouve"
end if
i=i+1
loop

if a ="" then
columns(i).select
Selection.Delete Shift:=xlToLeft
j=j-1
end if

j=i+1 'on va à la colonne suivante
loop

end sub
0
VG13 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
rebonjour Melanie1324

malheureusement cele ne fonctionne pas. la macro ne touche pas à mon tableau et elle sélectionne la colonne AG, j'arrive pas à comprendre pourquoi selon ton code elle va se positionner à ce niveau...

merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
re, copies ce code et appuies sur F8 et vois ce que ca fait. de temps en temps places ta souris sur a. normalement, sa valeur est "trouve" lorsque dans une cellule c'est 1.

sub suppression ()

j=1
cells(1,j).select
do while cells(1,j) <> "" ' tant que dans ta colonne A tu as une valeur
a=""
i=1

do while cells(i,j) <> "" 'tant que tu as une valeur dans la ligne i et la colonne j
cells(i,j).select
if cells(i,j)= 1 then 'si la celule contient 1 alors la variable a = trouve
a="trouve"
end if
i=i+1
loop

if a ="" then
columns(i).select
Selection.Delete Shift:=xlToLeft
j=j-1

end if

j=i+1 'on va à la colonne suivante
loop
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Si j'ai bien compris ton besoin, si dans la colonne A, il y a au moins une cellule égale à 1, on ne la supprime pas.
Ainsi de suite pour toutes les colonnes. si elle n'y touche pas c'est que tu dois avoir dans les colonnes un chiffre 1.
je ne peux pas accéder à ci-joint.fr. Si j'ai mal répondu mets moi deux trois lignes de ton tableau et le résultat attendu :
A b c d
1 1 0 0

résultat attendu/
???
0
VG13 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
oui tu as compris le besoin,

En effet je n'avais pas pensé mais dans mes entêtes de colonnes il y a des 1, il faudrait alors adapter la macro sur uniquement la valeur 1 unique et non 1021 (qui comprend aussi des 1) ou alors la faire démarrer à partir de B5 (ce complique!!!).

cependant même en supprimant les entêtes ce coup ci la macro ne supprime pas les colonnes escomptées et se place à la derniere colonne de mon tableau et tourne sans fin.
Ah non maintenant elle refait le premier résultat (cf message de 10H12).

tableau de départ
A B C D ...
1 0 0 1
0 0 1 0
1 0 1 0

Résultat attendu (colonne B supprimé car pas de 1)
A C D
1 0 1
0 1 0
1 1 0

Merci
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
Il y avait deux erreurs dans mon code maintenant ca devrait être bon :

Sub suppression()

j = 1
Cells(1, j).Select
Do While Cells(1, j) <> "" ' tant que dans ta colonne A tu as une valeur
a = ""
i = 1

Do While Cells(i, j) <> "" 'tant que tu as une valeur dans la ligne i et la colonne j
Cells(i, j).Select
If Cells(i, j) = 1 Then 'si la celule contient 1 alors la variable a = trouve
a = "trouve"
End If
i = i + 1
Loop

If a = "" Then
Columns(j).Select
Selection.Delete Shift:=xlToLeft
j = j - 1

End If

j = j + 1 'on va à la colonne suivante
Loop
End Sub
0
VG13 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
super merci ça fonctionne, C'est extra.

D'après-toi, est-il possible de lancer la boucle sans faire la recherche sur les entête de lignes et colonnes en gros faire la boucle à partir d'une cellule donnée (ici dans mon cas B5).

Je chercherde mon côté.

Tu m'as bien aidé sur ce coup.

Merci encore
0
melanie1324 Messages postés 1504 Date d'inscription   Statut Membre Dernière intervention   155
 
bonjour,

bien sur :

il suffit que tu remplaces i=1 par i= 5
et j = 1 par j = 2
0
VG13 Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Bein sur c'était évident... desfois on est vraimment trop nul !!!

MERCI t'est génial

Bon weekend

Je marque le post comme résolu
0