écrire à la suite des autres des données

nico7bplus

XLDnaute Nouveau
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

  • change controle Kosmepol_EN_V2.xlsm
    121.3 KB · Affichages: 55

Papou-net

XLDnaute Barbatruc
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:

Papou-net

XLDnaute Barbatruc
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

  • Copie de change controle Kosmepol_EN_V2-1.xlsm
    111.4 KB · Affichages: 55

nico7bplus

XLDnaute Nouveau
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
 

nico7bplus

XLDnaute Nouveau
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

  • change controle Kosmepol_EN_V3-1.xlsm
    129.7 KB · Affichages: 43

Discussions similaires

Statistiques des forums

Discussions
312 360
Messages
2 087 598
Membres
103 604
dernier inscrit
CAROETALEX59