Interaction macro utilisateur

Bonjour,

Voilà ce que j'aimerai faire:

Peut-être créer un bouton où l’utilisateur va entrer le nom de l'onglet qu'il veut remplir et après on va comparer le nom de cet onglet aux onglets déjà existants dans l'excel ici joint. Si pas même nom alors on passe à l’onglet suivant . Si même nom alors on amène l’utilisateur à l'onglet (ou on lui dit simplement qu’elle existe).

Si le nom de l'onglet qu'il demande n'existe pas dans les onglets présents dans l'excel alors il faut le créer à partir de template (qui est la structure de base d'un onglet.

Autre possibilité : on propose direct à l’utilisateur les onglets existants et après il n’a qu’à choisir. Alors on l’amène à la colonne de l'onglet où il doit travailler.

En instructions algorithmique, ça pourrait donner ça:

  • lire le nom de l'onglet (= nom_traitement)
  • boucle sur tous les onglets
  • récupère le nom de l'onglet
  • si nom onglet "différent" nom_traitement alors
créer onglet

fin si

- remplir l'onglet (j'ai déjà le code qui permet le remplissage)

fin boucle

Voilà ce que j'ai pour l'instant. Je veux garder le même style basique d'écriture du code car ça m'est plus facile à comprendre. Vu que je suis débutant, ces fonctions simples de VBA me satisfont. Mais le code qui suit n'est pas la solution de mon problème mais seulement un exemple de ce que j'attends.

Sub nom()

Dim nom_onglet As String

Dim occurence As Boolean

nom_onglet = Range("AJ20")

MsgBox (nom_onglet)

occurence = False

MsgBox (Worksheets.Count)

For i = 2 To Worksheets.Count

If ((Worksheets(i).Name) = nom_onglet) Then

' MsgBox ((Worksheets(i).Name) & " " & "variante déjà définie")

occurence = True

' Else

' MsgBox ((Worksheets(i).Name) & " " & "variante non définie; passage à la création")

End If

Next i

If (occurence = False) Then

MsgBox ("Création de l'onglet : " & nom_onglet)

Else

MsgBox ("Onglet déjà existant!!!")

End If

' worksheets(nom_onglet).activate()

End Sub

Merci de votre aide J'en ai vraiment besoin

17classeur2.xlsm (40.46 Ko)

Salut,

Dans le fichier ci-joint, j'ai placé une macro derrière le nouveau bouton mis en place qui correspond normalement à l'une de tes demandes :

Option Explicit

Sub aa()
Dim i As Byte, Nom_Onglet As String

Nom_Onglet = InputBox("Quel est le nom de l'onglet choisi ?")

For i = 1 To Sheets.Count
    If Sheets(i).Name = Nom_Onglet Then
        Sheets(i).Activate
        Exit Sub
    End If
Next i

Sheets("Template").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = Nom_Onglet

End Sub

Parmi tes autres indications, il y a un tas de directions dans lesquelles on pourrait partir, mais tu dois être plus précis sur tes souhaits.

Cordialement.

34classeur2-v1.xlsm (46.37 Ko)

Je te remercie pour ce code efficace et avec un langage simple à comprendre.

Cependant je ne sais pas comment on crée un bouton comme tu l'as fait. Je ne sais que visualiser le code. Peut-tu m'expliquer comment tu as fait? Merci

Je sais pas si c'est une erreur mais quand je rentre par exemple "onglet 1" avec le "o" minuscule ça affiche "débogage". On ne peut pas faire en sorte que "o" minuscule et "O" majuscule soit compris de la même manière par la macro?

Ce qu'il faudrait, c'est par exemple que lorsque l'utilisateur va entrer un nom d'onglet, qu'il y ait une liste déroulante des onglets déjà existants. Ca serait pratique.

Merci beaucoup

Cordialement

Re,

Pour créer un bouton, tu vas dans le menu ‘Développeur / Insérer’ et tu choisis l’icône qui affiche ‘Bouton’.

Pour le problème des majuscules, tu remplaces la ligne If Sheets(i).Name = Nom_Onglet Then par If LCase(Sheets(i).Name) = LCase(Nom_Onglet) Then.

