Microsoft 365 Formulaire de modification

kyasteph

XLDnaute Occasionnel
Bonjour
J'ai créé un formulaire de modification ,à partir duquel je rappelle toutes les données d'une ligne:
La recherche se fait à partir de la combobox "ChoixN_Eng" (chaque ligne de chaque tableau correspond à un numéro enregistrement unique).
Je dispose de six(6) onglets dans mon classeur sur lesquels j'effectue des saisies et modifications.
Mon userform fonctionne correctement sur certains onglets tel que l'onglet "Gestion_Débiteur", par contre sur certains tel que "Gestion_Créancier"; "JAL_OD"; "JAL_AN", cela ne fonctionne pas.
En effet ,après le chois dans la combobox "ChoixN_Eng", cela me génère une erreur.

J'ai beau chercher je n'arrive pas à le résoudre, quelqu'un peut il m'aider s'il vous plait.
 

Pièces jointes

  • Essai_Modifier.xlsm
    69.3 KB · Affichages: 33

sylvanu

XLDnaute Barbatruc
Supporter XLD
Idem sous mon vieux 2007, LookIn:=xlFormulas fonctionne et pas LookIn:=xlValues.
La bonne question est Pourquoi ?
Dans l'aide MS on trouve :
et pour ce paramètres les deux valeurs sont autorisées.
On aurait pu supputer que quand c'est un nombre xlValues est correct, et utiliser xlFormulas si la cellule contient une formule. Non ?
 

fanch55

XLDnaute Barbatruc
J'ai trouvé une explication assez pertinente sur www.mrexcel.com :
La meilleure façon de comprendre quelles chaînes sont recherchées dans une plage est de comprendre les quatre propriétés différentes qui composent le contenu d'une cellule.

.Formule
.Valeur
.Valeur2
.Texte

Ces quatre propriétés de cellule peuvent renvoyer des résultats identiques ou différents selon le contenu de la cellule et la mise en forme de la cellule.

La propriété .Formula d'une cellule correspond à ce qui apparaît dans la barre de formule.
Cela peut être une formule réelle ou une constante.
L'argument LookIn: = xlFormulas recherche la propriété .Formula des cellules.
La propriété de formule n'est pas affectée par la mise en forme des cellules.
Ainsi, si la cellule contient une date, la propriété .Formula est la date avec le format de date par défaut (généralement m / j / aaaa pour les États-Unis, ou j / m / aaaa pour de nombreux autres) comme indiqué dans la barre de formule.

La propriété .Value est un résultat de formule ou une constante.
La méthode .Find n'a pas d'argument pour rechercher dans la propriété .Value une plage de cellules. L'argument LookIn: = xlValues ne regarde pas la propriété .Value d'une cellule.
Il examine la propriété .Text (ci-dessous).

La propriété .Value2 est identique à la propriété .Value sauf si la valeur de la cellule est une date ou une devise.
La propriété .Value2 renvoie un type de données "double" pour ces valeurs. La méthode .Find n'a pas d'argument pour rechercher la propriété .Value2 d'une plage de cellules.

La propriété .Text d'une cellule correspond à ce qui est affiché dans la feuille de calcul.
L'argument LookIn: = xlValues examine la propriété .Text des cellules.
La propriété .Text est affectée par la mise en forme des cellules.
Donc, si la cellule contient une constante de date, la propriété .Text est la date telle qu'elle est affichée dans la cellule.
Si vous utilisez .Find pour les dates à l'aide de l'argument LookIn: = xlValues, la mise en forme What: = date doit correspondre au format de date d'affichage de la cellule.

Remarques:
La méthode .Find ignore les cellules masquées et filtrées.
 

kyasteph

XLDnaute Occasionnel
Bonjour à tous
je vous remercie pour vos différentes contributions.
En corrigeant le format de la colonne de recherche(colonne B) en format "Nombre sans séparateur de millier", mon code fonctionne.
J'ai fait pareil avec le fichier joint de @cp4, et cela fonctionne (par exemple en mettant 3 210 au format nombre sans séparateur de millier 3210;ça marche).
J'avoue que je n'arrive pas à l'expliquer.
Merci encore pour vos contributions, longue vie au forum.
 

cp4

