badboy93120
Messages postés25Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 2 mai 2007
-
19 avril 2007 à 10:03
badboy93120
Messages postés25Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 2 mai 2007
-
24 avril 2007 à 17:56
Bonjour,
voilà mon problème: j'ai une ligne nommée header et l'autre footer.
et à chaque fois que dans header une cellule est non vide je nomme la colonne limitée par header et footer par la valeur de cette cellule.
Après avoir identifié la cellule non vide, c'est ici que je bloque.Plusieurs questions me viennent à l'esprit:
- j'aimerai selectionner la cellule non vide de header (ce que j'arrive à faire) mais est-il possible de rajouter une cellule dans une selection?
- et apès avoir selectionné comment la nommer
-pensez-vous que ma "méthode "est bonne?
voici une ébauche de mon programme:
Sub Macro1()
Dim Header As Range
Dim Footer As Range
Dim Cellule As Range
Set Header = Range("B4:R4")
Set Footer = Range("B14:R14")
Dim repere As Integer
repere = 0
For Each Cellule In Header
repere = repere + 1
badboy93120
Messages postés25Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 2 mai 2007 19 avril 2007 à 11:08
je vous envoie ce que j'ai fait jusqu'à présent mais apparement cela ne marche pas:
Sub Macro1()
Dim Header As Range
Dim Footer As Range
Dim Cellule As Range
Set Header = Range("A4:D4")
Set Footer = Range("A14:D14")
Dim diff As Integer
Dim colonne As Range
Dim test As Range
Dim yo As Range
Dim nom As String
Dim repere As Integer
For Each Cellule In Header
If Not IsEmpty(Cellule) Then
repere = 0
nom = Cellule.Value()
Do
repere = repere + 1
Set test = Cells(Cellule.Row + repere, Cellule.Column)
Set yo = Cells(Cellule.Row + repere + 1, Cellule.Column)
Set colonne = Union(Cellule, test)
Loop While Application.Intersect(yo, Footer) Is Nothing
colonne.Select
ActiveWorkbook.Names.Add Name:=nom, RefersTo:=Selection.Address
End If
Next Cellule
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 20 avril 2007 à 00:09
Désolé, mais je ne comprend pas très bien ta quetion...je pense.
Tu crées une sélection pour Header, du genre Range("B4:R4")
Si tu veux changer cette sélection pour Range("B4:S4"), ça me paraît compliqué sans définir une nouvelle lettre.
.
Il vaudrait mieux passer par quelque chose comme
Set Header = Range(Cells(4, 2), Cells(4, 18))
où 18 peux être changé par une variable
NewColumn = 21
Set Header = Range(Cells(4, 2), Cells(4, NewColumn))
Est-ce que ça t'aide dans ton problème ?
MPi
Vous n’avez pas trouvé la réponse que vous recherchez ?
badboy93120
Messages postés25Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 2 mai 2007 20 avril 2007 à 08:43
Non ce n'est pas cela mon problème: je reexplique en faite je nomme sous excel une ligne header et une autre( en dessous pas forcément juste en dessous) footer qui me permettront de délimiter mon tableau. Ensuite, je parcours la ligne header et il ya 2 possibilités:
si c'est une case vide alors on passe à la prochaine cellule de header sinon on nomme la colonne (par ce qui est dans la cellule de header)partant de la ligne header et se terminant de footer.
voila ce que j'ai fait :
Sub Button1_Click()
Dim test As Range
Dim nom As String
Dim repere As Integer
For Each Cellule In Range("header")
If Not IsEmpty(Cellule) Then
repere = 0
nom = Cellule.Value()
Set colonne = Cellule
Do
repere = repere + 1
Set test = Cells(Cellule.Row + repere, Cellule.Column)
Loop While Application.Intersect(test, Range("footer")) Is Nothing
Cellule.Offset(1, 0).Resize(repere, 1).Name = CStr(nom)
'Cellule.Offset(1, 0).Resize(repere, 1).Select
'ActiveWorkbook.Names.Add Name:=nom, RefersTo:=Selection.Address
End If
Next Cellule
End Sub
Par contre mon soucis, c'est que cela ne marche pas si dans la case header je trouve j-1 ou des mots separé par des espaces (il veut surment des string...) avez vousun moyen de contourner ce porblème?
cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 20 avril 2007 à 11:16
OK, je vois.
En utilisant l'enregistreur de macro, j'ai fait 3 tests avec les valeurs de header suivantes:
"a", "b c", "j - 1"
Voici ce que ça donne
Range("A1:A6").Select
ActiveWorkbook.Names.Add Name:= "a", RefersToR1C1:="=Feuil1!R1C1:R6C1"
Range("B1:B6").Select
ActiveWorkbook.Names.Add Name:=" b_c ", RefersToR1C1: ="= Feuil1!R1C2:R6C2"
Range("C1:C6").Select
ActiveWorkbook.Names.Add Name:=" j___1 ", RefersToR1C1: ="=Feuil1!R1C3:R6C3"
C'est donc dire qu'Excel ne considère pas certains caractères et les remplace par un caractère souligné. Même chose pour les espaces.
Il faudrait donc faire des tests sur les différents caractères que pourrait contenir tes headers et faire le remplacement à l'aide de Replace, je pense.
badboy93120
Messages postés25Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 2 mai 2007 20 avril 2007 à 13:38
En gros, ce n'est pas possible de garder tel quel le contenu de header... il faut passer par une transformation donc....je pensais qu'il peut avoir une petite astuce pour contourner ce problème.
badboy93120
Messages postés25Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 2 mai 2007 20 avril 2007 à 14:24
voilà ce que je propose:
Sub Button1_Click()
Dim Header As Range
Dim test As Range
Dim nom As String
Dim nomtransf As String
Dim repere As Integer
Dim Cellule As Range
Dim i As Integer
For Each Cellule In Range("header")
If Not IsEmpty(Cellule) Then
repere = 0
nom = Cellule.Value()
nomtransf = Replace(nom, " ", "")
nomtransf = Replace(nomtransf, "+", "plus")
nomtransf = Replace(nomtransf, "-", "moins")
nomtransf = Replace(nomtransf, "%", "pc")
nomtransf = Replace(nomtransf, "(", " ")
nomtransf = Replace(nomtransf, ")", " ")
Set colonne = Cellule
Do
repere = repere + 1
Set test = Cells(Cellule.Row + repere, Cellule.Column)
Loop While Application.Intersect(test, Range("footer")) Is Nothing
Cellule.Offset(1, 0).Resize(repere, 1).Name = CStr(nomtransf)
End If
Next Cellule
End Sub
y a t il une manière plus élégante de le faire? et comment gérer le cas "saut de ligne" ?
merci
badboy93120
Messages postés25Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention 2 mai 2007 23 avril 2007 à 13:05
ok merci apparement cela marche...par contre j'ai essayer de remplacer tous les "replace" par une fonction" "remp" mais j'ai un message d'erreur "erreur de compilation: fonction ou variable attendue" voila mon code
Dim test As Range
Dim nom As String
Dim nomtransf As String
Dim repere As Integer
Dim Cellule As Range
Dim i As Integer
For Each Cellule In Range("header")
If Not IsEmpty(Cellule) Then
repere = 0
nom = Cellule.Value()
nomtransf = remp(nom)
Set colonne = Cellule
Do
repere = repere + 1
Set test = Cells(Cellule.Row + repere, Cellule.Column)
Loop While Application.Intersect(test, Range("footer")) Is Nothing
Cellule.Offset(1, 0).Resize(repere, 1).Name = CStr(nomtransf)