Je t’ai bien dit que tes demandes partaient un peu dans toutes les directions. Tu pourrais avoir un bouton qui te permet d’afficher toutes les feuilles et d’en choisir une qui serait sélectionnée. Mais alors si la feuille n’existe pas il faudrait passer par un autre bouton pour la créer. Ou est-ce que tu pensais avoir un seul bouton pour ces deux actions ? Cette dernière possibilité me semble un peu ''compliquée pour pas grand chose''.

A te relire.

Re,

Merci pour l'astuce des majuscules, ça marche. Et je sais maintenant créer un bouton.

Cela ne te dérangerait pas si tu m'expliquait un peu le code car certains points me restent flous, voilà ce que je n'ai pas compris:

que signifie Byte?

que signifie Sheets.Count?

Pourquoi mettons-nous Else alors qu'il n'y a pas d'autre test?


Concernant mes idées un peu floues:

le système que tu proposes est bien. Une fois que l'utilisateur a cliqué sur le bouton, il rencontre cette fenêtre qui demande "quel est le nom de l'onglet ...?", jusque là ça va et à ce moment là j'aimerai bien que l'endroit où le texte soit entré permette également de dérouler la liste des onglets déjà présents (pour éviter à l'utilisateur d'entrer avec des erreurs le nom de l'onglet qu'il recherche, ainsi avec la liste déroulante, il n'aura qu'à cliquer sur l'onglet qui lui plaît).

Ca te semble toujours aussi flou ou difficile à faire.

Merci

Re,

En plaçant ton curseur sur un mot clef dans l’explorateur VBA et en tapant F1, tu obtiens beaucoup d’informations très utiles de l’Aide Excel.

Pour Byte, voici le résultat : "Les variables de type Byte sont stockées sous la forme d'un nombre de 8 bits (1 octet unique), non signé, compris entre 0 et 255". Comme je pensais que tu n’auras jamais plus de 255 feuilles dans ton classeur, je me suis dit que ce type de variable suffisait.

L’instruction Count compte quelque chose. Sheets.Count compte le nombre de feuille d’un fichier.

Lors de mes essais j’ai placé un Else dont je n’ai finalement plus eu besoin. Je m’en suis rendu compte lors de la relecture de mon message et j’ai immédiatement changé le code placé sur ton fil et dans mon fichier ; fichier que j’ai immédiatement remplacé (moins de 10 minutes après). Mais tu avais déjà ouvert et apparemment enregistré mon premier fichier erroné chez toi. J’avais bien remarqué que tu étais connecté lors de mon échange de fichiers, mais j’espérais que tu n’avais pas déjà ouvert mon premier fichier.

J’ai remarqué que tu posais pratiquement les mêmes questions sur un fil parallèle. Je trouve que ce n’est pas une si bonne idée. Je te prierais donc d’indiquer le présent fil comme résolu et de continuer ta discussion sur cet autre fil. Normalement sur ce Forum on dit : un problème = un fil.

Amicalement.

Merci pour tes explications.

J'ai fait ce que tu m'as dit. J'ai validé un des deux fils. Et avant que je valide celui-là, tu penses quoi de la dernière proposition que je t'ai faite?

Amicalement

Tu as ajouté une dernière question juste au moment où je plaçais moi ma réponse. Je ne l'ai donc pas vue.

Dans le fichier ci-joint, quelque chose qui pourrait te convenir.

A te relire.

27classeur2-v2.xlsm (49.28 Ko)

Merci Yvouille, ça me convient pour le moment

Amicalement

Salut,

On est d'avis assez différent ; moi je pensais que tu allais trouver mon travail vraiment très bien alors que tu dis : "ça me convient pour le moment"

Désolé de ne pas avoir été à la hauteur de tes attentes J'essaierai de faire mieux la prochaine fois.

Salutations.

Je ne voulais pas donner cette impression désolé. En réalité j'ai bien aimé ton programme. En plus il était simple à comprendre

et assimiler.

Rechercher des sujets similaires à "interaction macro utilisateur"