XLDnaute Barbatruc
Bonjour à tous
je vous remercie pour vos différentes contributions.
En corrigeant le format de la colonne de recherche(colonne B) en format "Nombre sans séparateur de millier", mon code fonctionne.
J'ai fait pareil avec le fichier joint de @cp4, et cela fonctionne (par exemple en mettant 3 210 au format nombre sans séparateur de millier 3210;ça marche).
J'avoue que je n'arrive pas à l'expliquer.
Merci encore pour vos contributions, longue vie au forum.
Bonjour,
@kyasteph : tu as zappé la solution de Fanch55
VB:
'Il faut faire un find sur xlformulas pour format avec separateur de millers
ligneEnreg = Sheets("JAL_AN").[B:B].Find(ChoixN_Eng, LookIn:=xlFormulas).Row
Tu peux encore améliorer ton code et le rendre un peu plus rapide.
Suggestion pour travailler avec le nom de la feuille active, si j'ai bien compris tu veux utiliser le même formulaire sur plusieurs feuilles
Code:
Option Compare Text
Dim f, ligneEnreg As Integer, Clé(), tblClé(), Feuille As String, dl As Integer, ft As Byte

Private Sub UserForm_Initialize()
Feuille = ActiveSheet.Name

With Sheets(Feuille)
dl = .Cells(Rows.Count, 2).End(xlUp).Row
ft = .Columns(1).Find("Mois", LookIn:=xlValues).Row + 1
Clé = .Range(.Cells(ft + 1, 2), .Cells(dl, 2)).Value
End With
Call Tri(Clé, 1, LBound(Clé, 1), UBound(Clé, 1))
  Me.ChoixN_Eng.List = Clé
End Sub
'***********
Sub Tri(a(), ColTri, gauc, droi) ' Quick sort
  ref = a((gauc + droi) \ 2, ColTri)
  g = gauc: d = droi
  Do
    Do While a(g, ColTri) < ref: g = g + 1: Loop
    Do While ref < a(d, ColTri): d = d - 1: Loop
    If g <= d Then
       For k = LBound(a, 2) To UBound(a, 2)
         temp = a(g, k): a(g, k) = a(d, k): a(d, k) = temp
       Next k
       g = g + 1: d = d - 1
    End If
  Loop While g <= d
  If g < droi Then Call Tri(a, ColTri, g, droi)
  If gauc < d Then Call Tri(a, ColTri, gauc, d)
End Sub
 

kyasteph

