Supprimer colonne contenant valeur donnée

Deepdurden -  
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
Je cherche à supprimer une colonne contenue dans une page si elle contient une valeur que j'ai préalablement rentrée sur une cellule prévue à cet effet, mais sur une autre page.
Je m'explique:
Je rentre 250 dans la cellule A1, feuil1.
Cette valeur est (une seule fois) dans la ligne 2 de la feuille 2.
J'aimerai que la macro trouve la colonne qui contient 250 (qui est systématiquement en ligne 2) et la supprime....

Merci d'avance pour votre aide. Et n'hésitez pas à demander des précisions, c'est plus facile à imaginer qu'à écrire.
Configuration: Windows Vista
Internet Explorer 7.0

7 réponses

  1. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Bonjour,

    ta valeur 250 est présente dans une seule colonne sur ta feuille2, ou bien elle peut être présente dans plusieurs colonnes de cette feuille ?
    0
  2. deepdurden
     
    Elle est présente dans une seule colonne (c'est un numéro de commande), et toujours sur la même ligne.
    0
  3. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Désolé j'avais codé une macro qui me semblait bonne mais en la lançant je me suis rendu compte que ma boucle était infinie :S J'essaierais de revoir ça ce soir, et de te donner un résultat convenable demain matin.

    Veux-tu que je te donne quand même ce que j'avais fait pour que tu puisses voir si tu peux résoudre ce petit problème par toi-même ? Ou bien préfères-tu attendre encore un peu ?
    0
  4. deepdurden
     
    Bonjour.

    Demain, ca serait parfait. Ca ne presse pas forcément.

    Merci beaucoup.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Voilà j'ai résolu mon problème, et finalement il n'y a pas besoin de boucle :

    Sub Macro1()
    ' Définition d'une variable
        Dim val_suppr As Integer
    ' Cette variable contient la valeur en A1 dans la feuille 1
        val_suppr = Sheets("Feuil1").Range("A1").Value
    ' La macro va sur la feuille 2
        Sheets("Feuil2").Select
    ' La macro effectue une recherche de la valeur, sachant que la valeur recherchée est la totalité du 
    ' contenu de la cellule
        Cells.Find(What:=val_suppr, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
    'lorsque la macro a trouvé la colonne, elle la supprime automatiquement et décale les autres colonnes vers la gauche
        Selection.Delete Shift:=xlToLeft
    End Sub
    


    Hier je t'ai parlé d'une boucle qui ne fonctionnait pas c'était pour justement tester que si tu avais une cellule où ta valeur était 32505, la macro ne devait pas la supprimer, et donc passer à la prochaine cellule où elle trouve une valeur contenant 250. Mais avec l'option LookAt:=xlWhole , tu précises que ce que tu cherches est la totalité du contenu de la cellule.

    Voilà j'espère que c'est assez clair sinon tu peux redemander des explications.
    0
  7. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Voilà la macro :

    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 21/04/2009 par ducrot
    '
    
    '
        Dim val_suppr As Integer
        val_suppr = Sheets("Feuil1").Range("A1").Value
        Sheets("Feuil2").Select
        Cells.Find(What:=val_suppr, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
        Selection.Delete Shift:=xlToLeft
    End Sub


    Cette macro regarde la valeur que tu as mis en A1 de la feuille 1, cherche EXACTEMENT cette valeur dans la feuille 2( grâce à LookAt:=xlWhole qui précise que ce que tu cherches est la totalité du contenu de la cellule, sinon ça plante), et lorsqu'elle a trouvé cette valeur, supprime la colonne et décale les suivantes vers la gauche (si ta valeur était en D, le contenu de la colonne E passe en D, celle de F passe en E etc.)

    Voilà, si tu as besoin d'autre chose n'hésite pas à demander.
    0
  8. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
     
    Voilà la macro (finalement pas besoin de boucle) :

    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 21/04/2009 par ducrot
    '
    
    '
        Dim val_suppr As Integer
        val_suppr = Sheets("Feuil1").Range("A1").Value
        Sheets("Feuil2").Select
        Cells.Find(What:=val_suppr, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
        Selection.Delete Shift:=xlToLeft
    End Sub


    Je voulais au début mettre une boucle, car si on suppose que tu avais une cellule contenant 32505, comment il y a 250 dans 32505, la macrocommande aurait pu supprimer la colonne contenant cette valeur. La boucle servait donc à tester la valeur de la cellule retournée par la recherche.

    l'option LookAt:=xlWhole permet de dire que ce que tu cherches est une cellule dont la totalité du contenu correspond à la valeur recherchée. Dans ce cas, la recherche ne te retournera pas la cellule contenant 32505.

    Voilà ^^ si tu as besoin d'autres informations n'hésite pas.
    0