Transfert irrégulier de données avec plusieurs critères

Bonjour à tous.

Aujourd’hui, un autre obstacle m’emmène de nouveau vers vous afin de demander votre aide.

Il s’agit du transfert irrégulier des données depuis mon UserForm vers ma base de données choisie (Il y en a trois (03) feuilles).

Sur mon UserForm, J’ai :

1 ComboBox où sont mes feuilles à choisir,

1 ComboBox où sont les trimestres à choisir,

1 ComboBox où sont les mois à choisir,

1 ListView où doivent s’afficher les données de ma base en fonction du trimestre choisi,

1 TextBox où je dois insérer le code du mois choisi,

2 TextBox qui me servent à saisir les données que je voudrais transférer sur ma base de données (feuille choisie) dans les cellules du (mois choisi),

1 ListBox où doit s’afficher les noms des plantes et

1 ListBox où doit s’afficher la date de repiquage des plantes

Les conditions de transfert dépendent de la zone, du trimestre, du code et du mois choisi.

Lorsque les conditions sont remplies, je saisis des notes dans la Textbox4 et dans la TextBox5 et j’appuie sur la touche {ENTRE} du clavier pour transférer lesdites notes vers la feuille choisie dans la ComboBox1 dans les colonnes du mois choisi dans la combobox3

J’ai essayé d’adapter certains codes postés sur le forum, mais en vains.

