Excel 2007 supprimer colonne

Résolu
VG13 Messages postés 21 Statut Membre -  
VG13 Messages postés 21 Statut Membre -
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

10 réponses

  1. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  2. VG13 Messages postés 21 Statut Membre
     
    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
  3. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  4. VG13 Messages postés 21 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
    1. melanie1324 Messages postés 1561 Statut Membre 156
       
      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
  7. VG13 Messages postés 21 Statut Membre
     
    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
  8. melanie1324 Messages postés 1561 Statut Membre 156
     
    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
  9. VG13 Messages postés 21 Statut Membre
     
    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
  10. melanie1324 Messages postés 1561 Statut Membre 156
     
    bonjour,

    bien sur :

    il suffit que tu remplaces i=1 par i= 5
    et j = 1 par j = 2
    0
  11. VG13 Messages postés 21 Statut Membre
     
    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