écrire à la suite des autres des données

  • Initiateur de la discussion Initiateur de la discussion nico7bplus
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

N

nico7bplus

Guest
Bonjour à tous,
Voilà, je connais bien excel mais pas du tout le VBA. Je viens de créer un fichier avec différents formulaires et après avoir passé de longues heures (et nuit 🙂 ) j'arrive à faire quelquechose de "potable". Mais maintenant je bloque malgré mes recherches. J'explique (voir fichier joint):
Dans me formulaires (userform) Safety et Quality, il a des questions. A chaque question, il y a 1 CheckBox. Si le checkbox est vrai, alors je veux qu'il ecrive la question associée dans la feuille intitulée "SHAP, et surtout les 1 à la suite des autres. Et c'est là que j'ai des problèmes. Je n'arrive pas à faire à la suite des autres il ne veut pas me l'écrire malgré ma boucle et la fonction "lignefin".
Bref, je suis un peu perdu et votre aide me serait précieuse.
Merci!!
 

Pièces jointes

Re : écrire à la suite des autres des données

Bonjour nico7bplus, et bienvenue à toi,

Il y a moyen de faire beaucoup plus efficace avec des modules de code, mais comme tu ne connais pas beaucoup le VBA, je me suis contenté de reprendre ton code en le raccourcissant au moyen de boucles. Je l'ai fait pour le module "Safety", je te laisse le soin de le reproduire sur les trois autres concernés.

Code:
Private Sub UserForm_Activate()
Dim Chk As Byte
For Chk = 1 To 23
    safety.Controls("CheckBox" & Chk).Value = False
Next
End Sub


Private Sub CommandButton1_Click()
Dim LigneFin As Long, Chk As Byte
LigneFin = Worksheets("SHAP").Range("C" & Rows.Count).End(xlUp).Row + 1
For Chk = 1 To 23
    If safety.Controls("CheckBox" & Chk).Value = True Then
        Range("C" & LigneFin) = safety.Controls("TextBox" & Chk + 1).Text
        LigneFin = LigneFin + 1
    End If
Next
safety.Hide
Quality.Show
End Sub

Espérant t'avoir aidé.

Cordialement.
 
Dernière édition:
Re : écrire à la suite des autres des données

RE :

J'ai encore simplifié le code :

J'ai créé deux macros (UfAct et Enregistrer) dans le Module2.

Chacun des formulaires de saisie fait appel à UfAct en passant son nom en paramètre.

Chaque bouton (Next et End) font appel à la macro Enregistrement en passant le nom du formulaire appelant.

Tout ceci simplifie grandement ton code initial et présente l'avantage d'une évolution ultérieure plus simple, à l'occasion. Tu peux aussi ajouter ou supprimer des checkbox sans intervenir sur les macros, qui font elles-même le décompte des contrôles.

Bonne journée.

Cordialement.
 

Pièces jointes

Re : écrire à la suite des autres des données

C'est génial, ça fait exactement ce que je voulais! MERCI!!!!!!
Je vais maintenant faire de même pour mes autres pages.
Je me mets à la programmation et c'est vraiment un domaine passionant et prenant!

Encore un Grand Merci à toi Papou-Net
 
Re : écrire à la suite des autres des données

Bonjour je reviens car je n'arrive pas à faire ce que je veux et je me sens bien seul devant un problème si simple.
Dans mon fichier, onglet étape 0 j'ai mis une condition (cellule I43): si toutes réponses (des celulles I37:I42)= NON alors c'est la fin de la procédure et je voudrais cependant garder la tracabilité de ce qui a été fait dans l'onglet database.
Donc si reponses = non alors je souhaite écrire la écrire la date, le nom et la description (ces informations se trouvent dans l'onglet "Start" et les écrire dans l'onglet "database".
Quand le faire? au moment ou on clique sur le bouton next du userform "Etape1bis"

C'est un peu compliqué à expliqué mais le fichier est joint pour plus de clarté.
J'ai essaye avec ça mais sans succès:

Sub Database(UFRM As UserForm)
' Ce module reporte les lignes sélectionnées du formulaire appelant (UFRM)
Dim LigneFin As Long, Chk As Object
LigneFin = Worksheets("Database").Range("A" & Rows.Count).End(xlUp).Row + 1

If Sheets("Start").Range("I43").Value <> "" Then
Sheets("database").Activate
Sheets("Database").Range("A" & LigneFin) = (Etape0.TextBox2.Text)
LigneFin = LigneFin + 1

End If
Next
End Sub
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
358
Retour