Selectionner une plage entre deux variables et supprimer les données

Bonjour à tous,

Vous trouvez ci-joint un exemple de ma problématique.

L'objectif est de supprimer les infos de plusieurs colonnes.

Les colonnes à supprimer sont une plage entre 2 variables (ici 202406 et 202412), cette plage peut être évolutive dans le temps.

Une fois les colonnes sélectionnées, je dois supprimer toutes les données de ces colonnes.

Dans mon code de très novices, j'arrive à trouver la première variable et aller dans ma boucle jusqu'à la dernière.

Range("A3").Select
a = ActiveCell.Value
Range("A4").Select
b = ActiveCell.Value

Rows(3).Columns.Find(a, , xlValues).Select
' i = ActiveCell.Value
' Do While i <= b
' i = i + 1
' ActiveCell.Offset(0, 1).Select

Loop

Cependant je suis bloqué pour sélectionner cette plage et ensuite vider toutes les infos de ces colonnes.

merci pour votre aide

5classeur1.xlsx (9.86 Ko)

Bonjour à tous,

avec une formule

6classeur1.xlsx (13.45 Ko)

Merci pour votre retour,

Mon tableau s'alimente automatiquement, l'idée est d'incorporer ça dans la macro afin que l'utilisateur final n'est pas de tâche manuelle.

Cdt

Une proposition vba

4classeur1-2.xlsm (19.35 Ko)

Bonsoir à tous ,

Une autre macro. Cliquez sur le bouton Hop !

nota : J'ai pris comme hypothèse qu'il n'y avait aucune donnée sous la plage considérée. Si ce n'est pas le cas, veuillez joindre un fichier représentatif svp.

Le code agit sur la feuille de calcul active et il se trouve dans module1 :

Sub Hop()
Dim colA, colB, derlig&
   If Trim([a3]) = "" Or Trim([a4]) = "" Then MsgBox "Les deux bornes doivent être indiquées !", vbCritical: Exit Sub
   colA = 2 + Application.IfError(Application.Match([a3], Range("c3").Resize(, Columns.Count - 2), 0), 0)
   colB = 2 + Application.IfError(Application.Match([a4], Range("c3").Resize(, Columns.Count - 2), 0), 0)
   If colA < 3 Then MsgBox [a3] & " :   Non trouvé -> abandon !", vbCritical: Exit Sub
   If colB < 3 Then MsgBox [a4] & " :   Non trouvé -> abandon !", vbCritical: Exit Sub
   derlig = ActiveSheet.UsedRange.Row + ActiveSheet.UsedRange.Rows.Count - 1
   Range(Cells(4, colA), Cells(derlig, colB)).ClearContents
End Sub

Bonjour à tous,

Merci pour votre retour,

Saboh12617, j'ai compris le principe de votre macro, le tableau Résultat est un image du tableau du dessus après macro, pas un copier/coller des colonnes. Je vais essayer de m'en servir pour mon fichier d'origine.

@mafraise, la macro correspond à ce que je souhaite faire. En essayant de l'adapter à mon fichier d'origine, ça ne fonctionne pas,

En effet ma plage de données est un tableau. En transformant sur votre fichier la plage en tableau la macro ne marche plus non plus. ci-joint l'exemple

Cdt

Fabien

Bonjour,

Je vous conseille d'utiliser l'utilitaire d'enregistrement de macros pour votre dernière étape :

Sélectionnez le tableau créez puis copiez le et collez comme une image. Vous aurez un code fonctionnel et au besoin l'adaptation sera facile pour vous.

Re,

Je dois laisser le tableau car l'utilisateur l'actualise quand il le souhaite. Il y a une requête derrière

Cdt

Fabien

Bonjour fabpi35 ,

Voici une version adaptée à un tableau structuré. Les valeurs à trouver sont en A4 et A5.

Le code est toujours dans Module1.

Dans la ligne commençant par With , Il faut indiquer le nom du tableau structuré.

Sub Hop()
Dim t, v1, v2, i&, j&, k&
   With ActiveSheet.ListObjects("tableau1")        ' <-- nom du tableau structuré
      v1 = LCase(CStr([a4])): v2 = LCase(CStr([a5])): t = .Range.Rows(1)
      For i = 1 To UBound(t, 2)
         If LCase(CStr(t(1, i))) = v1 Or LCase(CStr(t(1, i))) = v2 Then Exit For
      Next i
      For j = UBound(t, 2) To 1 Step -1
         If LCase(CStr(t(1, j))) = v1 Or LCase(CStr(t(1, j))) = v2 Then Exit For
      Next j
      If i > j Then k = i: i = j: j = k
      Application.ScreenUpdating = False
      If i >= 1 And j <= .ListColumns.Count Then For k = i To j: .ListColumns(k).DataBodyRange.ClearContents: Next
   End With
End Sub

Re mafraise,

Merci, la macro fonctionne sur mon fichier.

Pouvez vous m'expliquer la démarche ? Pourquoi mettez vous les variables en Texte ?

Cdt

Re,

C'est juste pour être certain du type de données ( en fait je suis sans doute trop prudent ).

merci,

pouvez vous ajouter des commentaires sur les boucles et les formule type Ubound ?

cdt

Fabien

Re,

Oui bien sûr mais cela va demander un peu de temps.

A plus.

Dac, merci à vous

Bonjour à tous,

A quoi sert le deuxieme critere ? (202412)

dans le cas du tableau, il suffit de dire <202406.

C'est un exemple exhaustif ?

Crdlmt

Re,

Voici le classeur avec le code commenté.

Si vous avez des questions, n'hésitez à me les poser.

Pour l'utilisation de LBound et UBound, voyez le ce classeur (Module1)

Merci pour le temps passé, au top !

Rechercher des sujets similaires à "selectionner plage entre deux variables supprimer donnees"