PB incrémentation données au bon endroit

mikaconny

XLDnaute Nouveau
Bonjour,

voila j'ai 2 problèmes.
je travaille depuis quelques temps sur un outil de gestion des formations sur EXCEL-VBA.
j'avance étape par étape car je ne comprends par tout a fait ce langage...

1er problème:
Sur une feuille excel et au travers d'un formulaire, je renseigne dans des Textbox et Combobox un certains nombre de données.
Dès que je valide ces données, elles s’incrémentent dans une feuille puis s'insère une ligne au dessus.
Tout fonctionne correctement sauf dans la 1ere colonne.
je ne comprends pas pourquoi, on voit apparaître la donnée que j'ai renseigne puis des que la ligne s’insère, la donnée disparaît...???
je l'ai essayé sur d'autre feuille, ça fonctionne correctement mais sur la feuille en question le problème persiste.

2eme problème:
Toujours dans le même registre, dès que j'ai créer de nouvelles données, ces dernières viennent s’incrémenter dans 2 feuilles différentes.
J'ai créé un tableau identique sur ces 2 feuilles, mais la feuille2 récupère moins de données.
Sur la feuille1, par exemple, s'ajoute dans un tableau des données "global".
Sur la feuille2 s'ajoute ces mêmes données dans un tableau
Au fur et à mesure que j'alimente de données, notamment des NOMS dans ces 2 feuilles (par l’intermédiaire du formulaire), l'emplacement de ces NOMS n'est pas la même sur ces feuilles.
Par exemple, le NOM de "DUPONT" sera sur la feuille1 sur la ligne 6 et la feuille2 sur la ligne 4.

Mon problème, c'est dès que je veux AJOUTER de nouvelles données (par le biais d'un nouveau formulaire), ces dernières s’incrémentent correctement mais sur la même ligne des 2 feuilles.
Comment fusionner 2 NOMS de 2 feuilles différentes se trouvant sur 2 cellules différentes, dans une seule combobox, tout en modifiant ou ajoutant sur leur ligne correspondante, dès que je valide sur un bouton???

je mets le code en dessous:

Option Explicit

Dim WS1 As Worksheet 'Variable pour un Objet Worksheet en PUBLIC pour tous les Controls de ce UserForm
Dim WS2 As Worksheet

Dim Nom As String 'Variable poyr récupérer l'ancienne valeur pour le Bouton Modif
Dim numéro As String 'idem
Dim dateobt As String 'idem
Dim recyclage As String 'idem

Const T As String = ""

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'INITIALISATION DU USERFORM============================================================================
Private Sub userform_initialize()
Me.Caption = T
Ini
Call SuppressionCroix(Me)
End Sub
Private Sub Ini()
Dim CTRL As Control 'Variable pour la collection des controls
Dim L As Integer 'Variable pour connaitre le numéro de derniere ligne
Dim i As Integer 'Variable pour connaitre incrémenter les Data

'On Vide tous les Controls
For Each CTRL In Me.Controls
If TypeOf CTRL Is MSForms.TextBox Or TypeOf CTRL Is MSForms.ComboBox Then
CTRL = ""
End If
Next CTRL

Me.ComboBox1.Clear 'On vide les précédentes données

Set WS1 = ThisWorkbook.Sheets("GLOBAL") 'On identifie l'objet pour la feuille de travail
Set WS2 = ThisWorkbook.Sheets("PSE")

L = WS1.Range("A65536").End(xlUp).Row 'On identifie la dernière ligne en partant du bas
L = WS2.Range("A65536").End(xlUp).Row

'Pour éviter les fash d'écran pour le select ci dessous
Application.ScreenUpdating = False

For i = 4 To L 'Boucle départ 4 (Ligne 4 de la feuille, jusqu'à dernière
With Me.ComboBox1 'Avec la ComboBox1
.AddItem WS1.Range("F" & i) 'On ajoute dans la ComboBox toutes les valeurs, cellules après cellules
.AddItem WS2.Range("F" & i)
End With
Next i 'Next pour poursuivre la boucle pour le i suivant

Application.ScreenUpdating = True
End Sub

' A l'activation on démarre le focus sur la Première Combobox
Private Sub UserForm_Activate()
Me.ComboBox1.SetFocus
End Sub

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'MISE A JOUR DES VALEURS DEPUIS LA COMBOBOX1===========================================================
Private Sub ComboBox1_Click()
If Me.ComboBox1.ListIndex = -1 Then Exit Sub 'ON sort si pas de sélection

TextBox1 = WS1.Range("R" & Me.ComboBox1.ListIndex + 4) 'On alimente les données correspondant à la ligne
TextBox2 = WS1.Range("S" & Me.ComboBox1.ListIndex + 4) 'de l'index de la Combobox + 4 pour la ligne de Feuille
TextBox3 = WS1.Range("T" & Me.ComboBox1.ListIndex + 4) 'de l'index de la Combobox + 4 pour la ligne de Feuille
TextBox1 = WS2.Range("L" & Me.ComboBox1.ListIndex + 4) 'On alimente les données correspondant à la ligne
TextBox2 = WS2.Range("M" & Me.ComboBox1.ListIndex + 4) 'de l'index de la Combobox + 4 pour la ligne de Feuille
TextBox3 = WS2.Range("N" & Me.ComboBox1.ListIndex + 4) 'de l'index de la Combobox + 4 pour la ligne de Feuille

