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 :

plage de cellules pb si unique [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut plage de cellules pb si unique
    bonjour,

    je veux définir une plage de cellules, or il y a un dysfonctionnement si cette plage ne contient qu'une seule cellule

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set plage = range(cells(1,1);cells(x,1))
    si x vaut 1
    - la plage n'est pas prise en compte

    même si je force l'affectation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if x = 1 then set plage = range("A1")
    je ne peux peux pas l’exploiter par un double clic en utilisant intersect

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set Vu_plage = intersect(plage,target)


    y a-t-il une explication ?
    est ce encore un bug de bill gate ?

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    La syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range(Cells(1, 1); Cells(x, 1))
    est incorrecte. Est-ce que tu veux écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Range(Cells(1, 1), Cells(x, 1))
    Si tu ne veux prendre en compte que la premmière et la seconde, il faut écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = Union(Cells(1, 1), Cells(x, 1))

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    ok pour la petite faute de syntaxe , ald ; autant pour moi DSL

    mais pour le reste ça tient toujours, je veux balayer une zone et si cette zone ne contient qu'une seule cellule j'ai les pb décrits

  4. #4
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Bonjour,

    Citation Envoyé par Patnel Voir le message
    ...j'ai les pb décrits
    décrit ou ?

    il n'y as pas de problème si X = 1 , ou pour l'intersection .. un code le montrant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Sub Testq
    Dim r As Range
        Set r = Range(Cells(1, 1), Cells(1, 1))
        Debug.Print r.Address
        Debug.Print "Intersection avec ligne 1 : " & Intersect(r, Rows(1)).Address
     
     
        Stop 'faire CTRL+G pour atteindre la fenêtre exécution
        end sub

    Citation Envoyé par Résultat dans fenêtre exécution
    $A$1
    Intersection avec ligne 1 : $A$1

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2007
    Messages
    293
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 293
    Par défaut
    Aie !!
    je ne sais pas comment te répondre bbil, mais en fait ça se passe en dynamique

    car à priori je ne sais pas combien de cellules vont être traitées.
    car si le nombre de cellules est > 1 ça marche impect,
    c'est quand ma routine détecte que la plage ne contient qu'une seule cellule que l'application plante: je te donne le code au complet que j' ai fait:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ' zone de clim
     
        'clim
     
    If Range("C2") <> "" Then
    der_l = Range("C1").End(xlDown).Row
    Set zone_clim = Range(Cells(2, "B"), Cells(der_l, "B")) ' (si der_l = 2 zone clim ne se charge pas)
    End If
     
        'Meca
     
    If Range("E2") <> "" Then
    der_l = Range("E2").End(xlDown).Row
    Set zone_meca = Range(Cells(2, "D"), Cells(der_l, "D"))
    End If
     
        'CEM
     
    If Range("G2") <> "" Then
    der_l = Range("G2").End(xlDown).Row
    Set zone_cem = Range(Cells(2, "F"), Cells(der_l, "F"))
    End If
     
        'Elec
     
    If Range("I2") <> "" Then
    der_l = Range("I2").End(xlDown).Row
    Set zone_elec = Range(Cells(2, "H"), Cells(der_l, "H"))
    End If
     
        'Autres
     
    If Range("K2") <> "" Then
    der_l = Range("K2").End(xlDown).Row
    Set zone_misc = Range(Cells(2, "J"), Cells(der_l, "J"))
    End If
     
     
    Set in_clim = Intersect(Target, zone_clim) ' si cellule unique in_clim renvoie rien
     
    If Not in_clim Is Nothing Then
     
    If Target.Value = "" Then
        Target.Value = "X"
        GoTo fin
    End If
     
    If Target.Value = "X" Then Target.Value = ""
     
    End If
     
     
    Set in_meca = Intersect(Target, zone_meca)
     
    If Not in_meca Is Nothing Then
     
     
        If Target.Value = "" Then
            Target.Value = "X"
            GoTo fin
        End If
     
    If Target.Value = "X" Then Target.Value = ""
     
    End If
     
    Set in_cem = Intersect(Target, zone_cem)
     
    If Not in_cem Is Nothing Then
     
     
        If Target.Value = "" Then
            Target.Value = "X"
            GoTo fin
        End If
     
    If Target.Value = "X" Then Target.Value = ""
     
    End If
     
    Set in_elec = Intersect(Target, zone_elec)
     
    If Not in_elec Is Nothing Then
     
     
        If Target.Value = "" Then
            Target.Value = "X"
            GoTo fin
        End If
     
    If Target.Value = "X" Then Target.Value = ""
     
    End If
     
     
    Set in_misc = Intersect(Target, zone_misc)
     
    If Not in_misc Is Nothing Then
     
     
        If Target.Value = "" Then
            Target.Value = "X"
            GoTo fin
        End If
     
    If Target.Value = "X" Then Target.Value = ""
     
    End If
     
    fin:
     
     
    End Sub
    le principe est de cocher par un double clic des cases choisies

    Merci BBil de me répondre

  6. #6
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Je comprends pas ce que tu plante la :
    Citation Envoyé par Patnel Voir le message
    ///
    c'est quand ma routine détecte que la plage ne contient qu'une seule cellule que l'application plante: je te donne le code au complet que j' ai ...



    Contrôle pourquoi intersect ne renvoi rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    (...) 
    Set in_clim = Intersect(Target, zone_clim) ' si cellule unique in_clim renvoie rien
     
    'RAJOUTE ces lignes pour debug
    If  in_clim Is Nothing Then
       Debug.print "target :" & Target.adress
       Debug.print " zone_clim:" &  zone_clim.adress
       stop '--- Voir fenêtre exécution
    End if

  7. #7
    Expert éminent 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
    Par défaut
    Tu auras un problème si la cellule correspondante de la ligne 2 est vide, alors tes plages ne sont pas déterminées

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If Range("C2") <> "" Then
        Der_L = Range("C1").End(xlDown).Row
        Set Zone_Clim = Range(Cells(2, "B"), Cells(Der_L, "B"))    ' (si der_l = 2 zone clim ne se charge pas )
    End If
    Si C2 est vide, Zone_Clim sera Nothing

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA - Plage de cellules
    Par ZIED dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/01/2006, 05h49
  2. [VBA] Copier une plage de cellules dans un fichier fermé
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/01/2006, 16h52
  3. [VBA] Parcourir une plage de cellule
    Par Dinytro dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2005, 08h18
  4. [VBA-E] Image d'une plage de cellule
    Par flogreg dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2004, 12h30
  5. [VBA-E] [Excel] Protection d'une plage de cellules
    Par fikou dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/11/2002, 11h28

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