Excel 2007 supprimer colonne

Résolu/Fermé
VG13 Messages postés 20 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 20 mai 2011 - 19 mai 2011 à 14:52
VG13 Messages postés 20 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 20 mai 2011 - 20 mai 2011 à 15:43
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
19 mai 2011 à 16:51
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 mardi 15 mars 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 09:24
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
20 mai 2011 à 09:55
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 mardi 15 mars 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 10:12
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
20 mai 2011 à 11:25
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
20 mai 2011 à 11:29
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 mardi 15 mars 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 13:26
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
20 mai 2011 à 14:53
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 mardi 15 mars 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 15:08
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 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
20 mai 2011 à 15:38
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 mardi 15 mars 2011 Statut Membre Dernière intervention 20 mai 2011
20 mai 2011 à 15:43
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