Probleme Range en VBA

Résolu
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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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
      1. 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
        1. je regarde
      2. 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.
        1. 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é
          1. 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
            1. 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
              1. 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)
                1. Up,

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

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


                  Merci