Supprimer colonne contenant valeur donnée

Fermé
Deepdurden - 20 avril 2009 à 12:20
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 - 22 avril 2009 à 13:42
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.
A voir également:

7 réponses

chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
20 avril 2009 à 15:46
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
Elle est présente dans une seule colonne (c'est un numéro de commande), et toujours sur la même ligne.
0
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
21 avril 2009 à 14:40
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
Bonjour.

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

Merci beaucoup.
0

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

Posez votre question
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
22 avril 2009 à 09:44
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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
22 avril 2009 à 10:00
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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 306
22 avril 2009 à 13:42
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