XLDnaute Occasionnel
Bonjour
Je viens d'améliorer(pour le transfert), et tester, cela fonctionne sauf quand on fait la recherche intuitive ,en tapant les 1er chiffres dans "ChoixN_Eng", cela génère une erreur; comment y remédier?
Aussi je souhaiterais pouvoir modifier les données se trouvant sur la feuille "Journal" directement .
C'est à dire en modifiant les données sur la feuille active, je souhaiterais aussi (simultanément) modifié les données de la feuille journal ayant le même numéro d'enregistrement(Num Eng 159 dans "Gestion Débiteur" et les données de ligne dont le nunero enregistrement est 159 dans l'onglet "Journal") ; mais je n'y arrive pas.
Merci de m'aider s'il vous plait.
 

Pièces jointes

  • Essai_Modifier1.xlsm
    106.6 KB · Affichages: 3

cp4

XLDnaute Barbatruc
Bonjour
Je viens d'améliorer(pour le transfert), et tester, cela fonctionne sauf quand on fait la recherche intuitive ,en tapant les 1er chiffres dans "ChoixN_Eng", cela génère une erreur; comment y remédier?
Aussi je souhaiterais pouvoir modifier les données se trouvant sur la feuille "Journal" directement .
C'est à dire en modifiant les données sur la feuille active, je souhaiterais aussi (simultanément) modifié les données de la feuille journal ayant le même numéro d'enregistrement(Num Eng 159 dans "Gestion Débiteur" et les données de ligne dont le nunero enregistrement est 159 dans l'onglet "Journal") ; mais je n'y arrive pas.
Merci de m'aider s'il vous plait.
Bonjour Kyasteph,

Fichier en retour, à tester premier point soulever.
Pour la suite, complète la feuille journal de façon qu’elle soit conforme aux données des autres feuilles.
Je crois que tu auras des n° enregistrements en doublons sur la feuille journal, il faudrait ajouter d’autres critères pour cibler la ligne concernée par une modification.

A+
 

Pièces jointes

  • Essai_Modifier2.xlsm
    106.3 KB · Affichages: 8

kyasteph

XLDnaute Occasionnel
Bonjour cp4
Merci pour l'amélioration du code ,je l'ai testé et il n'y a plus d'erreur générée après la saisie dans "ChoixN_Eng" ,cependant la recherche intuitive n'est pas aussi "efficace"; car soit c'est le dernière occurrence de la liste qui est sélectionnée(quand on saisie par exemple le premier chiffre ,exemple 159 dans "Gestion_Débiteur"),ou bien il faut absolument tout saisir(exemple 1678 dans JAL_OD).
Cela dit, ce n'est pas très grave, car en effet pour la modification ,l'utilisateur devra bien retenir le numéro enregistrement à modifier.
En ce qui concerne le point 2(modification simultanée dans l'onglet "Journal"),il n'y aura pas de doublons:
-En effet un numéro enregistrement est unique et ne peut se répéter quelque soit l'onglet
-toutes les "occurrences" se trouvant sur l'onglet "Journal", se retrouvent sur l'usf_Modifier.
je pense qu'à ce niveau, une fois le "numéro enregistrement" trouvé sur l'onglet "Journal", on pourra modifier aisément les données de la ligne concernée.
Mon problème est donc "d'ordonner" à l'usf_Modifier", une fois la modification effectuée sur la feuille active, de choisir l'onglet "Journal "et de retrouver le "numéro enregistrement" sur cet onglet.

Merci de m'aider s'il vous plait.
 

cp4

XLDnaute Barbatruc
Bonjour cp4
Merci pour l'amélioration du code ,je l'ai testé et il n'y a plus d'erreur générée après la saisie dans "ChoixN_Eng" ,cependant la recherche intuitive n'est pas aussi "efficace"; car soit c'est le dernière occurrence de la liste qui est sélectionnée(quand on saisie par exemple le premier chiffre ,exemple 159 dans "Gestion_Débiteur"),ou bien il faut absolument tout saisir(exemple 1678 dans JAL_OD).
Cela dit, ce n'est pas très grave, car en effet pour la modification ,l'utilisateur devra bien retenir le numéro enregistrement à modifier.
En ce qui concerne le point 2(modification simultanée dans l'onglet "Journal"),il n'y aura pas de doublons:
-En effet un numéro enregistrement est unique et ne peut se répéter quelque soit l'onglet
-toutes les "occurrences" se trouvant sur l'onglet "Journal", se retrouvent sur l'usf_Modifier.
je pense qu'à ce niveau, une fois le "numéro enregistrement" trouvé sur l'onglet "Journal", on pourra modifier aisément les données de la ligne concernée.
Mon problème est donc "d'ordonner" à l'usf_Modifier", une fois la modification effectuée sur la feuille active, de choisir l'onglet "Journal "et de retrouver le "numéro enregistrement" sur cet onglet.

Merci de m'aider s'il vous plait.
Bonsoir Kyasteph,

Ok, j'ai compris quelque soit la feuille considérée, il n'y aura pas de doublon.
J'ai des soucis de secteurs disque dur défectueux. En prévision d'une mort subite de mon disque. J'ai tenté un clonage qui bloque au niveau des secteurs défectueux. Je suis donc en recherche de solution.
Je veux bien t'aider mais hélas, je n'ai pas beaucoup de temps. C'est pour cela que je t'ai demandé de compléter le feuille journal afin de tester le code.

Bonne soirée.
 

cp4

XLDnaute Barbatruc
Re,

@kyasteph : la feuille "journal" ne reflète pas les données des autres feuilles. Sur la base des données existantes et vu que les entêtes sont différentes (pour cela on a utilisé "select case") ainsi que les libellés. Merci de nous montrer la correspondance des colonnes de données entre les différentes feuilles et la feuille "journal".
 

kyasteph

XLDnaute Occasionnel
Bonsoir
J'espère que vous avez pu trouver une solution pour votre disque dur?
J'ai essayé d'adapter le code pour permettre le lancement de l'usf_modifier sur l'onglet "Journal"; ainsi j'ai fait "correspondre" les différentes occurrences de l'usf_modifier et les entêtes de l'onglet "Journal".
J'espère avoir répondu à la question posée.
Merci de m'aider s'il vous plait
 

Pièces jointes

  • Essai_Modifier2.xlsm
    108.7 KB · Affichages: 4

cp4

XLDnaute Barbatruc
Bonsoir
J'espère que vous avez pu trouver une solution pour votre disque dur?
J'ai essayé d'adapter le code pour permettre le lancement de l'usf_modifier sur l'onglet "Journal"; ainsi j'ai fait "correspondre" les différentes occurrences de l'usf_modifier et les entêtes de l'onglet "Journal".
J'espère avoir répondu à la question posée.
Merci de m'aider s'il vous plait
Re,
ce n'est pas du tout ça que j'ai demandé. Tu utilises aussi un ou plusieurs fichiers liés à celui-ci. Donc, on ne sait pas vraiment ce que tu fais en amont. Tu risques d'avoir des surprises car il y a des N°Enrg non numériques
1605988637230.png

Les petits triangles rouges.

En supposant, que tu modifies la lignes N_Enr=157 sur la feuille Gestion_Débiteur, qu'on retrouve sur la feuille journal. Cependant, on se sait pas où mettre les colonnes vides
1605989058954.png


Ces remarques sont valables pour les autres feuilles, c'est pour cela que je t'ai demandé de compléter les données pour qu'on connaisse la destination de chaque donnée.
 

Discussions similaires

Statistiques des forums

Discussions
314 499
Messages
2 110 247
Membres
110 711
dernier inscrit
chmessi