Supression d'un range de Colonne

Bonjour à tous,

Je n'arrive pas à faire un code me permettant de supprimer la colonne si "NoData" est présent dans la cellule. Le range des colonnes à supprimer est de "C:JG". De plus, j'aurais plusieurs feuilles avec cette problématique, au lieu de mettre le code dans la feuille en question, il vaut mieux le mettre dans un module afin qu'il soit exécuté dès que c'est le cas ?

PS : Quelle est la différence entre un module et "ThisWorkbook" pour l'éxécution d'un code ?

Merci beaucoup pour votre aide.

Fabien

Je ne sais pas comment va fonctionner ton fichier mais si tu supprime les colonnes, et que tu rajoute des data après, et bien elles ne n'implémenterons plus sauf à recréer une colonne.

Ce n'est peut être pas du tout ce que tu attends, mais en transposant le tableau, tu pourras appliquer un filtre qui te masquera automatiquement les cellules avec "nodata"

Avec ça, ton tableau reste dynamique si tu ajoute ou supprime de nouvelles lignes.

J'espère ne pas être trop à côté de la plaque avec cette proposition

Merci Bouli, justement j'ai un code qui ensuite remet les formules de C:JG, donc je souhaite vraiment bien supprimer toutes les colonnes "NoData" de C:JG.

à tester

à placer dans un module.

Pour que ça fonctionne, j'ai nommé ton tableau "T_" et nom de la feuil, comme ça le module le retrouve.

J'ai considéré que si Premium (%) via pricing C était en "nodata" il en était de même avec Premium (%) via pricing R. Si tel n'est pas le cas, il faut que tu rajoutes ligne2 en variable et un "or" dans ton if

Sub supprimer_colonnes()

Osheet = ActiveSheet.Name
prem_col = Sheets(Osheet).Range("T_" & Osheet).End(xlToLeft).Column
der_col = Sheets(Osheet).Range("T_" & Osheet).End(xlToRight).Column
ligne = Sheets(Osheet).Range("T_" & Osheet & "[Colonne1]").Find("Premium (%) via pricing C").Row

For i = der_col To prem_col Step -1
If Sheets(Osheet).Cells(ligne, i) = "NoData" Then Sheets(Osheet).Columns(i).EntireColumn.Delete
Next

End Sub

Dis moi si ça te convient

Edit : Je suis passé par un tableau structuré car je ne sais pas si le C:JG de tes tableau est valable sur toutes les feuilles...

Merci Bouli ! Je viens de tester ça marche mais ça répond pas exactement à ce que je souhaite car les "NoData" peuvent être partout (dans n'importe quelle ligne) dans toutes les feuilles de mon fichier excel dans les colonnes C à JG.

Hé hé je n'avais pas l'info ^^

dans ce cas

Sub supprimer_colonnes()

For i = 267 To 3 Step -1
For y = 5 To 20

If ActiveSheet.Cells(y, i) = "NoData" Then
    ActiveSheet.Columns(i).EntireColumn.Delete
    GoTo 1
End If

Next y
1
Next i

End Sub

Super merci beaucoup ! Problème résolu.

Petite question comment faire avec ce code pour mettre un range précis : C5:GJ500 par exemple, et ce code je dois le mettre dans chaque feuille ou juste dans le module ?

Re,

La sélection du range se fait avec

For i = 267 To 3 Step -1

For y = 5 To 20

ou i = numéro de colonne et y = numéro de ligne

la range C5:GJ500

correspond donc à

for i = 500 to 5 step -1

for y 3 to 192 où 3 correspond à la colonne C et 192 à GJ

Si tous tes tableaux ont la même forme (nombre de ligne/colonne) et le même emplacement tu peux rester sur ce code, sinon il faudra renommer ton tableau et appliquer le même procédure que dans mon premier code.

Ce code peut s'utiliser dans un module.

tu as deux solution pour celà :

  • Sois tu traite feuille par feuille dans ce cas, un bouton sur chaque feuille appelant la macro
  • Sois tu le fais par lots, et dans ce cas, il faut rajouter une boucle
Dim Ws As Worksheet

For Each Ws In Worksheets

    For i = 267 To 3 Step -1
        For y = 5 To 20
            If ws.Cells(y, i) = "NoData" Then
                    ws.Columns(i).EntireColumn.Delete
                    GoTo 1
            End If
        Next y
1
    Next i
next Ws

End Sub

Merci

Rechercher des sujets similaires à "supression range colonne"