IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Pb syntaxe range avec variable


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut Pb syntaxe range avec variable
    Bonjour,

    Je voudrai sélectionner plusieurs cellules selon des critères.

    Dans une variable "t" je regroupe le nom des cellules que je souhaite sélectionner.
    Ca me donne ca par exemple: t= H2,I2,H5,I5

    Le problème viens de mon range.
    Lorsque je fait range("t") ca ne marche pas j'ai l'erreur la méthode range de l'objet '_Global' a échoué.

    J'ai aussi essayé ac pour valeur de t: cells(2,8),cells(2,9)
    mais ca ne marche pas non plus.

    Pouvez vous m'aider.

    merci

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Bonjour,

    Si tu écris t entre guillemets c'est la plage nommé t que tu mets dans ton Range et non la valeur de ta variable t

    Essais comme cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    t= "H2,I2,H5,I5"
    Range(t).Select

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    Salut,

    Merci pour ta réponse mais comment je fait pour que ma variable text t prenne en compte les doubles cottes?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t = t & "H" & i & "," & "I" & i & ","
    Ca c'est ma variable t. Si je lui met des doubles cottes avant et après il bug avec les lettres (H et I).

    Merci

  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    si t est vide
    si t contient déja une liste d'adresse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t = t & ",H" & i & ",I" & i

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    C'est la même chose que ma variable t. Mais différement.
    Moi à la fin je remplace la dernière virgule par un espace puis je le supprime.

    Mais bon dans nos 2 cas on obtient pas t="H2,H3,I2,I3" mais t=H2,H3,I2,I3 sans les doubles cotte.

  6. #6
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    on utilise les " pour spécifié que l'ont écrit du texte pour borner le texte
    La variable contiendra toujours ce qu'il y a entre les double quote.

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    J'ai essayé comme tu m'a dis mais ca ne marche tjs pas.
    J'ai tjs le mm message d'erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    Dim t As String
     
        For i = 2 To 20 'ncertu
     
            If Worksheets("Décomposition Certu").Cells([i], "K").Value Like "% BT" Then
                If Len(t) = 0 Then
                t = "H" & i & ",I" & i
                Else
                t = t & ",H" & i & ",I" & i
                End If
     
            End If
            '-----------------------
            If Worksheets("Décomposition Certu").Cells([i], "V").Value Like "% BT" Then
                If Len(t) = 0 Then
                t = "S" & i & ",T" & i
                Else
                t = t & ",S" & i & ",T" & i
                End If
            End If
     
     
        Next i
        MsgBox (t)
        Range(t).Select

  8. #8
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Quel est la valeur de t quand tu as le message d'erreur ?

  9. #9
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Vaux mieux de travailler avec des Range parce que en concaténant les cellules ainsi tu sera limité par 30 arguments pour range(X1, X2....,X30)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Sub Test()
    Dim i As Integer
    Dim T As Range
     
    With Worksheets("Décomposition Certu")
        For i = 2 To 20                              'ncertu
            If .Cells(i, "K").Value Like "% BT" Then
                If T Is Nothing Then
                    Set T = .Range("H" & i & ":I" & i)
                Else
                    Set T = Union(T, .Range("H" & i & ":I" & i))
                End If
            End If
            '-----------------------
            If .Cells(i, "V").Value Like "% BT" Then
                If T Is Nothing Then
                    Set T = .Range("S" & i & ":T" & i)
                Else
                    Set T = Union(T, .Range("S" & i & ":T" & i))
                End If
            End If
        Next i
        If Not T Is Nothing Then
            MsgBox T.Address
            T.Interior.ColorIndex = 23
     
            'A LA FIN
            Set T = Nothing
        End If
    End With
    End Sub

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 302
    Points : 185
    Points
    185
    Par défaut
    Merci pour vos réponse.
    je ne savais pas que le range était limité a 30 argument.
    Ca m'arrange pas car il risque d'en avoir une centaine d'arguments.

    Mais j'ai fait ma procédure autrement pour avoir ce que je voulais.
    Je ne passe pas par un range.

    Voici ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Function format(ncolonne As Integer, nligne As Integer, nom_F As String)
     
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
     
    For j = 1 To ncolonne
        For i = 2 To nligne
            If Worksheets(nom_F).Cells(1, [j]).Value Like "Unité" Then
                If Worksheets(nom_F).Cells([i], [j]).Value Like "%*" Then
                    For k = j - 4 To j
                        If Worksheets(nom_F).Cells(1, [k]).Value Like "Prix unitaire*" Then
                        Cells([i], [k]).Select
                        Selection.NumberFormat = "0.00%"
                        End If
                    Next k
                Else
                    For k = j - 4 To j
                        If Worksheets(nom_F).Cells(1, [k]).Value Like "Prix unitaire*" Then
                        Cells([i], [k]).Select
                        Selection.NumberFormat = "0.00"
                        End If
                    Next k
                End If
     
            End If
        Next i
    Next j
    End Function
    en faite j'en ai 3 mais les 2 autres sont du même genre.


    jfontaine, la valeur du t est: H2,I2,S2,T2,H5,I5,H6,I6,S6,T6

    C'est un exemple mais c'est la forme qu'il a.

    Je vous remercie de vous êtes posés la question pour moi.

    Mais j'aimerai bien savoir pourquoi mon range(t).select ne marche pas.
    Ce n'est pas le nombre d'argument car j'avais testé avec peu de valeur.

Discussions similaires

  1. Syntax setTimeout avec variable.
    Par defacta dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/08/2009, 15h14
  2. L'objet range avec variables et concatenation
    Par bigmousse69 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/01/2009, 18h52
  3. syntaxe like avec variable
    Par xirom dans le forum Requêtes
    Réponses: 3
    Dernier message: 23/09/2008, 22h56
  4. Range avec Variable
    Par argal dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 07/07/2008, 10h39
  5. Syntaxe Range avec une variable pour la colonne
    Par Spykerman dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/06/2008, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo