Problème d'inscription d'information dans une base de donnée
Bonjour,
J'ai une base de donnée contrôlé via des Userform. En faisant une recherche en fonction d'une référence je viens récupérer chaque ligne contenant cette référence ainsi que ses informations et la place dans une Collection qui me permet d'afficher par la suite seulement les lignes correspondantes dans une seconde Userform.
J'effectue les modifications nécessaires concernant les données, je valide et les modifications effectuées se replace dans la base de donnée.
Je peut également ajouter de nouvelle référence dans ma base de donnée. Pour cela je rentre les informations de la référence et une nouvelle ligne se créer à la première ligne vide détecter par excel et inscrit mes données.
Dernièrement mes utilisateurs m'on fait remonter des soucis concernant les références qu'ils rentrent dans la base de donnée.
En ajoutant plusieurs pièces d'affiler puis en enregistrant le fichier, quelques jours plus tard plus aucune référence inscrite dans la base de donnée.
Des fois en ajoutant une référence puis une autre la première disparait.
Le soucis est que j'ai effectué des tests mais impossible de reproduire le soucis de mon coter.
Y aurait-il une taille max concernant un tableau ou une collection? En considérant que ce n'est pas une erreur humaine j'aimerai savoir si il est possible qu'une erreur puisse se faire par le logiciel dû à une trop grosse base de donnée.
Pour info ce fichier se trouve sur un bureau à distance partagé par plusieurs personne. La base de donnée fait 11 colonnes pour un peu moins de 2400 lignes.
Bonjour Whytye
Y aurait-il une taille max concernant un tableau ou une collection?
Seule taille max à ma connaissance, celle du PC
Moins de 2400 lignes, je n'appelle pas ça une grosse base de donnée
Je pense que le souci est plus dans le code, mais sans fichier ni code...
A+
Ci-dessous mon code pour ajouter une pièce et encore en dessous celui pour effectuer une recherche dans ma base de donnée :
Private Sub OK_Click()
'ActiveWorkbook.SaveCopyAs "C:\Users\ASAV4\Desktop\Sauvegarde\StockSAV2023CopiePreModif" & mois & ".xlsm"
'PreSauvegardeDuFichier
Quantitetotale.Value = Val(Quantiteneuve.Value) + Val(Quantiterécup.Value) + Val(Quantiteroccas.Value)
If Referencepiece & AGENCE & Emplacementetagere & Quantiteneuve & Quantiteoccas & Marque & COMMENTAIRE & DESIGNATION & Quantiteroccas = "" Then
MsgBox "Aucune information renseignée! Vérifier la saisie!", vbInformation
Exit Sub
End If
If Referencepiece = "" Then
MsgBox "Veuillez renseigner la référence de la pièce", vbInformation
Exit Sub
End If
If Quantiteneuve & Quantiterécup & Quantiteroccas = "" Then
MsgBox "Aucune quantité renseignée", vbInformation
Exit Sub
End If
If AGENCE = "" Then
MsgBox "Veuillez renseigner l'agence où se situe la pièce", vbInformation
Exit Sub
End If
If Emplacementetagere = "" Then
MsgBox "Veuillez renseigner l'emplacement de la pièce", vbInformation
Exit Sub
End If
If DESIGNATION = "" Then
MsgBox "Veuillez renseigner une désignation", vbInformation
Exit Sub
End If
Sheets("Données").Select
ligneajout = Range("B1").End(xlDown).Row + 1
Range("A" & ligneajout) = Referencepiece & "_" & AGENCE & "_" & Emplacementetagere
Range("C" & ligneajout) = AGENCE
Range("D" & ligneajout) = Emplacementetagere
Range("E" & ligneajout) = Quantiteneuve.Value
Range("F" & ligneajout) = Quantiterécup.Value
Range("G" & ligneajout) = Quantiteroccas.Value
Range("B" & ligneajout) = Referencepiece
Range("I" & ligneajout) = Marque
Range("K" & ligneajout) = COMMENTAIRE
Range("H" & ligneajout) = Quantitetotale.Value
Range("J" & ligneajout) = DESIGNATION
Sheets("Menu").Select
'ActiveWorkbook.SaveCopyAs "C:\Users\ASAV4\Desktop\Sauvegarde\StockSAV2023CopiePostModif" & mois & ".xlsm"
'PostSauvegardeDuFichier
AJOUTERUNEPIECE.Hide
Unload AJOUTERUNEPIECE
'ActiveWorkbook.Save
End Sub Private Sub OK_Click()
Dim tableau As Variant, tabResultat As Variant
Dim References As New Collection
Dim lig As Integer
tableau = Feuil1.Range("A1").CurrentRegion
'une boucle pour dimensionner le tableau resultat
For i = LBound(tableau, 1) + 1 To UBound(tableau, 1) Step 1
If tableau(i, 2) = Referencepiece Then
References.Add i
End If
Next i
If References.Count = 0 Then
réponse = MsgBox("Aucun stock sur cette référence ou mauvaise syntaxe" & Chr(13) & Chr(10) & "Voulez-vous créer une nouvelle pièce?", vbYesNo + vbQuestion, "Pas de stock")
If réponse = 6 Then
AJOUTERUNEPIECE.Show
RECHERCHERPIECEDETACHEE.Hide
Unload RECHERCHERPIECEDETACHEE
Else
RECHERCHERPIECEDETACHEE.Hide
Unload RECHERCHERPIECEDETACHEE
End If
Exit Sub
End If
'déplacer les lignes avec la référence dans un tableau filtré
ReDim tabResultat(1 To References.Count, 1 To UBound(tableau, 2) + 1)
For i = 1 To References.Count
lig = References(i)
For col = LBound(tableau, 2) To UBound(tableau, 2)
tabResultat(i, col) = tableau(lig, col)
Next col
tabResultat(i, UBound(tabResultat, 2)) = lig
Next i
RECHERCHERPIECEDETACHEE.Hide
Unload RECHERCHERPIECEDETACHEE
selectionnerPiece tabResultat
End SubRe,
Ce que je vois :
1) Pour trouver la dernière ligne vous faites un Down alors qu'en général il est préférable de faire un Up
2) Vous vous basez sur la colonne B, mais je ne vois pas la cellule Bx se remplir dans votre code
Sur ces constatations, je ferais plutôt
ligneajout = Range("A" & Rows.Count).End(xlUp).Row + 1A+
La cellule B se rempli via la ligne lors d'un ajout de pièce
Range("B" & ligneajout) = Referencepieceet elle est effectivement utilisé comme base pour la recherche de référence.
En ce qui concerne le Up je vais essayer, juste quelle est la différence entre Up et Down?
Re,
En ce qui concerne le Up je vais essayer, juste quelle est la différence entre Up et Down?
Pour le Down, si une cellule a été effacée (accidentellement) vous vous arrêtez sur cette cellule
Pour le Up, vous commencer par la fin de la feuille, donc moins de risque
Ceci dit, vous voudrez bien mettre à jour votre version d'Excel SVP, "français" ne veut rien dire
C'est par exemple 2016Fr, 2019Fr... O365Fr
A+
D'accord merci de votre réponse par contre je ne comprend pas votre remarque concernant ma version d'Excel.
Je ne vois pas où est indiqué comme vous dites "francais".
Re,
Je ne vois pas où est indiqué comme vous dites "francais".
Outch...
C'est à modifier ici
https://www.excel-pratique.com/fr/compte/forum-profil
Voici par exemple le miens
A+