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 :

Utiliser la Range obtenue par Application.Inputbox [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut Utiliser la Range obtenue par Application.Inputbox
    Bonjour,

    Je tiens à dire que j'ai vraiment cherché partout sur le net et sur différents sites, mais je n'ai pas trouvé l'information.
    J'ai le code suivant :
    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
    'Dim ME as Range => J'ai compris que je devais supprimer cela et je viens de le faire ^^
        With Application
            .DisplayAlerts = False
            .DisplayStatusBar = True
            .CutCopyMode = False
            .ScreenUpdating = True
        End With
            Range("CO1").Select
            On Error Resume Next
            ME = Application.InputBox(prompt:="Bonjour " & Application.UserName & Chr(13) & "Merci de cliquer sur le titre de la colonne souhaitée", Title:="Mois Exemple", Type:=8)
            On Error GoTo 0
        With Application
            .DisplayAlerts = True
            .ScreenUpdating = False
            .DisplayStatusBar = False
        End With
        If ME.Address = ("CG1") Then
        Range("CG2") = T2 / 100
        Range("CG2").AutoFill Range("CG2:CG" & Range("CG65536").End(xlUp).Row)
        End If
    J'obtiens une erreur sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If MoisETP.Address = ("CG1") Then
    Je souhaite simplement récupérer la range saisie par l'application.inputbox. Je sais que "ME.address" me donnera la range, mais je souhaite écrire une formule dans la colonne de la range... Je sais qu'il existe des solutions alternatives du type "ME. copy destination:=Sheets("Feuil2").range("A1")
    If Range("A1") = "CG1" then
    blablabla
    end if
    mais je ne souhaite pas utiliser cela pour ma macro a moins d'y être absolument contraint.
    Avez vous une solution pour moi ?

    Edit : J'ai continué mes recherches et j'ai trouvé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set CME= ME.Item(1).Column
    Je ne sais pas si je suis sur la bonne piste, mais je vais creuser dans ce sens. Je vous tiens au courant, ça pourrait aider quelqu'un d'autre ^^

    J'ai réussi à contourner le problème pour que mon code fonctionne, mais j'aimerai tout de même l'optimiser parce que c'est encore au stade du "bidouillage" :S Voici mon code :
    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
    With Application
            .DisplayAlerts = False
            .DisplayStatusBar = True
            .CutCopyMode = False
            .ScreenUpdating = True
        End With
            Range("CO1").Select
            On Error Resume Next
            ME= Application.InputBox(prompt:="Bonjour " & Application.UserName & Chr(13) & "Merci de cliquer sur le titre de la colonne souhaitée", Title:="Mois Exemple", Type:=8)
            On Error GoTo 0
        With Application
            .DisplayAlerts = True
            .ScreenUpdating = False
            .DisplayStatusBar = False
        End With
            Range("CG2:CT2", Selection.End(xlDown)).ClearContents
                If ME= "janv" Then
                    Range("CH2") = "=T2/100"
                    ElseIf ME= "fev" Then
                    Range("CI2") = "=T2/100"
                    ElseIf ME= "mars" Then
                    Range("CJ2") = "=T2/100"
                    ElseIf ME= "avril" Then
                    Range("CK2") = "=T2/100"
                    ElseIf ME= "mai" Then
                    Range("CL2") = "=T2/100"
                    ElseIf ME= "juin" Then
                    Range("CM2") = "=T2/100"
                    ElseIf ME= "juillet" Then
                    Range("CN2") = "=T2/100"
                    ElseIf ME= "août" Then
                    Range("CO2") = "=T2/100"
                    ElseIf ME= "septembre" Then
                    Range("CP2") = "=T2/100"
                    ElseIf ME= "octobre" Then
                    Range("CQ2") = "T2/100"
                    ElseIf ME= "novembre" Then
                    Range("CR2") = "=T2/100"
                    ElseIf ME= "décembre" Then
                    Range("CS2") = "=T2/100)"
                 End If
    J'aimerai donc écrire cela différemment, sans les If et ElseIf, mais plutôt quelque chose qui ressemblerait à :
    Appliquer la formule "=T2 / 100" pour la colonne de la variable ME".

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Évite d'utiliser le mot ME qui est un mot réservé par VBA.
    Ceci devrait te donner ce que tu souhaites, si je comprends bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Dim Adresse As Range
     
        Set Adresse = Application.InputBox(prompt:="Bonjour " & Application.UserName & Chr(13) & "Merci de cliquer sur le titre de la colonne souhaitée", Title:="Mois Exemple", Type:=8)
        MsgBox Adresse.Address

  3. #3
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Bonjour,

    merci pour ton implication =)

    En fait, je sais déjà faire ça mais je souhaite récupérer la lettre de la colonne en valeur variable pour ensuite écrire quelque chose comme
    Pour la ligne 2 de la colonne selectionnée, ecrire la formule "=T2/100"
    Par exemple, l'utilisateur clique sur la cellule 2 de la colonne "CH" à "CS", je souhaite simplement récupérer l'information afin de dire à Excel que c'est sur la colonne choisie par l'utilisateur qu'il faut appliquer une formule "=T2/100"
    En gros je voudrais quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range(Columns(MoisETP).Row(2)) = "=T2/100"
    mais je n'arrive pas à trouver le code

    Edit :
    Je viens de relire ton code plus calmement et j'ai remarqué le "Set" ^^
    Je l'ai ajouté à mon code et je pense me rapprocher du but

    Voilà ce que j'ai pour l'instant :

    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
        With Application
            .DisplayAlerts = False
            .DisplayStatusBar = True
            .CutCopyMode = False
            .ScreenUpdating = True
        End With
            Range("CO1").Select
            On Error Resume Next
            Set MoisE= Application.InputBox(prompt:="Bonjour " & Application.UserName & Chr(13) & "Merci de cliquer sur le titre du mois pour lequel nous calculons l'ETP", Title:="Mois Exemple", Type:=8)
            On Error GoTo 0
        With Application
            .DisplayAlerts = True
            .ScreenUpdating = False
            .DisplayStatusBar = False
        End With
            Range("CG2:CT2", Selection.End(xlDown)).ClearContents
            ColE = MoisE.Column
            Range(ColE & Rows(2)) = "=T2/100"  'Erreur sur cette ligne à cause du "Row" ^^
    Edit :
    Et voilààààààà ! J'ai réussi ^^

    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
    Voilà mon code final : 
        With Application
            .DisplayAlerts = False
            .DisplayStatusBar = True
            .CutCopyMode = False
            .ScreenUpdating = True
        End With
            Range("CO1").Select
            On Error Resume Next
            Set MoisE = Application.InputBox(prompt:="Bonjour " & Application.UserName & Chr(13) & "Merci de cliquer sur le titre du mois pour lequel nous calculons l'ETP", Title:="Mois Exemple", Type:=8)
            On Error GoTo 0
        With Application
            .DisplayAlerts = True
            .ScreenUpdating = False
            .DisplayStatusBar = False
        End With
            Range("CG2:CT2", Selection.End(xlDown)).ClearContents
            ColE = MoisE.Column
            Cells(2, ColE) = "=T2/100"
    C'est bien meilleur que l'infame code avec les douze "If / ElseIf" ^^
    Merci pour ton coup de pouce ! Ca m'a bien débloqué et c'est tout ce qu'il me manquait pour coder cela ^^

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Tu écris
    Par exemple, l'utilisateur clique sur la cellule 2 de la colonne "CH" à "CS", je souhaite simplement récupérer l'information afin de dire à Excel que c'est sur la colonne choisie par l'utilisateur qu'il faut appliquer une formule "=T2/100"
    Pas sûr de bien comprendre...
    Est-ce que tu veux que la même formule soit inscrite sur toutes les colonnes (CH à CS) en ligne 2 ?
    Est-ce que tu veux que la formule soit inscrite sur toute la colonne par la suite ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Chargé d'études RH
    Inscrit en
    Août 2014
    Messages
    162
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chargé d'études RH
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2014
    Messages : 162
    Par défaut
    Je souhaite que l'utilisateur sélectionne sa colonne et que la formule s'écrive dans toute la colonne sélectionnée.
    C'est chose faite avec ce code :
    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
    Voilà mon code final : 
        With Application
            .DisplayAlerts = False
            .DisplayStatusBar = True
            .CutCopyMode = False
            .ScreenUpdating = True
        End With
            Range("CO1").Select
            On Error Resume Next
            Set MoisE = Application.InputBox(prompt:="Bonjour " & Application.UserName & Chr(13) & "Merci de cliquer sur le titre du mois pour lequel nous calculons l'ETP", Title:="Mois Exemple", Type:=8)
            On Error GoTo 0
        With Application
            .DisplayAlerts = True
            .ScreenUpdating = False
            .DisplayStatusBar = False
        End With
            Range("CG2:CT2", Selection.End(xlDown)).ClearContents
            ColE = MoisE.Column
            Cells(2, ColE) = "=T2/100"
    La formule est écrite dans la première ligne d'un tableau, et sera donc étendue à tout le tableau ^^

    Merci parmi, le code est bon grâce à ton premier message

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    OK, je comprends mieux.
    Je n'avais pas vu que c'était un tableau...

    Bonne continuation !

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

Discussions similaires

  1. Utilisation de données obtenues par une requete PIVOT
    Par pedro91 dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 06/03/2012, 12h00
  2. Réponses: 1
    Dernier message: 27/04/2010, 05h10
  3. [E-02] utiliser une variable récupérée par inputbox
    Par Picotman56 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/02/2009, 10h33
  4. Réponses: 4
    Dernier message: 09/05/2008, 22h23
  5. Réponses: 4
    Dernier message: 14/12/2007, 16h08

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