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 :

inputbox et objet


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut inputbox et objet
    Bonjour , je dois écrire une macro qui demande quelle plage on veut sélectionner . Alors avec inputbox je n'y arrive pas car je dois saisir une valeur , voici la ligne de inputbox :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    surface = Application.InputBox("Quelle surface doit être remplie ?", _
                                 Default = Selection, Type:=8)
    Mais ça ne marche pas , je veux que l'inputbox me demande de selectionner une plage de cellules , comment faire ?

    merci

  2. #2
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Bonjour,

    Quand tu veux dire sélectionner une plage de cellules, veux-tu une sélection comme dans les formules d'excel, que tu sélectionnes directement les plages?

    Ou l'utilisateur entre "B1:C6" ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Voici quelques éléments qui devraient te permettre de progresser.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        MsgBox (Sh.Name)
        a = Target.Areas(1).Rows.Count
        b = Target.Areas(1).Columns.Count
        MsgBox ("Nombre de cellules : " & a & " lignes et " & b & " colonnes ")
        b = Target.Row
        C = Target.Column
        MsgBox ("Première cellule : " & b & "  " & C)
    End Sub
    Il faut se souvenir qu'une sélection peut contenir plusieurs zones de cellules, chacune étant composée de plusieurs cellules adjacentes.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Non, Application.InputBox(...., Type:=8) fait bien ce que tu souhaites. Simplement, tu places selection à la place du titre. Ajoute une virgule et à la place de selection, mets Selection.address, sinon tu as un range, alors qu'Application.InputBox attend ici une adresse et donc un string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
    surface = Application.InputBox("Quelle surface doit être remplie ?", , _
                                Selection.Address, Type:=8)
    End Sub

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    merci les gars , mais ouskel ça ne marche pas je suis désolée , avec ce que tu as écrit ça me demande bien dans une fenêtre quelle surface doit être remplie , mais ensuite moi je veux sélectionner manuellement cette surface et quand je le fais ça me sélectionne ma plage en pointillés et non en bleu comme d'hab , et ensuite j'ai le message d'erreur :

    variable objet ou variable de bloc with non définie , je ne comprends pas...

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors ne mets pas de valeur par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test2()
    Dim Surface As Range
        Range("A1").Select
        Set Surface = Application.InputBox("Quelle surface doit être remplie ?", Type:=8)
        MsgBox Surface.Address
    End Sub

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    salut ouskel , alors j'y suis presque mais je n'ai pas pris ton code , je te montre le mien et te dit ce qui ne va pas , si tu as une explication ça serait sympa car je suis dans le flou , voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Sub test()
    Dim surface As Range
    Set surface = Application.InputBox("Quelle surface colorier?", , _
                                    Selection.Address, Type:=8)
    remplissage Selection
    End Sub
    remplissage est la procédure de remplissage que j'ai écrite elle marche pas de probleme .

    Donc quand j'exécute cette macro , ça me lance bien une fenetre qui me demande quelle surface colorier , ensuite je sélectionne la surface , mais elle est sélectionnée en pointillée pas en bleu , et quand je clique sur ok rien ne se passe , ma surface entourée de pointillés a disparu et donc aucun remplissage . Pourtant j'ai bien mis "remplissage Selection" , et Selection c'est l'objet de type range qui correspond à une plage de cellules , je ne comprends pas , aurais tu une explication ?

    Je te remercie .

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je ne comprends pas ce que tu veux.
    Si tu veux utiliser la surface sélectionnée, alors utilise Surface
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim surface As Range
    Set surface = Application.InputBox("Quelle surface colorier?", , _
                                    Selection.Address, Type:=8)
    remplissage surface
    End Sub
    Peux-tu nous éclairer ?

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    ouskel c'est simple , je veux une macro qui me demande quelle surface colorier , ensuite je sélectionne la plage de cellules à colorier , je clique sur ok et hop la plage est coloriée , c'est tout .

    Et le dernier code que tu as mis , à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim surface As Range
    Set surface = Application.InputBox("Quelle surface colorier?", , _
                                    Selection.Address, Type:=8)
    remplissage surface
    End Sub
    ne marche pas . Car quand je lance ma macro j'ai ma fenetre inputbox qui me demande quelle surface je veux colorier . Donc je sélectionne une plage de cellules mais la sélection se fait mal , au lieu de remplir les cellules en bleu comme quand on sélectionne d'habitude elle entoure la plage de pointillés . Je clique sur Ok et je n'ao aucun remplissage ma sélection a disparu....

    Le truc c'est que je dois sélectionner ma plage de cellules APRES la demande du inpubox , ce code ne marche que si je la sélectionne avant donc ça ne me va pas...

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Eh bien moi j'ia fait ça et ça fonctionne
    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
    Sub test()
    Dim Surface As Range
    Set Surface = Application.InputBox("Quelle surface colorier?", , _
                                    Selection.Address, Type:=8)
    'MsgBox Surface.Address
     
    remplissage Surface
    End Sub
     
    Sub remplissage(Surface)
        With Surface.Interior
            .ColorIndex = 5
            .Pattern = xlSolid
        End With
     
    End Sub
    Là je dois m'absenter.
    A+

  11. #11
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    Bon et bien c'est bizarre , tant pis je me contenterai de mon code , je te remercie beaucoup pour ton aide .

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Je m'excuse de revenir à la charge avec une solution digne d'un PP....z
    mais elle se comporte comme souhaité dans le cahier des charges :

    Le code suivant doit être mis dans un module classique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Public Select_zone_autorisation
     
    Sub test_zone()
    '
    '   Armement de la routine Workbook_SheetSelectionChange
        Select_zone_autorisation = True
     
        MsgBox ("Après la fermeture de ce message, sélectionez la zone à colorier")
     
    End Sub
    La suite doit être dans Thisworkbook (le code peut être simplifié, j'y ai laissé des écritures inutiles)

    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
    Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
        'MsgBox ("Select_zone_autorisation : " & Select_zone_autorisation)
        If Select_zone_autorisation Then
     
            MsgBox (Sh.Name)
            a = Target.Areas(1).Rows.Count
            b = Target.Areas(1).Columns.Count
            MsgBox ("Nombre de cellules : " & a & " lignes et " & b & " colonnes ")
            b = Target.Row
            C = Target.Column
            MsgBox ("Première cellule : " & b & "  " & C)
     
    '   Des-Armement de la routine Workbook_SheetSelectionChange
            Select_zone_autorisation = False
     
            Call remplissage(Target)
     
        Else
        End If
    End Sub
     
     
    Private Sub remplissage(Target)
        With Target.Interior
            .ColorIndex = 5
            .Pattern = xlSolid
        End With
    End Sub
    Merci de me dire comment cela marche chez toi.

  13. #13
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    merci ppz mais tes réponses sont hors programme , tu utilises des objets...dont je n'ai pas le droit ni la connaissance .

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    592
    Détails du profil
    Informations personnelles :
    Âge : 75
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 592
    Par défaut
    Je souhaite t'aider, peux tu me dire ce qui t'est interdit ?

    En ce qui concerne :
    Workbook_SheetSelectionChange
    il s'agit d'une routine de base accessible de la façon suivante :
    1-dans VBA cliquer sur ThisWorkbook
    2-la feuille qui s'ouvre contient en haut (général) et (déclarations)
    3-il faut choisir Worbook en dessous de (Général)
    4-dans la partie droite il faut choisir Workbook_SheetSelectionChange

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Citation Envoyé par shaku Voir le message
    Bon et bien c'est bizarre , tant pis je me contenterai de mon code , je te remercie beaucoup pour ton aide .
    Ton code qui est ?... Ça pourrait intéresser ceux qui ont le même problème que toi.

    @PPz78 - As-tu testé Application.Input(..., Type:=8) ? Tu t'apercevrais des possibilités "vraies" qu'offre cette méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    Dim Plage as range
        Set Plage = Application.InputBox("Sélectionner une cellule ou une plage de cellules", , , , , , , 8)
        Msgbox Plage.Address
    End Sub

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

Discussions similaires

  1. codage objet
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/08/2002, 17h49
  2. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 23h58
  3. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 14h53
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 17h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 10h41

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