(s'il y'a d'autres possibilités de procéder, je suis preneur).

Merci d’avance.

Bonjour,

Déjà deux choses que je ferais

1. Défusionner les colonnes F et G, aucune raison de fusionner ces deux colonnes. Puis fusion = problème avec VBA
2. Votre code initialize comme ceci. Pas besoin de faire des boucles, on peut être plus direct.

Private Sub UserForm_Initialize()
Dim dlg As Byte

With ThisWorkbook.Worksheets("CODES")
    dlg = .Range("A" & Rows.Count).End(xlUp).Row
    If dlg >= 2 Then ComboBox1.List = .Range("A2:A" & dlg).Value
    dlg = .Range("F" & Rows.Count).End(xlUp).Row
    If dlg >= 2 Then ComboBox2.List = .Range("F2:F" & dlg).Value
    dlg = .Range("C" & Rows.Count).End(xlUp).Row
    If dlg >= 2 Then ComboBox3.List = .Range("C2:C" & dlg).Value
End With
End Sub

Cordialement

Bonjour Dan. pour charger les COMBOBOX, votre proposition est plus simple.

Ok.
Autres changements à faire :

1. Supprimez Dim NomTS au dessus des codes
2. votre code Combobox1 comme ceci :

Private Sub ComboBox1_Change()
Dim NomTS As String

With ThisWorkbook.Sheets(ComboBox1.Value)
    NomTS = .ListObjects(2)
    Set TS = .ListObjects(NomTS)
End With
Call AFFICHER_les_données_sur_LV
End Sub

3. Dans les deux codes Private Sub AFFICHER_les_données_sur_LV() et Private Sub listview1_click(), ajoutez le chiffre 1 derrière toutes les LISTVIEW (donc vous devez avoir LISTVIEW1

4. Dans le code Private Sub AFFICHER_les_données_sur_LV(), remplacez Dim C as integer par --> Dim c as byte

5. Des choses curieuses

- Pourquoi votre textbox3 est-elle nommée comme ceci "Textbox3texbox3" ??
- Vos Listbox1 et Listbox2 : elles n'affichent rien à la selection dans la listview. Pourquoi des lIstbox d'ailleurs ? Une textbox ferait ce que vous demandez.

Bonjour Dan. Excusez-moi pour le retour tardif.Nous avons été privé de la connexion à un certain moment chez nous ici .

j'ai effectué toutes les suggestions que m'aviez faites. J'ai remplacé mes deux Listbox par des TextBox.

- Les données s'affichent sur la listview1 comme voulu.

Toutefois, lorsque je clique sur ma listview1 c'est la date de repiquage qui s'affiche dans la TextBox1 en lieu et place du nom des plantes.

Dans la TextBox2, au lieu que se soit la date de repiquage qui s'affiche, C'est la valeur de la colonne suivante qui s"affiche.


Bonjour

Pas de soucis pour le retard c'est le WE aussi...

J'ai remplacé mes deux Listbox par des TextBox.

Ok. Donc textbox1 pour les plantes et Texbox2 pour la date

Toutefois, lorsque je clique sur ma listview1 c'est la date de repiquage qui s'affiche dans la TextBox1 en lieu et place du nom des plantes.....

Logique je n'avais encore donné le correctif. Voici le code à modifier

Private Sub listview1_click()

With Me
    .TextBox1.Value = .ListView1.SelectedItem
    .TextBox2.Value = .ListView1.SelectedItem.ListSubItems(1)
End With
lig = ListView1.SelectedItem.Index
End Sub

Concernant le code que je vous ai donné dans mon post précédent (https://forum.excel-pratique.com/s/goto/1158876), remplacez-le par celui ci-dessous

Private Sub ComboBox1_Change()
Dim NomTS As String
Dim i As Byte

With ThisWorkbook.Sheets(ComboBox1.Value)
    NomTS = .ListObjects(2)
    Set TS = .ListObjects(NomTS)
End With

For i = 1 To 3
    Me.Controls("Textbox" & i) = vbNullString
Next i

Call AFFICHER_les_données_sur_LV
End Sub

Code modifié car si vous changez Zone, il faut vider aussi les deux textbox
J'ai considéré que la textbox3 (code) était aussi à vider et que si vous changez la zone cette textbox doit aussi être remise à blanc.

A noter qu' il faut analyser si toutes les combo et textbox ne doivent pas être réinitialisées.

Crdlt

Bonjour Dan. Merci beaucoup pour votre aide. J'ai effectué les modifications. Les Textbox1 et 2 son correctement chargées quand je clique sur ma listview1.

PS: Je vais encore vous déranger si vous me le permettez pour le reste de mon travail.

Comment faire pour transférer les données que je saisis dans les TextBox4 et TextBox5 sur ma feuille (zone) choisie dans ma Combobox1 ?

Merci d'avance

Re

Qu'y a-t-il comme info dans vos textbox4 et 5 ? Ce sont des dates ou autre chose ?

Bonjour Dan. Franchement, nous avons un problème de connexion actuellement dans notre région.

Dans les TextBox4 et 5, ce ne sont pas pas des dates. Il s'agit des relevés mensuels de l'évolution en longueur (dans la TextBox4 )et en largeur(dans TextBox5). Si je saisis lesdites données et j'appuie sur la touche entrée, elles doivent être stockées sur la feuille (zone) choisi dans la combobox1.

Franchement, nous avons un problème de connexion actuellement dans notre région.

Pas grave.


1. Placez ce code ci-dessous dans l'usf. Il sera exécuté lorsque vous aurez complété la textbox5.
Dans l'ordre j'ai supposé que vous choisissez le mois, puis vous complétez latextbox4 et ensuite la textbox5

Private Sub TextBox5_AfterUpdate()
Dim i As Byte

If lig = 0 Then Exit Sub
Select Case ComboBox3.ListIndex
    Case Is = 0: i = 4
    Case Is = 1: i = 6
    Case Is = 2: i = 8
End Select

With TS
    .DataBodyRange(lig, ComboBox3.ListIndex + i) = TextBox4.Value
    .DataBodyRange(lig, ComboBox3.ListIndex + i + 1) = TextBox5.Value
End With

Call ComboBox3_Change
End Sub

2. Ajoutez le code ci-dessous qui effacera les données en textbox4 et 5 après mise à jour du tableau

3. A modifier : Dans les déclarations de variable en dessous de la ligne "Option explicit", vous avez juste besoin de ces deux-ci

Dim TS As ListObject
Dim lig As Integer

Vous pouvez supprimer toutes les autres à cet endroit

Rem : la combobox2 ne sert pas. Reste la textbox3 pour laquelle je ne sais pas à quoi elle sert. Si vous la supprimez, il faut modifier le code combobo1_change et remplacer le 3 par 2 dans la boucle For i =1 to...

Si ok et terminé, pensez à

Crdlt

Bonsoir Dan.

Dans votre instruction n⁰2, 👇👇 vous dites:

2. Ajoutez le code ci-dessous qui effacera les données en textbox4 et 5 après mise à jour du tableau

je suppose que c'est le code

Call ComboBox3_Change

Mais il n'est pas là. Je me dis que vous l"aviez oublié.

1.Pour les variables, j'ai procédé aux différents changements.

2. La TextBox3 était réservée pour entrer un code qui donne accès aux colonnes qui correspondent au mois choisi dans la Combobox3.

si c'est le moi de janvier qui est choisi, le code pour accéder aux colonnes H et I de la zone 1 sera AA

si c'est le moi de FÉVRIER qui est choisi, le code pour accéder aux colonnes K et L de la zone 1 sera BB.

si c'est le moi de mars qui est choisi, le code pour accéder aux colonnes N et O de la zone 1 sera CC.

Je suis entrain de voir si c'est possible de le faire à travers une inputBox.

Bonjour

1. Code combobo3

Mais il n'est pas là. Je me dis que vous l"aviez oublié.

Oups désolé effectivement je suis allé trop vite...

Le voici

Private Sub ComboBox3_Change()
TextBox4 = vbNullString
TextBox5 = vbNullString
End Sub

2.

La TextBox3 était réservée pour entrer un code qui donne accès aux colonnes qui correspondent au mois choisi dans la Combobox3.

si c'est le moi de janvier qui est choisi, le code pour accéder aux colonnes H et I de la zone 1 sera AA....

Je ne vois aucun intérêt puisque les colonnes H et I et suivante sont complétées avec les textbox4 et 5
Pour moi ce code ne sert plus
Du coup vous pouvez supprimer la combo2 et la textbox3. Si oui, attention à la petite modification à faire dans la boucle dont je vous ai parlé dans mon post précédent

Bonsoir Dan.

On vient de rétablir la connexion dans notre zone après que forte pluie aient endommagé les câbles.

j'ai donc pu effectuer les modifications.

Cependant le code ne marche pas. J'ai ajouté un commandButton avec le code ci-dessous pour transférer sur un clic les données sur ma zone choisie.

Private sub Commandbutton1_Click()
Call TextBox5_AfterUpdate
End sub

Mais lorsque je clique sur le bouton, les TextBox4 et 5 se vident sans que les notes saisies ne soient transféré.

Merci

Bonjour,

Cependant le code ne marche pas. J'ai ajouté un commandButton avec le code ci-dessous pour transférer sur un clic les données sur ma zone choisie.

Exact c'est dû au fait que lorsque vous validez après avoir complété la Textbox5, le code Private Sub TextBox5_AfterUpdate() est à nouveau exécuté une fois que l'on vide la textbox avec le code combobox3_change.

Si vous placez un bouton sur l'USF, c'est le plus simple :

- Remplacez juste la ligne Private Sub TextBox5_AfterUpdate() par Private Sub CommandButton1_Click()
- ensuite dans ce code, ajoutez ceci juste en dessous de l'instruction Call ComboBox3_Change

lig = 0

Refaite un essai

Bonjour Dan. Oui, ça marche maintenant.

Mais, il toujours souci. Je remarque qu'après avoir cliqué sur le premier nom de ma listview1 ent enregistrer les notes du nom choisi, les TextBox4 et 5 se vident. ( Parfaitement ce que j'ai souhaité).

Toutefois, pour aller au nom suivant, je dois repartir choisir le 2e nom. Est il possible de faire en sorte qu'après avoir entré les notes qui concernent le 1er nom de ma listview1, je passe automatiquement au 2e nom sans avoir à cliqué à tout moment?

Toutefois, pour aller au nom suivant, je dois repartir choisir le 2e nom. Est il possible de faire en sorte qu'après avoir entré les notes qui concernent le 1er nom de ma listview1, je passe automatiquement au 2e nom sans avoir à cliqué à tout moment?

Plus compliqué cela et je pense que ce n'est pas une bonne idée.

- Comment on sait par quel nom vous commencez dans la listview
- Comment on sait que vous ne devez pas remplir pour chaque moi avec le même nom ? Exemple pour un nom vous devez remplir des infos pour 3 mois...

Oui, c'est pertinent ce que vous dites.

Je vais garder ça ainsi. Voilà donc qui met fin à la requête.

Merci bien pour votre considérable aide qui m'a permise Franchir un gros obstacle.

Cordialement. By.🙏🙏🙏

Re

Ok je pense que c'est mieux mais si toutefois vous voulez vraiment cette solution,
- Allez dans le code Private Sub CommandButton1_Click()
- Juste avant le END SUB, en lieu et place de la ligne --> lig = 0, mettez ceci

If lig > ListView1.ListItems.Count-1 Then lig = 0: Exit Sub
ListView1.ListItems(lig + 1).Selected = True
Call listview1_click

Cordialement

Parfait. Ça marche correctement

Merci.👍👍

Rechercher des sujets similaires à "transfert irregulier donnees criteres"