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 :

[xl-VBA] bouton qui place du texte


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 34
    Points : 21
    Points
    21
    Par défaut [xl-VBA] bouton qui place du texte
    Bonjour à tous,

    Je cherche la façon de placer du texte dans des cellules données à l'aide d'un bouton.
    Je m'explique : Dans la cellule A1 j’ai du texte (p.ex. titre1) ; en B1 je place le chiffre 3.

    Puis j’aimerai créer un bouton qui après un clic il va écrire dans 3 cellules différentes (1 par ligne) le contenu de la cellule A1 « texte 1 ». J’aurai ainsi « texte1 » en A3 ; « texte1 » en A4 et « texte1 » en A5.

    Pourriez-vous m’aider ?

    Merci beaucoup

    Robby

  2. #2
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonjour,

    Pourquoi ne pas simplement placer une formule,

    dans les cellules A3 à A5 ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 34
    Points : 21
    Points
    21
    Par défaut
    Bien vu, mais d'une part le but pour moi c'est d'apprendre et de comprendre, d'aller un peu plus loin dans les outils d'Excel. D'autre part mon exemple n'est qu'une partie d'une réalisation plus complexe. La création de questionnaires automatiques...
    Robby

  4. #4
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Re,

    S’il s’agit d’apprendre, commence par faire la manip en enregistrement automatique, et regarde la macro générée.

  5. #5
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 905
    Points
    55 905
    Billets dans le blog
    131
    Par défaut
    Bonsoir Biker-Robby

    Pour ma part, je vais t'apprendre une autre démarche que l'enregistreur de macros. En effet, ce bidule, très pratique par ailleurs, crée un code pourri qui ne te permettra pas d'apprendre le VBA (ou alors avec beaucoup de sueurs et de pertes de temps), ni les bonnes façons de coder... Désolé pour ceux qui pensent que l'enregistreur est un passage obligé...

    Dans ton cas, l'enregistreur, outre le code pourri, ne va jamais te permettre d'utiliser la valeur saisie en B1 pour boucler autant de fois que souhaité.
    Regarde le code que je te propose, il me semble suffisamment explicite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub PlacerTexteA1()
        Dim i As Long
     
        For i = 1 To Range("b1").Value
            Range("a1").Copy Destination:=Range("a1")(2 + i)
        Next i
    End Sub
    Explication de
    En sachant que
    veut dire "je pointe sur la ligne 1 de la plage A1", tu comprendras que
    pointera sur la ligne 2 de la plage A1, et donc que pointera vers vers une cellule se trouvant sur la 2+i ième ligne à partir de A1, et il y aura donc un décalage vers le bas à chaque boucle.

    Bien entendu, ce code est loin d'être optimal. Par exemple, si tu saisis autre chose qu'un nombre en B1, ou que ce nombre fait que tu dépasses les limites d'Excel, le code va planter. Mais pour une première approche, il te permettra de découvrir petit à petit comment fonctionne VBA.

    N'hésite surtout pas à aller sur les tutos, et à revenir poser des questions au fur et à mesure de tes découvertes.

    Bon courage et bonne continuation

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 34
    Points : 21
    Points
    21
    Par défaut
    Salut, Je pense que je n’étais pas très explicite dans mon problème, je vais donc le reformuler dans sa globalité.

    Dans mon classeur il y a 4 feuilles :

    Une feuille nommée « Questionnaire », c’est dans cette feuille que je réalise mon questionnaire (un Etat imprimable) et 3 feuilles de données : nommées « Introduction », « Principes de base », « Concepts clé ».

    Dans chacune de ces trois feuilles il y a un nombre important de questions (chaque question est placée dans une cellule (une question par ligne donc).

    Mon intention c’est de créer dans la feuille « questionnaire » un Etat imprimable rempli de questions prises aléatoirement parmi les feuilles de données.

    Pour ce faire, je souhaiterai créer 3 boutons afin de « coller » un nombre choisi des questions dans la feuille. A savoir :

    Dans la feuille « Questionnaire » en A1, A2 et A3 il y a le nombre de questions que je souhaite importer. Par exemple :

    A1 = 3 ; 3 questions prises au hasard dans la feuille « Introduction » et collées à la suite dans des cellules libres disons en A5, A6, A7.

    A2 = 2 ; 2 questions prises au hasard dans la feuille « Principe de base » et collées à la suite des cellules libres disons en A8, A9

    A3 = 2 ; 2 questions prises au hasard dans la feuille « Concepts clé » et collées à la suite des cellules libres disons en A10, A11

    J’aurai à la fin une liste de 7 questions que je pourrais imprimer.

    L’intérêt c’est d’avoir à chaque « clic » sur les boutons un questionnaire différent sans choisir ni retaper les questions.

    Pourriez-vous m’aider ?

    Merci

    Robby

  7. #7
    Membre confirmé
    Avatar de Bigalo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    445
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 445
    Points : 563
    Points
    563
    Par défaut
    Bonjour,

    Voici quelque chose qui fait ce que tu demandes, à ceci près qu'il y a un seul traitement, que tu peux associer à un bouton unique.

    Si tu veux 3 boutons, une adaptation est nécessaire.

    Cela fonctionne également avec un nombre quelconque de feuilles.

    NB - Il est impératif que Questionnaire soit le premier onglet.

    En haut d'un module standard

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    Private ReceptionDonnees As Range
    ReceptionDonnees est une variable de niveau feuille, ce qui permet de l'utiliser dans 2 procédures.

    Ensuite RecupDonnees est une procédure avec une boucle, dans laquelle on passe autant de fois qu'il y a de feuilles de données.

    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
     
    Sub RecupDonnees()
    Dim i As Integer, NbFeuillesDonnees As Integer
        NbFeuillesDonnees = Worksheets.Count - 1
        ' Initialisation de la génération de nombres aléatoires
        Randomize
            With Sheets("Questionnaire")
                ' Gestion d'erreur, pour éviter un plantage si toutes les cellules
                ' sont vides au-delà de 3ème ligne, car l'intersection est alors vide.
                On Error Resume Next
                Intersect(.UsedRange, .UsedRange.Offset(NbFeuillesDonnees)).ClearContents
                On Error GoTo 0
                    With .Range("A1")
                        Set ReceptionDonnees = .Offset(NbFeuillesDonnees)
                            For i = 1 To NbFeuillesDonnees
                                RecupFeuille i, .Offset(i - 1)
                            Next
                    End With
            End With
    End Sub
    Dans la boucle évoquée, on appelle la procédure ci-dessous qui utilise un tirage de nombre au hasard pour déterminer les lignes à reporter. Comme le tirage peut désigner plus d'une fois la même ligne, on met en gras les lignes déjà reportées pour les repérer.

    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
     
    Sub RecupFeuille(i As Integer, AReporter As Integer)
    Dim f As Worksheet, NbLignes As Integer, NumLigne As Integer, c As Range
        Set f = Worksheets(i + 1)
        NbLignes = f.UsedRange.Rows.Count
        f.Range("A1:A" & NbLignes).Font.Bold = False
            Do Until AReporter = 0
                NumLigne = Int(Rnd * NbLignes) + 1
                Set c = f.Range("A" & NumLigne)
                    If Not c.Font.Bold Then
                        ReceptionDonnees = c
                        Set ReceptionDonnees = ReceptionDonnees.Offset(1)
                        c.Font.Bold = True
                        AReporter = AReporter - 1
                    End If
            Loop
    End Sub
    Edit : j'ai fait relativement peu de commentaires, car plusieurs pages seraient nécessaires pour tout expliquer en détail. Cependant, si tu veux des explications complémentaire, n'hésite pas à en demander.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 34
    Points : 21
    Points
    21
    Par défaut
    Super ! merci beaucoup Pierre Fauconnier et Bigalo,
    Je vais étudier vos codes pour me les approprier...

    A bientôt
    Robby

Discussions similaires

  1. Réponses: 16
    Dernier message: 09/02/2015, 18h47
  2. bouton qui affiche le texte
    Par Alex59126 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/02/2009, 08h53
  3. Réponses: 2
    Dernier message: 04/01/2009, 17h59
  4. Réponses: 1
    Dernier message: 25/10/2006, 22h03
  5. [FLASH 8] Bouton qui rempli un champ texte
    Par touriste13 dans le forum Flash
    Réponses: 2
    Dernier message: 10/05/2006, 10h26

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