Suppression de donnés toutes les 3 colonnes
Bonjour
Dans un tableau , je veux supprimer les données de colonnes mais toutes les 3 colonnes.
Pour la largeur du tableau, il commence en cellule U5 et se termine en CO5,
Pour la longueur du tableau (lignes), il est évolutif.
Je souhaite donc supprimer les données des colonnes U, X, AA, AD... ainsi de suite jusqu'à la fin du tableau.
Merci de votre aide.
Cdt
Fred.
Bonjour,
Il s'agit de supprimer les colonnes ou juste de supprimer le contenu ? Comme il n'y a pas vraiment de question dans ton post, je me demande ce que tu as réellement besoin ? Une méthode pour supprimer manuellement les données ? Une macro pour le faire automatiquement ?
Bonjour,
Bonjour Pedro22,
Essaie d'envoyer un fichier représentatif de tes données (pas besoin de 50.000 lignes).
Que l'on voit la structure des données (plage de cellules ou tableau, en-têtes de colonnes, etc...)
Cdlt.
Bonjour Fred, le forum,
je te propose ce fichier Excel :
Ctrl e ➯ travail effectué
Alt F11 pour voir le code VBA, puis revenir sur Excel
si besoin, tu peux demander une adaptation.
merci de me dire si ça te convient.
dhany
Bonjour Dhany
C'est exactement ce que je cherchais.
J'ai inséré ton code dans le code que j'avais.
Mais cela ne fonctionne pas.
Aussi dans le code joint, ton code doit replacer toute la première partie où je sélectionne toutes las plages à supprimer de manière individuelle.
Merci de ton aide.
le code :
Sub Import_CmD_X3()
Dim i, vsemaine As Integer
Dim varticle As String
Dim vqté As Long
Dim lig, col, ligArt, colSem As Integer
'MsgBox Ok + Annuler
MonAlerte = MsgBox("Opération irréversible. Souhaitez-vous continuez ?", vbOKCancel, "Mise à jour des commandes X3 ...")
If MonAlerte = vbCancel Then
Exit Sub
End If
Range("U5:U1000").Select
Range("U5:U1000,X5:X1000").Select
Range("U5:U1000,X5:X1000,AA5:AA1000").Select
Range("U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000").Select
Range("U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000,AG5:AG1000,AJ5:AJ1000").Select
Range( _
"U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000,AG5:AG1000,AJ5:AJ1000,AM5:AM1000,AP5:AP1000,AS5:AS1000" _
).Select
Range( _
"U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000,AG5:AG1000,AJ5:AJ1000,AM5:AM1000,AP5:AP1000,AS5:AS1000,AV5:AV1000,AY5:AY1000,BB5:BB1000,BE5:BE1000,BH5:BH1000" _
).Select
Range( _
"U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000,AG5:AG1000,AJ5:AJ1000,AM5:AM1000,AP5:AP1000,AS5:AS1000,AV5:AV1000,AY5:AY1000,BB5:BB1000,BE5:BE1000,BH5:BH1000,BK5:BK1000,BN5:BN1000,BQ5:BQ1000" _
).Select
Range( _
"U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000,AG5:AG1000,AJ5:AJ1000,AM5:AM1000,AP5:AP1000,AS5:AS1000,AV5:AV1000,AY5:AY1000,BB5:BB1000,BE5:BE1000,BH5:BH1000,BK5:BK1000,BN5:BN1000,BQ5:BQ1000,BT5:BT1000,BW5:BW1000,BZ5:BZ1000,CC5:CC1000" _
).Select
Range( _
"U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000,AG5:AG1000,AJ5:AJ1000,AM5:AM1000,AP5:AP1000,AS5:AS1000,AV5:AV1000,AY5:AY1000,BB5:BB1000,BE5:BE1000,BH5:BH1000,BK5:BK1000,BN5:BN1000,BQ5:BQ1000,BT5:BT1000,BW5:BW1000,BZ5:BZ1000,CC5:CC1000,CF5:CF1000,CI5:CI1000" _
).Select
Range( _
"U5:U1000,X5:X1000,AA5:AA1000,AD5:AD1000,AG5:AG1000,AJ5:AJ1000,AM5:AM1000,AP5:AP1000,AS5:AS1000,AV5:AV1000,AY5:AY1000,BB5:BB1000,BE5:BE1000,BH5:BH1000,BK5:BK1000,BN5:BN1000,BQ5:BQ1000,BT5:BT1000,BW5:BW1000,BZ5:BZ1000,CC5:CC1000,CF5:CF1000,CI5:CI1000" _
).Select
Selection.ClearContents
Range("U5").Select
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Sheets("DataExtract_TbDynCmDMP").Select ' Range("A2").Select
lig = 2
Do While Not IsEmpty(Cells(lig, 1))
vsemaine = Cells(lig, 1)
varticle = Cells(lig, 2)
vqté = Cells(lig, 7)
Sheets("STOCKS MP").Select
' recherche de la ligne correspondant à l'article ATTENTION la dernière ligne de la colonne article (colonne 2) doit se terminer par "FinListe"
' contrôle qu'il y a bien une cellule "FinListe" dans les 3000 premières lignes
i = 1
Do While i <= 3000 And Cells(i, 2) <> "FinListe"
i = i + 1
Loop
If i > 3000 Then
Rep = MsgBox("L'indication FinListe n'a pas été trouvée dans les 3000 premières lignes de la colonne B de la feuille STOCKS MP" & Chr(10) & "ABANDON DE LA MACRO", vbCritical)
End
End If
ligArt = 5 ' ligne contenant l'article
Do While Cells(ligArt, 2) <> "FinListe" And Cells(ligArt, 2) <> varticle
ligArt = ligArt + 1
Loop
If Cells(ligArt, 2) <> varticle Then
' MsgBox "Article " & varticle & " non trouvé"
Else
' recherche de la colonne correspondant à la semaine
colSem = 19 ' la recherche se fait à partir de la colonne T
Do While Not IsEmpty(Cells(2, colSem)) And Cells(2, colSem) <> vsemaine
colSem = colSem + 1
Loop
If Cells(2, colSem) <> vsemaine Then
' MsgBox "Semaine " & vsemaine & " non trouvée"
Else
' si on a trouvé l'article et la semaine correspondante, on copie la qté lue dans la feuille DataExtract colonne "COMM."
If colSem = 19 Then ' pour la 1ère semaine la colonne COMM. est 2 colonnes plus loin et 1 pour semaines les suivantes
Cells(ligArt, colSem + 2) = vqté
'Cells(ligArt, colSem + 2).Interior.ColorIndex = 2
Else
Cells(ligArt, colSem + 1) = vqté
'Cells(ligArt, colSem + 1).Interior.ColorIndex = 2
End If
End If
End If
Sheets("DataExtract_TbDynCmDMP").Select
lig = lig + 1
Loop
Sheets("STOCKS MP").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "Mise à jour des commandes X3 terminée ..."
End Sub
bonjour à tous
mon avis : ne JAMAIS supprimer de données
ajouter des colonnes pour les nouvelles données si nécessaire
note : il est déconseillé d'utiliser autant de colonnes
pourquoi en as-tu besoin ?
à quoi sert ton fichier ?
à te relire
Bonjour JMD
C'est un tableau de CBN.
Il s'agit d'un tableau qui prend en compte notamment des commandes.
Il évolue avec les semaines.
Une semaine écoulée... plus besoin des données de cette semaine, ou nouvelle commande donc nécessite une mise à jour du tableau.
Voilà pour l'explication.
Merci de ton intérêt.
Fred
CBN ? ? ?
note : des commandes ça s'enregistre par lignes. Sans JAMAIS rien effacer
on fait des TCD pour des vues par semaines/mois/années ou clients etc.
en pratique, il n'y a aucune formule, ni aucun VBA
sauf parfois des SEMAINE ISO()
amitiés
@Fred56
essaye ce code VBA :
Option Explicit
Sub Import_CmD_X3()
Dim MonAlerte As Integer, Rep As Integer
Dim varticle As String
Dim vqté As Long
Dim vsemaine As Integer
Dim lig As Long, ligArt As Long, i As Long
Dim col As Integer, colSem As Integer
'MsgBox Ok + Annuler
MonAlerte = MsgBox("Opération irréversible. Souhaitez-vous continuez ?", vbOKCancel, "Mise à jour des commandes X3 ...")
If MonAlerte = vbCancel Then Exit Sub
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
i = Cells(Rows.Count, "U").End(xlUp).Row - 4
If i > 1 Then
For col = 21 To 93 Step 3 'cols U à CO
Cells(5, col).Resize(i).ClearContents
Next col
End If
Range("U5").Select
Worksheets("DataExtract_TbDynCmDMP").Select ' Range("A2").Select
lig = 2
Do While Not IsEmpty(Cells(lig, 1))
vsemaine = Cells(lig, 1)
varticle = Cells(lig, 2)
vqté = Cells(lig, 7)
Worksheets("STOCKS MP").Select
' recherche de la ligne correspondant à l'article
' ATTENTION : la dernière ligne de la colonne article (colonne 2) doit se terminer par "FinListe"
' contrôle qu'il y a bien une cellule "FinListe" dans les 3000 premières lignes
i = 1
Do While i <= 3000 And Cells(i, 2) <> "FinListe"
i = i + 1
Loop
If i > 3000 Then
Rep = MsgBox("L'indication FinListe n'a pas été trouvée dans les 3000 premières lignes " _
& "de la colonne B de la feuille STOCKS MP" & Chr(10) & "ABANDON DE LA MACRO", vbCritical)
End
End If
ligArt = 5 ' ligne contenant l'article
Do While Cells(ligArt, 2) <> "FinListe" And Cells(ligArt, 2) <> varticle
ligArt = ligArt + 1
Loop
If Cells(ligArt, 2) <> varticle Then
' MsgBox "Article " & varticle & " non trouvé"
Else
' recherche de la colonne correspondant à la semaine
colSem = 19 ' la recherche se fait à partir de la colonne T
Do While Not IsEmpty(Cells(2, colSem)) And Cells(2, colSem) <> vsemaine
colSem = colSem + 1
Loop
If Cells(2, colSem) <> vsemaine Then
' MsgBox "Semaine " & vsemaine & " non trouvée"
Else
' si on a trouvé l'article et la semaine correspondante, on copie la qté lue dans la feuille DataExtract colonne "COMM."
If colSem = 19 Then ' pour la 1ère semaine la colonne COMM. est 2 colonnes plus loin et 1 pour semaines les suivantes
Cells(ligArt, colSem + 2) = vqté
'Cells(ligArt, colSem + 2).Interior.ColorIndex = 2
Else
Cells(ligArt, colSem + 1) = vqté
'Cells(ligArt, colSem + 1).Interior.ColorIndex = 2
End If
End If
End If
Worksheets("DataExtract_TbDynCmDMP").Select
lig = lig + 1
Loop
Worksheets("STOCKS MP").Select
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "Mise à jour des commandes X3 terminée ..."
End Subj'ai juste indenté ton code VBA, et inséré mon p'tit bout d'code VBA dans le tien ; rien d'plus :
n'ayant pas tes données, j'ai pas vérifié ton code VBA, et j'suppose qu'il est ok.
dhany
Dhany
Ok cela fonctionne parfaitement .
La procédure est plus rapide, c'est exactement ce que je cherché.
Merci beaucoup, je te souhaite une très bonne journée.
Cdt,
Fred
merci pour ton retour !
très bonne journée à toi aussi !
dhany