[VBA] Effacer une plage qui varie selon les onglets

nat54

XLDnaute Barbatruc
Bonjour,

Dans le fichier ci-joint je souhaiterais effacer les données
se trouvant dans le tableau de l'absentéisme prévisionnel.

Comme vous le voyez les onglets sont différents :
- 3580 : le tableau à effacer se situe de C25 à L72
- 3945 : le tableau à effacer se situe de C21 à L24

Point de départ du tableau : cellule ABScollage + 2 colonnes à droite (toujours colonne C)
Tableau final : dernière ligne complétée jusqu'à la colonne L

Comment réaliser cela ?

ps : cela me permettra tous les mois de repartir sur une trame vierge et de pouvoir y coller les nouveaux éléments

ps2 : il y a un code dans le fichier où je peux coller les nouvelles données
mais je dois d'abord effacer les anciennes !

Merci d'avance,

Nat
 

Pièces jointes

  • demande.xls
    68.5 KB · Affichages: 66
  • demande.xls
    68.5 KB · Affichages: 61
  • demande.xls
    68.5 KB · Affichages: 63

ERIC S

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Bonjour

en fait il te faut déceler le début de tableau sur chaque feuille

lignedeb = WorksheetFunction.Match("1. Effectifs", Range("C:C"), 0)

ensuite tu connais le nb de colonnes et tu sais que les données commencent 2 lignes en dessous et s'arrêtent en

lignefin = WorksheetFunction.Match("TOTAL POCPBU", Range("C:C"), 0) - 1

tu peux recomposer la plage à effacer
range("C" & lignedeb +2 & "G" & lignefin).clearcontents

pour les autres similaires sauf que pas de total donc lignefin du 2 c'est ligne deb -1 du 3
lignefin du 3 c'est ligne deb -1 du 4
lignefindu4 c'est range("C" & rows.count).end(xlup).row (dernière ligne écrite sur colonne C)



Note si tu nommes les cellules qui vont bien pour chaque tableau ex deb1 et Fin1, DE TETE :

range("C" & activesheet.range(deb1).row +2 & "G" & activesheet.range(fin1).row-1).clearcontents
 
Dernière édition:

nat54

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Re,

Merci,

Je pense avoir compris le principe
En résumé en début de module je définis
lignedeb1
lignefin1
lignedeb2
lignefin2
lignedeb3
lignefin3
lignedeb4
lignefin4

que je peux ensuite utiliser pour effacer mes données
voire même utiliser pour coller mes données
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Bonjour à tous

Une autre piste
Code:
Sub a()
Dim p As Range
Set p = Range("C25:L79")
p = Empty
'ou en nommant tes tableaux
'p.Name = "tableau1"
'[tableau1] = Empty
End Sub

Tu peux peaufiner la chose en créant des plages nommées dynamiques.
(voir les fils relatifs à cela dans les archives du forum)
 

ERIC S

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Bonjour Staple1600

quel temps fait-il à Roazhon ? A Bruz c'est nickel :rolleyes:

plus sérieux, j'aurais moins de dispo pour cause de congés à partir de ce soir, si tu peux suivre le fil...
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Re

-> ERIC S
Je suis déjà en congés ;) et donc pas sur Rennes
Je sais fichtrement pas quel temps il fait là-bas
Et ma présence sur XLD dépends du répit que m'offre mes 3 neveux qui préfèrent faire des cabanes ou aller à la plage et surement pas découvrir les joies d'Excel avec leur tonton.
(alors qu'ils se privent pas eux de m'initier à la DS avec leur pokémons (horreur) ;) )
 

ERIC S

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Re

Staple1600

je te confirme à 5kms au sud de Rennes il fait beau, et à Montgermont aussi donc à Rennes sans doute :cool:

je consulterai de toute façon, de temsp en temps

Bonnes vacances
 

nat54

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Bonjour,

Super la méthode d'Eric S, je rencontre tout de même un souci (enfin 2..)

