boucle sur

C

carlos

Guest
Salut,

J'aimerais SIMPLIFIER la macro suivante par une boucle sur les Titres de 1 à 8 , du genre
For Titre = 1 to 8 etc ...

Sub Eliminer_champs_inutiles()

Application.ScreenUpdating = False

'Titre des entetes pour le choix des colonnes à conserver

'Sur la feuille"listes" :
Sheets("listes").Select

TITRE1 = Worksheets("listes").Cells(1, 4)
TITRE2 = Worksheets("listes").Cells(2, 4)
TITRE3 = Worksheets("listes").Cells(3, 4)
TITRE4 = Worksheets("listes").Cells(4, 4)
TITRE5 = Worksheets("listes").Cells(5, 4)
TITRE6 = Worksheets("listes").Cells(6, 4)
TITRE7 = Worksheets("listes").Cells(7, 4)
TITRE8 = Worksheets("listes").Cells(8, 4)

'Sur la feuille"f_ele" :
Sheets("F_ELE").Select
For i = 1 To 12
For La_colonne = 1 To 150
Le_Titre = Cells(1, La_colonne).Value
If Le_Titre <> TITRE1 And Le_Titre <> TITRE2 And Le_Titre <> TITRE3 And Le_Titre <> TITRE4 And Le_Titre <> TITRE5 And Le_Titre <> TITRE6 And Le_Titre <> TITRE7 And Le_Titre <> TITRE8 Then
Cells(1, La_colonne).EntireColumn.Delete
End If
Next
Range("A1").Select
Next

End Sub

C'est un peu embrouillé dans ma tete.
C peut etre normal le 1 janvier.

Merci
 
R

Robert

Guest
Salut Carlos, salut le forum,

Je te propose ta macro un peu modifiée :

Sub Eliminer_champs_inutiles()

Application.ScreenUpdating = False

'Titre des entetes pour le choix des colonnes à conserver

'Sur la feuille"listes" :
Sheets("listes").Select
Dim x As Byte 'déclare la variable x
Dim y As Byte 'déclare la variable y
Dim La_colonne As Byte 'déclare la variable La_colonne
Dim TITRE(8) As String 'déclare les variables TITRE()
'boucle sur les 8 titres
For x = 1 To 8
TITRE(x) = Worksheets("listes").Cells(x, 4) 'définit les variables TITRE()
Next x 'fin de la boucle
Sheets("F_ELE").Select
La_colonne = 1 'définit la variable La_colonne
For y = 1 To 150 'boucle sur 150 colonnes
Le_titre = Cells(1, La_colonne).Value
For x = 1 To 8 'boucle sur les 8 titres
'condition : si Le_titre = un des huit titres, va à la balise "suite"
'(sans supprimer la colonne)
If Le_titre = TITRE(x) Then GoTo suite
Next x 'prochain titre de la boucle
Cells(1, La_colonne).EntireColumn.Delete 'supprime la colonne
La_colonne = La_colonne - 1 'redéfinit la variable La_colonne
suite: 'balise "suite"
La_colonne = La_colonne + 1 'redéfinit la variable La_colonne
Next y 'prochaine colonne de la boucle
Range("A1").Select
Application.ScreenUpdating = True 'quand on désactive il est préférable le réactiver à la fin
End Sub

À plus,

Robert
 
C

carlos

Guest
EXXXCELLENT ..............................


Non seullement ca marche du premier coup mais en plus ca va 2 fois plus vite que ce que j'avais fait auparavant

Merci pour le cote didactique en bonus


Felicitations Robert
 
C

carlos

Guest
Comprendre le code proposé par Robert sur boucle

Bonjour,

Certaines choses m'echappe concernant cette macro qui marche tres bien ...

1 _ pourquoi la colonne n'est pas associée à y du genre: la_colonne = y ?

2 _ pourquoi si je rentre la formule ci dessus la_colonne = y au lieu de la_colonne = 1 alors y prend la valeur 0 malgre que y commence à 1 to 150?

Merci
 

Discussions similaires

Réponses
12
Affichages
537

Statistiques des forums

Discussions
311 711
Messages
2 081 782
Membres
101 817
dernier inscrit
carvajal