Fenêtre de saisie de réf. pour inventaire

elpat

XLDnaute Nouveau
Bonjour,

Je dois faire un inventaire de pièces portant des n° de séries et j'aimerai pouvoir utiliser une fenêtre de saisie pour ces n° de telle sorte que, après avoir renté le n° de série dans la fenêtre de saisie, en tappant "enter", le curseur vienne directement sur le n° en question dans la grille, si il s'y trouve... et si il ne s'y trouve pas, qu'il soit enregistré dans une case vide de la colonne "numèro de pièce".

J'ai joint un prototype de feuille exel....



Merci à vous.
PP
 

Pièces jointes

  • grille test.xls
    16 KB · Affichages: 163
  • grille test.xls
    16 KB · Affichages: 159
  • grille test.xls
    16 KB · Affichages: 164
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Ave,

Pour la version excel, tu la trouveras en clicquant sur le point d'interrogation en fin de la barre de menu en haut de ta fenêtre excel (sous la barre de titre) un menu souvre et en bas tu auras "A propos d'excel" clique et tu verras.

Pour le reste re donnes ton ficher.

A+
 
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour tout le monde,

@Elpat,

Ci dessous un nouveau module de recherche qui emploie une autre technique. Il utilise l'équivalent VBA de la fonction EQUIV de feuille de calcul.

Tu verras 2 nouvelles constantes:
Const COLONNES_RECHERCHE = "D,C"
Cettes constantes représente les 2 colonnes dans lesquelles faire la recherche classées par ordre de priorité et séparée par une virgule (important) pas moins ni plus de 2 colonnes. Si tu veux que ce soit C la première tu mets :
Const COLONNES_RECHERCHE = "C,D"

La deuxième constante:
Const COLONNE_NOUVELLES_REF = "C"
est la colonne dans laquelle placer les nouvelles ref si la recherche n'a rien donné.
Lignes à placer dans le modules mdlRecherche en lieu et place des lignes existantes:

Code:
Const COLOR_INDEX_ROUGE = 3
Const COLOR_INDEX_VERT = 7
Const COLONNES_RECHERCHE = "D,C" 'Ordre des 2 colonnes de recherche
Const COLONNE_NOUVELLES_REF = "C" 'Colonne pour les nouvelles valeurs
Sub ModiferMenuContextuelCells()
    RétablirMenuContextuelCells
    With Application.CommandBars("Cell").Controls.Add(msoControlButton)
        .Tag = "optRechercheRef"
        .Caption = "Recherche référence"
        .OnAction = "LancerRecherche"
    End With
End Sub
Public Sub RétablirMenuContextuelCells()
    On Error Resume Next
    'Première méthode de suppression
    Application.CommandBars("Cell").Controls("Recherche référence").Delete
    If Err.Number > 0 Then
       Err.Clear
       'En cas d'échec, deuxième méthode de suppression
        Application.CommandBars("Cell").FindControl(Tag:="optRechercheRef").Delete
            'En cas d'échec de la deuxièmen rétablir le menu contextuel par défaut
            If Err.Number > 0 Then Application.CommandBars("Cell").Reset
    End If
End Sub
Public Sub LancerRecherche()
    If ActiveCell.Column <> 3 Then ActiveSheet.Cells(ActiveCell.Row, 3).Select
    usfChercherRef.Show
End Sub
Public Sub ChercherNum(ByVal sNomFeuille As String, sValeur As String, Optional OptColonnesRechecher As Byte = 6)
'
'-------------------Déclaration des variables
'
    Dim sh As Worksheet                               'Feuille de recherche
    Dim plageRecherche As Range                       'Plage de recherche colonne(vntColonne)
    Dim Cellule As Range                              'Cellule de référence de l'occurence trouvée ou rien
    Dim NumRang As Variant                            'Numéro de rang de la Valeur trouvée  à partir de la celllule 1 de la colonne de recherche
   ' On Error Resume Next
    '
    '--------------------Feuille de calcul pour la recherche
    '
    Set sh = ThisWorkbook.Sheets(sNomFeuille)
    If Err.Number > 0 Then
        MsgBox "La feuille '" & sNomFeuille & "' n'a pas été trouvée." & vbCrLf & vbCrLf & _
               "Impossible de continuer la recherche!" & _
               "Vérifiez qu'elle existe bien et recommencez.", vbExclamation, "ChercherNum"
        Exit Sub
    End If
    Err.Clear
    '
    '---------------------Colonne de recherche
    '
    Set plageRecherche = sh.Columns(Split(COLONNES_RECHERCHE, ",")(0))
    Err.Clear
 
    'On Error GoTo FIN_Recherche
    NumRang = Application.Match(sValeur, plageRecherche, 0)
 
    If IsError(NumRang) Then
        Set plageRecherche = sh.Columns(Split(COLONNES_RECHERCHE, ",")(1))
        NumRang = Application.Match(sValeur, plageRecherche, 0)
    End If
 
    'Si aucune cellule contenant 'sValeur' a été trouvée
    '
    If IsError(NumRang) Then
        '
        'Référencer la cellule sous la dernière cellule non vide de la colonne de recherche
        '
        Set Cellule = sh.Range(COLONNE_NOUVELLES_REF & sh.Rows.Count).End(xlUp).Offset(1)
        '
        'y placer la valeur et passer la couleur d'écriture en rouge
        '
        With Cellule
            .Value = sValeur
            .Font.ColorIndex = COLOR_INDEX_ROUGE
        End With
    Else
        Set Cellule = plageRecherche.Cells(plageRecherche.Row + NumRang - 1, 1)
        Cellule.Font.ColorIndex = COLOR_INDEX_VERT
    End If
    '
    'Se déplace à la cellule trouvée ou à la nouvelle cellule
    '
    Application.Goto reference:=Cellule
 
