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 :

Remplir cellules à partir d'une cellule sélectionnée [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 16
    Par défaut Remplir cellules à partir d'une cellule sélectionnée
    Bonjour à tous,

    Je rencontre un problème lors de la programmation d'une macro.
    En effet, je possède un UserForm qui s'ouvre à l'aide d'un bouton "nouvelle tâche" sur ma page excel. Ce dernier me fait apparaître une fenêtre où se trouve des textbox ou des listes déroulantes qui vont remplir chacun une cellule par colonne.

    J'aimerais savoir par quel moyen serait il possible de faire en sorte de remplir les cellules à partir d'une cellule sélectionnée.
    Par exemple si je sélectionne la cellule B1 et que j'appuie le bouton "nouvelle tâche" cela va remplir les cellules B1, D1 et F1.
    Ensuite si je sélectionne la cellule C1 et que j'appuie le bouton "nouvelle tâche" cela va remplir les cellules C1, E1 et G1.

    Existe t'il une fonctionne pour cela? Faut il bien l'écrire dans le code du module et non dans le code de l'UserForm?

    Je vous remercie par avance
    Illian

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    tu peux connaitre la cellule active avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActiveCell
    'et
    ActiveCell.Address
    pour la cellule B1 tu peux avoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If ActiveCell.Address="$B$1" Then
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    tes deux exemples, s'ils sont exhaustifs, permettent d'en tirer une règle générale :

    1) positionnement sur une cellule "MaCellule"
    2) appui sur le bouton
    3) affichage du Userform
    4) remplissage des champs
    5) appui sur bouton de validation
    6) Ecriture de trois champs dans : MaCellule / MaCellule.Decalée(0 Ligne, 2 Colonnes) / MaCellule.Decalée(0 Ligne, 4 Colonnes)


    MaCellule, comme indiqué par Jp, c'est Activecell
    Se décaler, c'est via Offset(), sous la forme que j'ai présenté à l'étape 6



    Sans voir ton code, impossible d'aller plus loin dans l'explication

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 16
    Par défaut
    Bonjour

    Je te remercie Jean-Philippe pour la fonction cela marche mais si je veux faire pour une autre ligne ci dessous je n'y arrive pas.

    C'est bien ça Joe.levrai, cependant j'aimerais le faire pour n'importe quelle cellule que je sélectionne dans toute la feuille. Par exemple si je sélectionne la cellule B3 cela remplie la cellule B3, E3, H3, .. (à chaque fois sauté 2 colonnes).
    Puis si je sélectionne la cellule C4 cela remplie le cellules C4, F4, G4 ...
    Et ainsi de suite.

    Pour l'instant mon code test est le 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
    Private Sub CommandButton_annuler_Click()
    Unload Me
    End Sub
     
    Private Sub CommandButton_valider_Click()
    If ActiveCell.Address = "$B$3" Then
     Range("B3") = TextBox1
     Range("D3") = TextBox2
     Range("F3") = TextBox3
     Unload Me
    Else
     Range("C3") = TextBox1
     Range("E3") = TextBox2
     Range("G3") = TextBox3
     Unload Me
     End If
    End Sub
    Je l'ai fais avec le If mais cela n'est pas possible si je sélectionne une autre ligne

    J'ai essayé ce code mais cela ne marche pas, il y a une erreur sur la première ligne de Range

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CommandButton_annuler_Click()
    Unload Me
    End Sub
     
    Private Sub CommandButton_valider_Click()
     Range("  ActiveCell.Offset(0,0)") = TextBox1
     Range("  ActiveCell.Offset(0, 2)") = TextBox2
     Range("  ActiveCell.Offset(0, 4)") = TextBox3
     Unload Me
    End Sub
    Est ce que j'utilise mal cette fonction?

    Merci par avance

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    C'est 2 colonnes plus loin ou 3 colonnes ?

    dans tes explications on a les deux versions

    cas où c'est deux colonnes plus loin
    exemple : si je suis en C34 ==> C34 / E34 / G34

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub CommandButton_valider_Click()
        With ActiveCell
            .Value = TextBox1.Text
            .Offset(0, 2).Value = TextBox2.Text
            .Offset(0, 4).Value = TextBox3.Text
        End With
    End Sub
    si c'est en fait trois colonnes plus loin, remplacer 2 et 4 par 3 et 6 dans les Offset

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 16
    Par défaut
    C'est bon ça marche, je te remercie Joe.levrai

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 16
    Par défaut
    Je me permets de reposer une question car je bloque.
    Dans mon UserForm j'ai mis des case à cocher "CheckBox", elle remplie la case par un X si c'est coché et laisse la case vide si ce n'est pas coché.
    Cependant je n'arrive pas à appliquer "With ActiveCell" à ces CheckBox. Y a t'il une solution?
    Cela marche seulement pour la ligne 3 et j'aimerais que ça marche pour n'importe quelle ligne sélectionnée

    Mon code pour l'instant sans l'activeCell est le 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
    Private Sub CheckBox_base_Click()
    If CheckBox_base.Value = True Then 'Si coché ...
           Range("C3") = "X"
        Else 'Si non coché ...
            Range("C3") = ""
        End If
    End Sub
    Private Sub CheckBox_ligne_Click()
    If CheckBox_ligne.Value = True Then 'Si coché ...
           Range("D3") = "X"
        Else 'Si non coché ...
           Range("D3") = ""
        End If
    End Sub

  8. #8
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    s'il faut écrire toujours sur une ligne en connaissant la colonne, ou inversement, on peut utiliser le numéro de ligne/colonne de Activecell


    Activecell.Row te donne le numéro de la ligne de la cellule active
    Activecell.Column te donne le numéro de colonne

    je crois comprendre que c'est en colonne C qu'il faut écrire pour la première procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub CheckBox_base_Click()
    ' écrire X sur la colonne C (colonne 3) de la ligne où est la cellule active
    ' si Checkbox est coché ... sinon on écrit "rien" (ce qui efface ce qui était écrit)
        Cells(ActiveCell.Row, 3).Value = IIf(CheckBox_base, "X", "")
    End Sub

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 16
    Par défaut
    Oui quand je clique sur une cellule d'une certaine ligne cela va compléter seulement cette ligne.

    Y a-t-il une solution comme celle que tu as proposé avant? parce que la dernière je n'arrive pas à la faire marcher

  10. #10
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Je ne comprend pas le problème, ma dernière proposition fait un traitement rigoureusement identique à ce que tu présentais, sauf que tu utilisais en dur la cellule C3, moi j'utilise toujours la colonne C, mais la ligne est celle de la cellule active, ce qui correspondait à ta demande ?

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2017
    Messages : 16
    Par défaut
    Bonjour,

    C'est bon cela marche correctement
    Je te remercie pour ton aide

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

Discussions similaires

  1. activer/désactiver une cellule à partir d'une case à cocher
    Par gc007 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/04/2012, 18h33
  2. [XL-2007] Formule pour récuperer valeur d'une cellule à partir d'une autre
    Par toushusss dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/09/2011, 17h23
  3. [XL-2007] Renvoie d'une cellule à partir d'une autre
    Par jeremiefiber dans le forum Excel
    Réponses: 2
    Dernier message: 08/05/2009, 14h19
  4. Auto completion d'une cellule à partir d'une plage nommée
    Par p2n2k2 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/01/2009, 17h52
  5. Compléter une cellule à partir d'une TextBox
    Par Le Marsu dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 31/08/2008, 22h48

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