Probleme Range en VBA

Résolu/Fermé
Tydher Messages postés 123 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 17 mai 2011 - Modifié par Tydher le 20/04/2011 à 14:07
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 - 21 avril 2011 à 14:05
Bonjour une fois de plus à tous.

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

Tydher Messages postés 123 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 17 mai 2011 6
21 avril 2011 à 08:57
Up,

Ca ne marche toujours pas, pourtant en faisant comme ci-dessous ça fonctionne

Range("A1:L3,M8:BS4...")


Merci
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
21 avril 2011 à 09:27
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



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)
0
Tydher Messages postés 123 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 17 mai 2011 6
Modifié par Tydher le 21/04/2011 à 09:47
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
0
Tydher Messages postés 123 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 17 mai 2011 6
21 avril 2011 à 09:56
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tydher Messages postés 123 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 17 mai 2011 6
21 avril 2011 à 10:30
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é
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
21 avril 2011 à 12:50
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.
0
Tydher Messages postés 123 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 17 mai 2011 6
21 avril 2011 à 13:09
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
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
21 avril 2011 à 13:20
je regarde
0
Tydher Messages postés 123 Date d'inscription vendredi 5 juin 2009 Statut Membre Dernière intervention 17 mai 2011 6
21 avril 2011 à 13:53
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 :

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
0
Bidouilleu_R Messages postés 1181 Date d'inscription mardi 27 mai 2008 Statut Membre Dernière intervention 12 juillet 2012 293
21 avril 2011 à 14:05
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!


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
0