Probleme Range en VBA
Résolu
Tydher
Messages postés
127
Statut
Membre
-
Bidouilleu_R Messages postés 1209 Statut Membre -
Bidouilleu_R Messages postés 1209 Statut Membre -
Bonjour une fois de plus à tous.
Apres avoir recuperer des valeurs dans mes variables je souhaite faire un traitement en utilisant un Range :
Cependant, il ne marche pas et j'ai une erreur de type :
La methode Range de l'objet Global .....
Merci
Apres avoir recuperer des valeurs dans mes variables je souhaite faire un traitement en utilisant un Range :
Range("indexG:indexQte,indexJalons:indexJalons,indexCI:indexRemarques-1,indexIRP:indexCE+1").Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.MergeCells = False
End With
Cependant, il ne marche pas et j'ai une erreur de type :
La methode Range de l'objet Global .....
Merci
9 réponses
Up,
Ca ne marche toujours pas, pourtant en faisant comme ci-dessous ça fonctionne
Merci
Ca ne marche toujours pas, pourtant en faisant comme ci-dessous ça fonctionne
Range("A1:L3,M8:BS4...")
Merci
Bonjour,
d'abord on ne sait pas ce que contient les variables indexG....
Range("indexG:indexQte,indexJalons:indexJalons,indexCI:indexRemarques-1,indexIRP:indexCE+1").Select
mais au vu de cette ligne ....
Range("A1:L3,M8:BS4...")
Je te propose ceci
explication : maListe contiendra "A1,b4,E2"
alors que chez toi il y a "A1","b4","E2" ;-)
une autre possibilité serait d'utiliser la méthode Cells (ligne,colonne)
d'abord on ne sait pas ce que contient les variables indexG....
Range("indexG:indexQte,indexJalons:indexJalons,indexCI:indexRemarques-1,indexIRP:indexCE+1").Select
mais au vu de cette ligne ....
Range("A1:L3,M8:BS4...")
Je te propose ceci
Sub test1() Dim index1 As String Dim index2 As String Dim index3 As String Dim maListe As String index1 = "A1" index2 = "b4" index3 = "E2" maListe = index1 + "," + index2 + "," + index3 Range(maListe).Select End Sub
explication : maListe contiendra "A1,b4,E2"
alors que chez toi il y a "A1","b4","E2" ;-)
une autre possibilité serait d'utiliser la méthode Cells (ligne,colonne)
En fait le probleme viens du fait que je ne connais pas les valeurs de mes index, car selon les feuille excel, les index seront differents.
Je fait juste avant le Range une boucle qui me récupere un int.
Ce int correspond au numéro de ma colonne.
Apres je veux donc selectionné mes colonne selon les int stockés dans mes variables
Je fait juste avant le Range une boucle qui me récupere un int.
Ce int correspond au numéro de ma colonne.
Apres je veux donc selectionné mes colonne selon les int stockés dans mes variables
Il faudrait en fait donc que j'associe la cellule A1, par exemple, à ma variable indexX.
Sauf que si je fait :
indexX = Cells(1,i)
l'index récupere ce qui se trouve dans la cellule et non l'emplacement
Sauf que si je fait :
indexX = Cells(1,i)
l'index récupere ce qui se trouve dans la cellule et non l'emplacement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
J'ai modifié le type de mes variables en String et j'ai rajouté dans ma boucle :
[CODE]...
indexG = Cells(1,i).Address
...[/CODE]
Cependant j'en suis toujours au même point.
Erreur : la methode Range de l'objet _globlal a echoué
[CODE]...
indexG = Cells(1,i).Address
...[/CODE]
Cependant j'en suis toujours au même point.
Erreur : la methode Range de l'objet _globlal a echoué
fais voir ce que tu as écris dans ta procédure ce sera plus simple.
sinon je te fais un exemple de sélection de trois plage avec Range ou cells.
sinon je te fais un exemple de sélection de trois plage avec Range ou cells.
Ok voila le code, mes index sont déclarés en String. En commentaire apparait un peu tout ce que j'ai essayé
i = 1
For j = 1 To nombreColonne
entete = Cells(1, j).Value
If (entete = "G") Then
indexG = Cells(1, i).Address
ElseIf (entete = "QTE") Then indexQte = Cells(1, i).Address
ElseIf (entete = "J") Then indexJ = Cells(1, i).Address
ElseIf (entete = "CI") Then indexCI = Cells(1, i).Address
ElseIf (entete = "Engagement") Then indexEngagement = Cells(1, i).Address
ElseIf (entete = "REMARQUES") Then indexRemarques = Cells(1, i - 1).Address
ElseIf (entete = "CE") Then indexCE = Cells(1, i).Address
End If
i = i + 1
Next j
'------------------------------------------------------------------------
'UNMERGE des cellules de la 1ere ligne
'-----------------------------------------------------------------------
'Range("indexG:indexQte,indexJ:indexJ,indexCI:indexEngagement,indexRemarques:indexCE").Select
'Range(indexG, indexQte).Select
'Range(Cells(indexG), Cells(indexQte)).Select
Set c = Union([indexG:indexQte], [indexJalons:indexJalons], [indexCI:indexEngagement], [indexRemarques:indexCE]).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.MergeCells = False
End With
Suite a mes recherches et discussions sur un autre forum, j'ai réussi en mettant mes variables index en type Object. Et en modifiant un peu ma boucle j'ai donc :
Merci beaucoup
i = 1
For j = 1 To nombreColonne
entete = Cells(1, j).Value
If (entete = "G") Then
set indexG = Cells(1, i)
ElseIf (entete = "QTE") Then set indexQte = Cells(1, i)
ElseIf (entete = "J") Then set indexJ = Cells(1, i)
ElseIf (entete = "CI") Then set indexCI = Cells(1, i)
ElseIf (entete = "Engagement") set Then indexEngagement = Cells(1, i)
ElseIf (entete = "REMARQUES") set Then indexRemarques = Cells(1, i - 1)
ElseIf (entete = "CE") Then set indexCE = Cells(1, i)
End If
i = i + 1
Next j
'------------------------------------------------------------------------
'UNMERGE des cellules de la 1ere ligne
'-----------------------------------------------------------------------
Union(Range(indexG, indexQte), Range(indexJ, indexJ), Range(indexCI, indexEngagement), Range(indexRemarques, indexCE)).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.MergeCells = False
End With
Merci beaucoup
Pour ceux qui liront ce post, il y a plus simple
mais je réponds à la question...
il y a plusieurs erreur dans ton code
en fait il y avait deux fois la même adresse..
je te propose de faire comme ça!
ce qui ne changera pas beaucoup ton code!
mais je réponds à la question...
il y a plusieurs erreur dans ton code
en fait il y avait deux fois la même adresse..
je te propose de faire comme ça!
ce qui ne changera pas beaucoup ton code!
Sub test()
' je prends une colonne loin à droite ici Ax1
'
nombreColonne = Range("ax1").End(xlToLeft).Column
Dim C As Variant
For Each C In Range(Cells(1, 1), Cells(1, nombreColonne))
Select Case C.Value
Case Is = "G"
indexG = C.Address
Case Is = "QTE"
indexQte = C.Address
Case Is = "J"
indexJ = C.Address
Case Is = "CI"
indexCI = C.Address
Case Is = "Engagement"
indexEngagement = C.Address
Case Is = "REMARQUES"
indexRemarques = C.Offset(0, -1).Address
Case Is = "CE"
indexCE = C.Address
End Select
Next C
monEntete = indexG + "," + indexQte + "," + indexJ + "," + indexCI + "," + indexEngagement + "," + indexRemarques + "," + indexRemarques + "," + indexCE
Range(monEntete).Select
With Selection
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlCenter
.Orientation = 0
.AddIndent = False
.MergeCells = False
End With
End Sub