Archiver puis récupèrer des données avec VBA

  • Initiateur de la discussion Initiateur de la discussion piga25
  • 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 !

piga25

XLDnaute Barbatruc
Bonjour,

Encore moi, après de moult essais je n'y arrive pas, donc si quelqu'un peut m'aiguiller cela serai très sympa.

Voici mon problème:
Dans ma feuille "Formulaire" il y a plusieurs boutons qui permettent d'archiver des données. Pour le moment, cela fonctionne uniquement avec la feuille "Archives" (Code dans Module 2). J'arrive bien à trouver la bonne ligne sur la feuille "Recap" mais les données ne s'y inscrivent pas (Code dans Module 4).😕
Avec le bouton Récupérer, j'utilise pour l'instant une boite de dialogue située sur la feuille DlgArchive. J'aimerai la changer par l'UserForm1 qui lui comprend une ListBox avec 3 colonnes, et là aussi je coinse 😕.

Le but est d'archiver les données du Formulaire dans la feuille Archives et de renseigner la feuille Recap qui elle sert pour des Statistiques.
Merci
 

Pièces jointes

Dernière édition:
Re : Archiver puis récupèrer des données avec VBA

Bonjour,

J'avance un peu, maintenant je peux archiver dans les feuilles "Archives" et "Recap".
Il est vraissemblable que le code pourra être optimisé, afin de formater les cellules lors de la copie dans la feuille "Recap" (encadrement, fond couleur ...)

Il ne me reste juste le problème de l'Userform.

Ci joint mon fichier modifié
Merci
 

Pièces jointes

Re : Archiver puis récupèrer des données avec VBA

Bonjour,

peut être ainsi :
Code:
Dim tablo As Variant
tablo = Range("A7:C" & Range("A65536").End(xlUp).Row)
ListBox1.List = tablo

attention peut être lieu de préciser le nom de la feuille devant les objets "range" si pas feuille active..;

bon après midi
@+
 
Re : Archiver puis récupèrer des données avec VBA

Bonjour Pierrot93,

En effet le code m'affiche bien les trois colonnes dans la listebox.

Par ce que je recherche exactement, c'est après avoir sélectionner justement une ligne dans cette listebox, qu'elle me renvoie soit par double clic, soit en cliquant sur le bouton (CommandButton1), la valeur de la variable zz, qui elle me permet de récupérer les données, comme elle me le fait actuellement dans la boite de dialogue DlgArchive
 
Re : Archiver puis récupèrer des données avec VBA

Re,

C'est vrai que c'est clair pour moi, mais en relisant bien ma demande j'ai un doute.

Voila ce que je souhaite faire.
Remplacer la boite de dialogue qui est dans la feuille DlgArchive par l'Userform1.
En effet dans la boite de dialogue, je n'ai qu'une seule colonne qui peut m'afficher les données que d'une colonne de la feuille "Archives". Actuellement c'est la colonne B qui s'affiche car c'est la plus parlante entre les colonnes A - B - C.
Comme la liste va être longue avec des doublons en colonne B, je souhaite faire afficher dans la listebox de l'Userform1 les trois colonnes A-B-C. C'est bon avec ta proposition du poste 3.

Par contre, je n'arrive pas a effectuer la même manip avec l'Userform qu'avec la boite de dialogue.
En résumer faire la même chose qu'avec la boite de dialogue mais avec l'Userform, c'est juste pour avoir une listBox multi colonnes qui pourra éventuellement être triée, ce qui me semble impossible à faire avec la boite de dialogue (Boite de dialogue Microsoft Excel 5).

Merci
 
Re : Archiver puis récupèrer des données avec VBA

Bonjour,

merci Si... cela fonctionne en partie. Bien les boucles - Pour ma part j'avais pensé à faire un copier coller avec transposé.

En effet j'ai adapté ton code à mon UserForm définitif et j'ai deux petits souci dessus, la ligne sélectionnée ne se met pas en surbrillance, et la première ligne celle des entête n'est pas à la bonne place.
 

Pièces jointes

Re : Archiver puis récupèrer des données avec VBA

Bonjour Si...

Voir Si... c'est mieux : C'est même très bien. Parfait je n'en demandais pas autant. Merci.

Juste un dernier petit point, pour éviter de renseigner le numéro des rencontres (Sur formulaire en D1) y a t'il un moyen de le faire automatiquement lorsque l'on clique sur le bouton "Archiver". Il y aurai une boite de dialogue qui proposerait 02 choix, Soit de modifier la feuille avec le numéro existant, soit de créer une nouvelle feuille et là le numéro serait pris automatiquement.
 
Re : Archiver puis récupèrer des données avec VBA

Bonjour,

Je pense avoir trouvé pour mettre la numérotation en automatique lorsqu'il s'agit d'une nouvelle rencontre.
Le début du code modifié :
Code:
 Option Explicit
Const MSGNREXIST As String = "Ce numéro de RENCONTRE existe déjà ! Voulez vous le modifier ?"
Const MSGNONR As String = "Si c'est une nouvelle rencontre ! Voulez-vous poursuivre ?"
Sub Archiver()
'
Dim TBf As Worksheet, TBa As Worksheet, ZZ As Range, i As Integer
'
Set TBa = ThisWorkbook.Worksheets("Archives")
Set TBf = ThisWorkbook.Worksheets("Formulaire")
    Application.ScreenUpdating = False
If IsEmpty(TBf.[no_dossier]) Then   'Si absence de numéro de dossier
  If Not MsgBox(MSGNONR, vbQuestion + vbYesNo + vbDefaultButton2) = vbNo Then
   
  End If
   TBf.Range("D1").Value = TBf.Range("A3").Value + 1
 'Exit Sub
 
End If
Set ZZ = TBa.Columns(1).Find(what:=TBf.[no_dossier].Value)
If ZZ Is Nothing Then
  Set ZZ = TBa.Cells(16384, 1).End(xlUp).Offset(1, 0)   'Ligne pour nouvelle entrée
Else
 If Not MsgBox(MSGNREXIST, vbQuestion + vbYesNo) = vbYes Then Exit Sub   'Ne pas remplacer l'entrée existante
End If
'Copie de toutes les données
Application.ScreenUpdating = False
'copie n°dossier
ZZ.Value = TBf.[no_dossier].Offset(i, 0).Value

Je viens de m'apercevoir dans l'UserForm1, que le tri par N° dans la listBox 1 n'est pas chronologique. En effet avec une suite de 1 à 12 par exemple, une fois trié j'ai 12 - 1 - 10 - 11 - 2 - 3 - 4 ect...😕
 
Re : Archiver puis récupèrer des données avec VBA

salut

Le tri des nombres est un tri au sens littéral (1, 10, 2 …) donc il est modifié.

Find doit être complétée (la recherche de 1 ne doit pas amener à 12 …).

Le bouton « Effacer » est renommé « Nouveau Match » avec l’effacement des données sensibles et l’actualisation du compteur (donc nouvelle macro). Il y a toujours un retour possible avec "Récupérer" !

Certaines macros utilisant la feuille « Formulaire» ont été déplacées dans son module et simplifiées (à ma façon😉).
 

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

Discussions similaires

Retour