FIN_Recherche:
    If Err.Number > 0 Then
        MsgBox "Une erreur s'est produite lors de la recherche de '" & sValeur & "'" & vbCrLf & vbCrLf _
            & "Erreur numéro : " & Err.Number & vbCrLf _
            & "Description   : " & Err.Description & vbCrLf & vbCrLf _
            & "Fermez la fenêtre et recommencez.", vbExclamation, "Chercher une référence"
    End If
End Sub

Pour répondre au message, si tu pouvais cliquer sur le bouton "Répondre" au lieu de "Citer", cela me faciliterai la lecture. Généralement je me souviens de ce que j'ai dit. pas encore tout à fait gaga:D Le cas échéant je peux remonter le fil.

Pour la version excel, il s'agit peut-être de l'endroit où la mettre dans ton profil que tu n'as pas trouvé! en haut à gauche de cette fenêtre tu as un lien Tab.de bord, dans la page qui s'ouvre tu cliques sur Modifier vos informations puis en bas de la dernière page qui s'ouvre tu as une zone Informations supplémentaires, c'est là que tu trouveras où mettre ta version excel.

Passe une bonne journée

A+
 
Dernière modification par un modérateur:

elpat

XLDnaute Nouveau
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour Chef !

OUI Chef !! A vos ordres Chef !! :D

... merci pour votre réponse Chef !... non Chef, ce n'est pas au niveau des "mes infos" que je pataugeais Chef!... mais dans excel pour cette foutue version qui est... 2002 , Chef !... je sais, c'est plus trés frais, Chef !!... mais je suis pour le dev. durable.. Chef !! :)

Bon, pour toute la tartine de formules magiques... je n'ai pas le temps ce soir... je vais m'en imbiber avant le dodo... en espérant que mon subconscient mouline un poil... pour demain... enfin...à voir... ,car, à première vue... ça à l'air poilu comme histoire...:eek: .. mais je suis plein de courage, Chef !!

Sur ce, je vais "mettre le lard dans le torchon" (aller au dodo),comme disait ma Grand Mére, merci pour tout ce boulot... Chefffff !! ;), bonne soirée.

A+

Elpat tachou
 

elpat

XLDnaute Nouveau
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour Hasco, bonjour à touti,

Bon, aprés 6 tonnes de béton poussées à la brouette... j'ai les doigts engourdis... merci le syndrome du canal carpien... j'en chialerais tellement ça fait mal.... mais bien fait pour moi... à vouloir économiser sur le prix du camion pompe....:(

Alors... cette formule magique... et bien, j'ai tout essayé... morceaux par morceaux ou tout d'un coup.... toujours même réponse : "erreur d'exécution 13, incompatibilité de type":eek:... en cliquant sur "débogage", s'ouvre une fenêtre dans "usfChercherRref"... en haut "tbChercherNum" et "KeyDown" et dans la page un index jaune (j'ai mis en rouge).... voir ci dessous:

Private Sub tbChercherNum_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'
'Si on a presser la touche [Entrer]
'et que la zone de texte n'est pas vide
'
If KeyCode = vbKeyReturn Then
'
'Appeler la macro de recherche avec:
' 1 - le nom de la feuille active
' 2 - l'étiquette de colonne dans laquelle on veut chercher la valeur
' 3 - la valeur à chercher
'
'activecell.select
tbChercherNum_Enter
ChercherNum ActiveSheet.Name, "C", Trim(tbChercherNum.Text)
tbChercherNum.SetFocus
'
End If

