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. Up,

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

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


    Merci
    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. 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. 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. 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. 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. 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. 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. 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