VB:
Sub Construire_fiches()
FinTableauMapping = Sheets("Mapping").Range("A" & "65535").End(xlUp).Row
For i = 2 To FinTableauMapping
CodePole = Workbooks("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Sheets("Mapping").Range("a" & i).Value
' Déterminer les différents tableaux
Sheets("3580").Select
LigneDebut1 = WorksheetFunction.Match("1. Effectifs", Range("C:C"), 0) + 2
LigneFin1 = WorksheetFunction.Match("TOTAL POCPBU", Range("C:C"), 0) - 1
LigneDebut2 = WorksheetFunction.Match("2. Absences longues prévisionnelles (AT/LM/LD/MAT/MPRO)", Range("C:C"), 0) + 2
LigneFin2 = WorksheetFunction.Match("3. Entrées prévisionnelles", Range("C:C"), 0) - 2
LigneDebut3 = WorksheetFunction.Match("3. Entrées prévisionnelles", Range("C:C"), 0) + 2
LigneFin3 = WorksheetFunction.Match("4. Sorties prévisionnelles", Range("C:C"), 0) - 2
LigneDebut4 = WorksheetFunction.Match("4. Sorties prévisionnelles", Range("C:C"), 0) + 2
LigneFin4 = Range("C" & Rows.Count).End(xlUp).Row + 1
' Effacer les anciennes données
Range("C" & LigneDebut2 & ":L" & LigneFin2).ClearContents
Range("C" & LigneDebut3 & ":K" & LigneFin3).ClearContents
Range("C" & LigneDebut4 & ":K" & LigneFin4).ClearContents

''' ABSENTEISME PREVISIONNEL
' Filtrer sur le pôle en question dans le fichier Abs prev
    Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Abs_longues_prev_pour_fiche_synth.xls")
    Selection.AutoFilter Field:=1, Criteria1:=CodePole  'field 1 = colonne A, pôle XXXX
' Copier cette sélection
    Range("c2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
' Coller cette sélection dans le bon tableau
    Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
    Range("C" & LigneDebut2).Activate
    Selection.PasteSpecial Paste:=xlValues
''' ENTREES PREVISIONNELLES
' Filtrer sur le pôle en question dans le fichier Abs prev
    Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Entrées-prev_pour_fiche_synth.xls")
    Selection.AutoFilter Field:=1, Criteria1:=CodePole  'field 1 = colonne A, pôle XXXX
' Copier cette sélection
    Range("c2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
' Coller cette sélection dans le bon tableau
    Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
    Range("C" & LigneDebut3).Activate
    Selection.PasteSpecial Paste:=xlValues
   
''' SORTIES PREVISIONNELLES
' Filtrer sur le pôle en question dans le fichier Abs prev
    Workbooks.Open ("I:\DRH\EFFECTIF\Fiches_synthétiques_par_pôle\Sorties-prev_pour_fiche_synth.xls")
    Selection.AutoFilter Field:=1, Criteria1:=CodePole  'field 1 = colonne A, pôle XXXX
' Copier cette sélection
    Range("c2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
' Coller cette sélection dans le bon tableau
    Windows("FICHES_SYNTHETIQUES_DRH_par_pôle.xls").Activate
    Range("C" & LigneDebut4).Activate
    Selection.PasteSpecial Paste:=xlValues
 

Next
' Fermer les classeurs d'export
Windows("Abs_longues_prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
Windows("Entrées-prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
Windows("Sorties-prev_pour_fiche_synth.xls").Activate
ActiveWorkbook.Close False
End Sub

Problème n°1
Lorsque je filtre par exemple le fichier Entrées_prévisionnelles et que sur le pôle en question il n'y a pas d'entrée prévisionnelle, le "collage spécial" plante car bien sûr la plage est trop grande
comment tester et dire qqch comme "si le filtre ne donne rien sauter l'étape collage"

Problème n°2
Au tout début du code
sheets"3580".Select
comment variabiliser cela et dire de sélectionner l'onglet de la variable CodePole (pour la boucle)

Merci d'avance,
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Bonjour


J'ai bien vu que ERIC S m'avait missionné, mais comme tu sembles ne pas avoir tester ma proposition (voir plus bas dans le fil)
et comme je suis aussi en congés, je laisse le soin à ERIC S de continuer sa méthode ;)
J'attends donc de savoir ce tu penses de ma méthode avant d'aller plus loin ;)
 

nat54

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Re,

J'avais vu ta proposition et pensais avoir répondu...

Elle m'a paru beaucoup plus complexe et source de trop de recherches (plages dynamiques...)
En fait ma question a un peu rien à voir avec celle du début
c'est même pour ça que j'avais ouvert un autre fil
 

nat54

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

re,

mon message n'avait pas dû partir vendredi avant ma réunion...

oui c'est bien ce message en question
mes plages varient selon les onglets
donc je ne voyais pas comment adapter ton code

celui d'Eric S était plus simple à apprivoiser
 

ChTi160

XLDnaute Barbatruc
Re : [VBA] Effacer une plage qui varie selon les onglets

Bonsoir Nat
Bonsoir le Fil
Bonsoir les Vacanciers
en pièce jointe une approche

je me suis servis , pour traiter l'effacement des différentes plages , des Mots mis en colonne 1,"A"
"ABScollage" ,"ENTREEcollage","SORTIEcollage"
je n'ai pas regardé , ce qui concerne l'ouverture des différents Fichiers (que je n'ai pas) lol
donc voir la fonction qui pourrait être appelée , d'un Userform pour sélectionner hors mis les différents fichiers , les pages et les Plages à traiter .
dans le fichier remplir les différentes plages "ABScollage","ENTREEcollage",SORTIEcollage" avec le nombres de lignes voulues
Le Fichier : Regarde la pièce jointe demande-3.xls
Bonne fin de Soirée
Amicalement
Jean Marie
 

Discussions similaires