Bon, j'y ai bien rajouté un "D" (pour faire "C,D")... mais non, fô pas rêver...:(

Alors mon bon Prince... je lui tire une balle toute suite, à mon inventaire.... ou j'attends un poil ?? ;)

...Et maintenant il flotte...et il fait froid...bon pour les chanterelles d'automne:D... en attendant les savoureux pieds bleus:D:D... à la crème, accompagnés d'un ch'ti magret de canard... et d'un coup de St Emilion (priez pour nous)... haaaaaaaaaa !!!!:D

Bon dimanche,

A+

Elpat tatra
 
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour Le forum,
Hello Elpat,

Excuses, c'est vrai que j'ai modifié la procédure de recherche sans te donner les modifications d'appel.

Voilà:

Code:
Private Sub tbChercherNum_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'
'Si on a presser la touche [Entrer]
'et que la zone de texte n'est pas vide
'
    If KeyCode = vbKeyReturn Then
        '
        'Appeler la macro de recherche avec:
        '   1 - le nom de la feuille active
        tbChercherNum_Enter
       [COLOR=red]ChercherNum ActiveSheet.Name, Trim(tbChercherNum.Text)[/COLOR]
        tbChercherNum.SetFocus
        '
    End If
End Sub

Bon pour me faire pardonner, je t'offre le magret de 'canard de Challans'.


Quelle idée aussi d'aller chercher des chanterelles avec une brouette:D:D:Dde béton!!!!

Je compatis, mon épouse à eu les même problèmes.

Passe une bonne journée
A+
 

elpat

XLDnaute Nouveau
Re : Fenêtre de saisie de réf. pour inventaire

Bonsoir Hasco et à touti...