'ici on initialise les Variable pour mémoriser le valeur précédente en cas de Modif
With Me
Nom = .ComboBox1
numéro = .TextBox1
dateobt = .TextBox2
recyclage = .TextBox3
End With
End Sub

'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'MODIFICATION DE VALEUR DU USERFORM====================================================================
Private Sub CmdModif_Click()
Dim CTRL As Control 'Variable pour la collection des controls
Dim i As Integer
Dim Response As Byte

'ici une boucle sur tous les controls, si un est vide on sort et on set le focus dessus
For Each CTRL In Me.Controls
If CTRL = "" Then MsgBox "Donnée Incomplete", vbCritical, T: CTRL.SetFocus: Exit Sub
Next CTRL

'Si le User tente de change le nom de la ComboBox en Mode Modification
If Me.ComboBox1.ListIndex = -1 Then
MsgBox "Attention comme dans toute Base de Données, le Nom est la Clef de L'enregistrement" & vbCrLf & _
"Ce qui implique que vous ne pouvez pas Modifier cette Clef. " & vbCrLf & _
"Par conséquent pour un changement de Nom vous devez Supprimer l'enregistrement", vbCritical, T & " Warning System Integrity"
Exit Sub 'ON sort si pas de sélection
End If

'Ici une cascade de IF si les controls non pas été changés...
If Nom = ComboBox1 Then
If numéro = TextBox1 Then
If dateobt = TextBox2 Then
If recyclage = TextBox3 Then
MsgBox "Hé alors vous croyez que je ne vais pas voir que vous n'avez rien changé", vbCritical, T & " LOL LOL LOL !!!"
Exit Sub
End If
End If
End If
End If

'Ici un message demandant d'accepter les changement en les listant
Response = MsgBox("Les coordonnées de " & vbCrLf & vbCrLf & _
"Old Nom : " & vbTab & Nom & vbCrLf & _
"New Nom : " & vbTab & ComboBox1 & vbCrLf & vbCrLf & _
"Old numéro : " & vbTab & numéro & vbCrLf & _
"New numéro : " & vbTab & TextBox1 & vbCrLf & vbCrLf & _
"Old dateobt : " & vbTab & dateobt & vbCrLf & _
"New dateobt : " & vbTab & TextBox2 & vbCrLf & vbCrLf & _
"Old recyclage : " & vbTab & recyclage & vbCrLf & _
"New recyclage : " & vbTab & TextBox3 & vbCrLf & vbCrLf & _
"Acceptez vous ces changements ? ", vbQuestion + vbOKCancel, T & " Modification de : " & Nom)

'Si Réponse OK on continue
If Response = 1 Then

'ici avec la Feuille on va faire :
With WS1
.Range("F" & Me.ComboBox1.ListIndex + 4) = ComboBox1 'On écrit dans chaque colonne les valeurs des différents controls
.Range("R" & Me.ComboBox1.ListIndex + 4) = TextBox1 'Idem
.Range("S" & Me.ComboBox1.ListIndex + 4) = TextBox2 'Idem
.Range("T" & Me.ComboBox1.ListIndex + 4) = TextBox3 'Idem
With WS2
.Range("L" & Me.ComboBox1.ListIndex + 4) = TextBox1 'Idem
.Range("M" & Me.ComboBox1.ListIndex + 4) = TextBox2 'Idem
.Range("N" & Me.ComboBox1.ListIndex + 4) = TextBox3 'Idem
End With
End With
'On evoie un message de confirmation
MsgBox "Opération accomplie", vbInformation, T

Ini 'On lance la réinitialisation du UserForm (Macro en haut du Module)

'Si Réponse Annulation on envoie un message et on a rien fait
Else: MsgBox "Opération annulée", vbInformation, T
End If
End Sub


merci d'avance...
 

Staple1600

XLDnaute Barbatruc
Re : PB incrémentation données au bon endroit

Bonjour à tous

mikaconny
Tu poses des questions puis tu oublies les conseils qu'on te donne...
Par exemple celui-ci que j'ai récemment donné
mikaconny
si vous pouvez m'aider j'exploserais de joie


Et si tu nous faisais plutôt la joie de joindre dans ta discussion une copie anonymisée de ton fichier Excel ?
Cela nous permettrait de tester le code VBA présent dans ce fichier sur nos PC!
Et surtout cela nous éviterait le désagrément de lire un post long comme une journée sans pain , rempli de lignes de code VBA non formatées* qui tel quel ne servent à rien d'autre que nous piquer les yeux ;)

NB: * : pour formater le code VBA, voir et appliquer le conseil dans ma signature ;)

NB
: Il eut été plus simple de continuer dans le fil initial, non ?
https://www.excel-downloads.com/thr...u-affectation-de-propriete-incorrecte.225611/

PS: tu as aussi zappé mon conseil pour formater ton code VBA dans tes messages, on dirait ;)
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
227

Statistiques des forums

Discussions
312 103
Messages
2 085 325
Membres
102 862
dernier inscrit
Emma35400