Probleme Range en VBA

Résolu
Tydher Messages postés 127 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 :

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

  1. Tydher Messages postés 127 Statut Membre 6
     
    Up,

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

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


    Merci
    0
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  3. Tydher Messages postés 127 Statut Membre 6
     
    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
  4. Tydher Messages postés 127 Statut Membre 6
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Tydher Messages postés 127 Statut Membre 6
     
    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
  7. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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
  8. Tydher Messages postés 127 Statut Membre 6
     
    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
    1. Bidouilleu_R Messages postés 1209 Statut Membre 296
       
      je regarde
      0
  9. Tydher Messages postés 127 Statut Membre 6
     
    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
  10. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    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