En plus des pognes... je me suis aussi niqué le dos... fait pas bon vieillir :( ...

Moral en berne... en plus, malgré la modif de la formule magique... ça marche toujours pôôô !!!:(:(:(... je te joins (de la bonne....) une feuille de mon inventaire zippée... j'ai pourtant tout mis commifô... et maintenant, non seulement ça trouve pas les réf. en deux fois 4 chiffres... mais en plus ça glisse pu dans la colonne "B"...

Je vais me mettre un supo (pas aux chanterelles..) et au lit.....

Bonzoirée...
A+
Elpat rébien
 

Pièces jointes

  • HASCO Inventaire modif.zip
    27 KB · Affichages: 65
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Elpat,

J'ai beau tester le truc, il marche!!!!:D C'est un comble!!!!
Quand je dis que cela fonctionne:

Pour les références avec ou sans espace:
1 - il cherche la référence rentrée en colonne 'D' (OLD)
2 - s'il ne la trouve pas il cherche en colonne 'C'
3 - s'il ne la trouve toujours pas, il rajoute la référence en dernière ligne de la colonne 'C' et s'y déplace.
4 - si la référence a étée trouvée en 'D' ou 'C' , il s'y déplace.

Il se peut que les espaces de tes références n'en soient pas. Chaque caractère est réprésenté par un code. Pour l'espace normalement c'est 32. Il arrive que pour des données issues d'importation, ce qui apparaît comme un espace ait un code différents. Ce qui fausse les recherche. Mais je n'ai pas pu le contrôler, il n'y a pas de références avec espace dans ton fichier. A part celles que j'ai du mettre moi-même pour les tests.

Si Tu veux remettre un fichier avec des espaces issus d'importation de données. Remplace simplement celui de ton dernier post et signale-le.

A+
 

elpat

XLDnaute Nouveau
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour Hasco !

J'ty juuuuuuuuure que le fichier zipé que j'ai, là, sous les yeux, sur le bureau et que je t'ai envoyé ne fontionne pas !!!

Si je saisi (sans espace) une ref qui est avec un espace dans la colonne "C" , cela va direct en bas de colonne et en rouge.. ??!!!!

Alors que, effectivement, celui qui est dans mon poste (que je viens d'ouvrir sur le forum) et bien oui, il fonctionne ??!!!!!!!!! j'en suis baba, sans voix.... comment cela est il possible ????!!!

Mais.... malgré tout, la fonction de glissement dans la colonne "B" lorsque la bonne ref est trouvée ne fonctionne plus... même dans le fichier qui est dans mon post, sur le forum...

Houlaaaaaaaaaaa !! 7h13... faut que je file... merci, bonne journée et a+

Elpat atoïde
 
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Elpat,

Si je saisi (sans espace) une ref qui est avec un espace dans la colonne "C" , cela va direct en bas de colonne et en rouge.. ??!!!!

Evidement si tu saisis sans espace une ref qui en comporte........... La macro n'est pas faite pour cela....

D'où la nécéssité de la précision dans tes posts.

Mais, je ne referai pas le travail déjà fait. Il ne te reste plus qu'à saisir les espaces dans la zone de texte de recherche.

Pour moi je considère que mon apport à ce fil est terminé, sans quoi nous allons tourner en rond.

bon courage et à bientôt
 
Dernière modification par un modérateur:

elpat

XLDnaute Nouveau
Re : Fenêtre de saisie de réf. pour inventaire

bonsoir Hasco,

... désolé, je pensais que tu m'avais compris, saisir les 8 chiffres bout à bout étant plus rapide à la main qui d'y ajouter un espace, pour trouver ces 8 chiffres dans une colonne où ils sont enregistrés, pour certaines ref. d'un bloc et pour d'autres avec espace...

Tant pis, je modifirai les listes en supprimant les espaces....

Merci sincèrement pour tout, bonne soirée.

Elpat
 
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour elpat,

Petit bonus, une macro pour supprimer les espaces dans les cellules sélectionnées.

Mets cette macro dans un module, sélectionne la (les) colonne(s) contenant des espaces et appelle la par CTRL+F8.

Attention, tous les espaces (et espaces insécables) contenus dans les cellules sélectionnées seront supprimés.

La mise à jour écran est désactivée pendant l'éxécution (pour aller plus vite)

Code:
Sub SupprimerEspaces()
    Dim ModeCalcul As XlCalculation
    Dim plg As Range
    On Error GoTo FinSuppressionEspaces
    ModeCalcul = Application.Calculation
    Application.Calculation = xlManual
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    Set plg = Intersect(ActiveSheet.UsedRange, Selection.SpecialCells(xlCellTypeConstants))
    plg.Replace What:=Chr(32), Replacement:="", LookAt:=xlPart, SearchOrder:= _
        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    plg.Replace What:=Chr(160), Replacement:="", LookAt:=xlPart, SearchOrder:= _
        xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
FinSuppressionEspaces:
    Application.Calculation = ModeCalcul
    Application.EnableEvents = False
    Application.ScreenUpdating = False
    If Err.Number > 0 Then
     
        MsgBox "Erreur numéro : " & Err.Number & ": " & vbCrLf & _
               "Description: " & Err.Description, vbInformation, "Supprimer espaces"
     End If
End Sub

A+
 
Dernière modification par un modérateur:

elpat

XLDnaute Nouveau
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour Hasco,

Non, je ne suis pas mort.... juste qq soucis de santé qui m'ont éloignés de mon ordi...

Merci pour cette macro.
Quand tu dis de la mettre dans un module... c'est bien AltF8/pas à pas détaillé/puis "copié-collé" la formule... en bas de page, par exemple, du MVB ??... parceque là, ça ne marche pas et il y a un message "erreur de compilation, nom ambigu détecté : SupprimerEspaces" qui apparait.

Merci et à +
 
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Bonjour,

J'espère que ça va mieux.

L'erreur que tu as indique que VB trouve Deux fois la macros 'SupprimerEspaces'. Elles existe deux fois dans ton module.

Supprimes ces macros.

quand tu es sur ta feuille de calcul:
Il ne faut pas faire ALT+F8 mais ALT+F11. Dans la fenêtre qui s'affiche (editeur VBE) faire insertion/module si dans la partie gauche, tu ne vois aucun module dans le projet de ton classeur. Si tu en vois un tu l'ouvres en double-cliquant sur son nom et tu colles la macro donnée plus haut en bas du module.

Je te joins un fichier avec la macro dans un module.
Ouvre le fichier, fais Alt+F11

Portes toi bien
A+
 

elpat

XLDnaute Nouveau
Re : Fenêtre de saisie de réf. pour inventaire

Re...

Merci

Bien tout fait comme expliqué.... mais pour appeler la macro, ce ne serait pas plutôt Alt F8 et pas Ctrl F8 ?

Petit problème, la macro supprime TOUS les espaces de la feuille... pas seulement ceux de la colonne selectionnée... en fait cette macro ne serait utile que dans les colonnes C et D...

A+
 
G

Guest

Guest
Re : Fenêtre de saisie de réf. pour inventaire

Re,

en lisant correctement le post où ou j'ai mis la macro tu aurais lu:

moi-même personellement à dit:
Petit bonus, une macro pour supprimer les espaces dans les cellules sélectionnées.

Il faut donc sélectionner tes cellules avant de la lancer.

A+
 

Statistiques des forums

Discussions
312 165
Messages
2 085 882
Membres
103 009
dernier inscrit
dede972