Problème pour définir une zone[Résolu]

fenec

XLDnaute Impliqué
Bonjour le forum

Décidément je n’ai pas de chance avec mon projet, en effet je suis de nouveau confronté à un problème que je n’avais encore jamais rencontré avec excel.

Je m’explique :
Dans mon calendrier je renseigne mes divers pointage de : CP-RTT-DIF-RCN etc.…
Pour nettoyer celui-ci en vba, je voulais définir un nom pour les cellules concernées mais je ne peux prendre que 10colonnes. Auriez vous une idée ou tout simplement est-on limité à un nombre de cellules ?

Cordialement

Philippe
 

Pièces jointes

  • Exemple Calendrier forum.xls
    129.5 KB · Affichages: 64
Dernière édition:

natorp

XLDnaute Accro
Re : Problème pour définir une zone

Bjr Fenec

Est-ce que la macro2 peut convenir à votre besoin ?

Cordialement, Gérard
 

Pièces jointes

  • test.xls
    127.5 KB · Affichages: 46
  • test.xls
    127.5 KB · Affichages: 53
  • test.xls
    127.5 KB · Affichages: 45

job75

XLDnaute Barbatruc
Re : Problème pour définir une zone

Bonjour fenec,

On n'est pas limité par le nombre de cellules mais par le nombre de caractères de la formule.

[Edit] 255 caractères en comptant le signe =.

1) Défusionnez d'abord les cellules de la ligne 2 de la feuille "Calendrier".

2) Définissez ensuite le nom zone_a_remplir par :

Code:
=Calendrier!$D:$D;Calendrier!$G:$G;Calendrier!$J:$J;Calendrier!$M:$M;Calendrier!$P:$P;Calendrier!$S:$S;Calendrier!$V:$V;Calendrier!$Y:$Y;Calendrier!$AB:$AB;Calendrier!$AE:$AE;Calendrier!$AH:$AH;Calendrier!$AK:$AK
Il passe bien car plus court (212 caractères dans la formule).

Vous pouvez sélectionner la zone par la touche F5 et l'effacer si vous voulez. Et en VBA :

Code:
[zone_a_remplir].ClearContents
Edit : salut natorp, je ne t'avais pas vu :)

A+
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : Problème pour définir une zone

Re,

Si l'on ne veut pas défusionner les cellules de la ligne 2 :

- définir le nom T par =Calendrier!$B$3:$AK$33

- et le nom zone_a_remplir par (153 caractères) :

Code:
=INDEX(T;;3);INDEX(T;;6);INDEX(T;;9);INDEX(T;;12);INDEX(T;;15);INDEX(T;;18);INDEX(T;;21);INDEX(T;;24);INDEX(T;;27);INDEX(T;;30);INDEX(T;;33);INDEX(T;;36)
A+
 

fenec

XLDnaute Impliqué
Re : Problème pour définir une zone

Bonsoir le forum, natorp

Si j’intègre ta solution à mon code j’ai :
Erreur d’excécution ‘1004’ :
Erreur définie par l’application ou par l’objet

Code:
Sub Insereligne()
 Dim code, c, cel As Range
 code = Array("D712", "D727") 'les codes à traiter
 Application.ScreenUpdating = False
 Application.DisplayAlerts = False 'à cause des formules de liaison tordues...
 For Each c In code
   Set cel = [B:B].Find(c, , xlValues, xlWhole, , xlPrevious)
   If Not cel Is Nothing Then
     cel(2).Resize(, 12).Insert xlDown
     cel.Resize(, 12).Copy cel(2)
     cel.Resize(, 12) = cel.Resize(, 12).Value 'supprime les formules
     cel(2, 4) = DateAdd("yyyy", 1, cel(2, 4))
     cel(2, 5) = DateAdd("yyyy", 1, cel(2, 5))
   End If
 Next
 Cells(4, 2) = Cells(4, 2) + 1

 Sheets("Calendrier").Select Range("D3:D33,G3:G33,J3:J33,M3:M33,P3:P33,S3:S33,V3:V33,Y3:Y33,AB3:AB33,AE3:AE33,AH3:AH33,AK3:AK33").Select
    Selection.ClearContents
    Selection.Interior.ColorIndex = xlNone

End Sub

A+
 

fenec

XLDnaute Impliqué
Re : Problème pour définir une zone

Bonsoir Job75
Déjà merci une fois de plus pour me tendre la main.
Par ta réponse tu m’as déjà appris une chose que je ne savais pas
On n'est pas limité par le nombre de cellules mais par le nombre de caractères de la formule.
Par contre si j’applique ta solution comme ceci, je perds la MFC lors d’une saisi

Code:
Sub Insereligne()
 Dim code, c, cel As Range
 code = Array("D712", "D727") 'les codes à traiter
 Application.ScreenUpdating = False
 Application.DisplayAlerts = False 'à cause des formules de liaison tordues...
 For Each c In code
   Set cel = [B:B].Find(c, , xlValues, xlWhole, , xlPrevious)
   If Not cel Is Nothing Then
     cel(2).Resize(, 12).Insert xlDown
     cel.Resize(, 12).Copy cel(2)
     cel.Resize(, 12) = cel.Resize(, 12).Value 'supprime les formules
     cel(2, 4) = DateAdd("yyyy", 1, cel(2, 4))
     cel(2, 5) = DateAdd("yyyy", 1, cel(2, 5))
   End If
 Next
 Cells(4, 2) = Cells(4, 2) + 1
 Sheets("Calendrier").Select
 [zone_a_remplir].ClearContents
 [zone_a_remplir].Interior.ColorIndex = xlNone
 End Sub

A+

Philippe
 
Dernière édition:

fenec

XLDnaute Impliqué
Re : Problème pour définir une zone

Bonjour le forum, Job75

En fait avec votre solution du post 5 fonctionne très bien j’avais simplement fait une erreur de plage dans mon fichier final

Que vient faire ici ce code que je vous ai donné sur un autre fil ???
Pour répondre à votre question, tout simplement parce que le calendrier est en rapport avec mes formules tordues donc en rajoutant à votre code :

Code:
Cells(4, 2) = Cells(4, 2) + 1 ’je change la date du calendrier
Sheets("Calendrier").Select
[zone_a_remplir].ClearContents
[zone_a_remplir].Interior.ColorIndex = xlNone

Je nettoie mon calendrier et ainsi les nouveaux congés pointés se comptabilisent dans le tableau de l’autre fil dans la ligne insérée.

Encore merci

Cordialement

Philippe
 

job75

XLDnaute Barbatruc
Re : Problème pour définir une zone[Résolu]

Bonjour fenec,

Cela dit s'il n'est utilisé qu'une fois en VBA le nom "zone_a_remplir" est bien inutile.

Le nom défini T (post #5) suffit :

Code:
Sub RAZ()
Dim zone As Range, i As Byte
Set zone = [T].Columns(3)
For i = 6 To 36 Step 3
  Set zone = Union(zone, [T].Columns(i))
Next
zone.ClearContents
zone.Interior.ColorIndex = xlNone
End Sub
La macro RAZ sera appelée chaque fois que de besoin.

A+
 

Statistiques des forums

Discussions
312 166
Messages
2 085 886
Membres
103 018
dernier inscrit
mohcen23