XL 2013 [résolu]insérer une recherche et une message box dans une macro existante

Fave

XLDnaute Junior
Bonjour à toutes et tous,

Je viens vers vous car j'ai besoin de vos connaissances et de votre aide.

J'ai une macro faite de plusieurs bouts de codes que j'ai regroupé.

Voici la macro :

Code:
Sub transpose_dans_tableau()
'Compilé le 3 mars 2015 par Faver
'Atteindre le formulaire et mémoriser les données
    Sheets("Formulaire").Select
    Range("A2").Select
    Selection.Copy
'Test pour déterminer la ligne où copier les infos dans le tableau
    Sheets("Base de données").Select
    valeurA2 = Range("A2").Value
    If valeurA2 = "" Then
    Range("A2").Select
    Else
    Range("A1").Select
    Selection.End(xlDown).Select
    ligne_active_base = ActiveCell.Row
    Range("A" & ligne_active_base + 1).Select
'Mémorise le n° de la ligne où coller les données
    ligne_active_base = ActiveCell.Row
'Collage des données
    Range("A" & ligne_active_base).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End If
'Rendre vierge le formulaire
    Sheets("Formulaire").Select
    Range("A2").Select
    Selection.ClearContents
    Range("A2").Select
'Enregistre les modifications du fichier automatiquement
    Workbooks("controle_n°_family_food.xlsm").Save
End Sub

Je pense que vos connaisances vous auront permis de comprendre la macro. Si non, elle me permet de récupérer une valeur sur ma 1ère feuille (Formulaire) en A2 pour la copier dans la 1ère cellule libre de la colonne A sur ma 2ème feuille (Base de données). La macro est déclenchée via un bouton sur ma feuille "Formulaire".

Les modifs que je souhaite consistent à vérifier si ma saisie faite en A2 sur le "Formulaire" existe déjà dans ma colonne A de "Base de données". Si oui, message box avec message du genre "/!\Ce numéro est déjà enregistré/!\". Si le numéro n'éxiste pas, alors message box avec "Numéro enregistré. Merci.".

Je souhaite également que ma touche "entrée" est le même résultat que mon bouton "enregistrer" que j'ai sur ma feuille "formulaire". Est-ce faisable ?

Pour finir, j'utilise un lecteur de carte pour saisir mes numéros. Quand je passe ma piste magnétique, excel traduit un code à 37 caractères alors qu'il ne me faut que les 19 premiers (ex : 6275980186062824274=23125012500000000).
Existe-t-il une solution pour ne pas tenir compte des caractères à partir du égal (signe égal inclus) ?
Au pire, je peux trouver une autre solution pour limiter les caractères comme une fonction gauche mais s'il y a moyen de l'automatiser à la source... :)

J'espère avoir été assez clair dans mes explications et jespère que vous pourrez m'aider.

En tout cas, merci d'avance pour le temps que vous prendrez à lire ce post... :eek:

Bonne journée,

PS : cette macro a été faite sous 2007, fonctionnait jusqu'à mardi sur 2010 et doit fonctionner maintenant sur 2013...
 
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : insérer une recherche et une message box dans une macro existante

Bonjour Fave,

Voici une proposition qui répond au premier point évoqué:

Code:
Sub transpose_dans_tableau()
'Compilé le 3 mars 2015 par Faver
'Test pour déterminer si la ligne existe déjà
    Set trouvé = Sheets("Base de données").Columns(1).Find(Range("A2"), LookIn:=xlValues, lookat:=xlWhole)
    If trouvé Is Nothing Then
        MsgBox "Ce numéro est déjà enregistré! Opération annulée.", vbOKOnly + vbExclamation, "ENREGISTREMENT EXISTANT"
        Exit Sub
    End If
'Atteindre le formulaire et mémoriser les données
    Sheets("Formulaire").Range("A2").Copy
'Test pour déterminer la ligne où copier les infos dans le tableau
    With Sheets("Base de données")
        If .Range("A2").Value = "" Then
            ligne_active_base = .Range("A2").End(xlDown).Row + 1
            Else
            ligne_active_base = .Range("A1").End(xlDown).Row + 1
'Collage des données
            .Range("A" & ligne_active_base).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                :=False, Transpose:=False
        End If
    End With
'Rendre vierge le formulaire
    Range("A2").ClearContents
    Range("A2").Select
    MsgBox "Numéro enregistré. Merci.", vbOKOnly + vbInformation, "ENREGISTREMENT TERMINÉ"
'Enregistre les modifications du fichier automatiquement
    Workbooks("controle_n°_family_food.xlsm").Save
End Sub
Tu constateras au passage une simplification globale du code. En effet, il n'est pas nécessaire de sélectionner des cellules ou des feuilles pour y réaliser des modifications. On peut aussi supprimer des variables en manipulant directement les adresses des cellules.

En l'absence d'une copie de ton classeur, impossible de vérifier le bon fonctionnement mais je pense qu'il n'y aura pas de problème.

Pour la même raison, difficile de répondre au deuxième point.

Quant au troisième, je serais également en peine pour te donner un conseil dans l'immédiat.

Si tu te décides à joindre une copie, édulcorée de données confidentielles, celà pourra permettre de continuer l'examen.

Cordialement.
 

Fave

XLDnaute Junior
Re : insérer une recherche et une message box dans une macro existante

Bonjour Papou-net,

Je savais qu'en m'adressant à ce forum je trouverais des gens dont les compétences dépassent de loin les miennes !!! :)

J'ai testé ton code mais il inverse ce qui est voulu. A savoir, je peux enregistrer ma valeur si elle est existante alors que je veux ne l’enregistrer que si elle est absente...

Je te joins un copie du fichier avec mon code d'origine. Comme çà tu pourras voir ce que je t'ai dit plus haut en transposant ton code mais aussi mes autres interrogations... :eek:

Merci aussi pour la simplification du code. Franchement, je vois les changement mais j'aurais été incapable de les faire, encore moins seul !!! :D

Merci d'avance pour ton aide et ton retour...

PS : il y a 2 boutons masqués pour sortir du plein écran ou y revenir. Ils sont en haut à gauche pour sortir et en haut à droite pour remettre le plein écran...

Bonne journée,
 

Papou-net

XLDnaute Barbatruc
Re : insérer une recherche et une message box dans une macro existante

RE:

Ah, c'est tout de suite plus clair avec la structure du classeur sous les yeux.

L'erreur que tu m'as signalée est réparée, il suffit d'inverser la condition (If Not trouvé Is Nothing Then...)

Pour la validation avec la touche Enter, j'ai ajouté la ligne suivante dans 'Sub Workbook_Open()'

Code:
Application.OnKey "{ENTER}", "transpose_dans_tableau"

Ne pas oublier de la réinitialiser la fermeture, ce que j'ai fait.

Enfin, pour la limitation à 19 caractères du n° de carte, je ne peux rien faire car ta feuille est protégée et je n'ai pas le mot de passe.

Pour finir, tes boutons d'affichage plein écran/écran normal sont astucieux mais pas sans danger. J'ai failli me faire piéger en lançant la procédure Workbook_Open alors que la feuille 'Base de données' était active. Pour cette raison, j'ai ajouté 'Feuil2.Select' en début du code.

Bonne soirée.

Cordialement.
 

Pièces jointes

  • Copie de controle_carte_cadeau.xlsm
    24.5 KB · Affichages: 39
  • Copie de controle_carte_cadeau.xlsm
    24.5 KB · Affichages: 34

Fave

XLDnaute Junior
Re : insérer une recherche et une message box dans une macro existante

Re Papou-net,

Ce que tu me proposes est nickel ! C'est tout à fait ce que je recherche. :)
Pour l'erreur remontée, il me semblait bien qu'il suffisait de faire ce changement mais le pro, c'est toi !

A çà, je te poserais 2 questions :
1- Avant la modif des codes, la ligne des onglets était masquée. Peut-on le refaire et si oui, comment ?
2- Est-il possible de modifier le format du texte de la box (police, couleur, format...) ? Est-ce le même principe que pour du bbcode, par exemple ?

Pour ce qui est des mots de passe, je ne me souvenais pas en avoir mis. Je ne suis pas certain non plus que c'était un réel frein pour toi, à la vue de tes connaissances... ;)
Je te propose donc de te remettre le fichier sans les mots de passe. Franchement, si tu me proposes aussi une solution pour le + de 19 caractères, tu deviendrais un Dieu pour moi !!! :p

Encore merci pour ta patience et pour toute l'aide que tu m'apportes.

Bien à toi,
 

Pièces jointes

  • Copie de controle_carte_cadeau.xlsm
    26.1 KB · Affichages: 38
  • Copie de controle_carte_cadeau.xlsm
    26.1 KB · Affichages: 35

Papou-net

XLDnaute Barbatruc
Re : insérer une recherche et une message box dans une macro existante

RE:

Voici une copie corrigée.

J'avais réactivé l'affichage des onglets pour les tests et j'ai oublié de les désactiver.

N'ayant pas de lecteur optique, je n'ai pas pu vérifier la limitation du code à 19 caractères alors je ne te garantis pas que ma modification soit efficace.

A +

Cordialement.
 

Pièces jointes

  • Copie 01 de controle_carte_cadeau.xlsm
    26.8 KB · Affichages: 34
Dernière édition:

Fave

XLDnaute Junior
Re : insérer une recherche et une message box dans une macro existante

Je le testerais demain et je te dirais çà.

Autre chose, la touche "entrée" ne répond pas comme voulu mais simplement comme la touche "entrée"...
Aurais je loupé quelque chose ?

Pour ce qui est du format, pas de prise de tête. Je vais chercher car il est vrai, c'est la facilité de te poser la question directement... :D

Pour finir, j'ai un message d'erreur avec le code feuil2 que tu as rajouté quand je démarre le fichier pour la 1ère fois. Je vais sur le débogueur, je sauvegarde, je referme et là, l'erreur ne se produit plus. Une idée ?

Encore merci pour toute ton aide et très bonne soirée,
 

Papou-net

XLDnaute Barbatruc
Re : insérer une recherche et une message box dans une macro existante

RE:

Le dysfonctionnement de la touche Enter était probablement dû à l'erreur lors de l'ouverture.

Voici une version corrigée. Je me pose toutefois la question du nom pour la sauvegarde automatique (que j'ai également corrigée car elle générait une erreur). Le nom de fichier étant fixé en dur, la version précédente sera donc automatiquement écrasée. Par contre, il sera enregistré dans le même répertoire que le fichier source.

Bonne soirée.

A te lire.

Cordialement.
 

Pièces jointes

  • Copie 02 de controle_carte_cadeau.xlsm
    27.3 KB · Affichages: 40

Fave

XLDnaute Junior
Re : insérer une recherche et une message box dans une macro existante

Bonjour Papou-net,

Comme je te l'ai dit hier, je vais tester les 19 caractères cet après midi et je reviens vers toi pour le résultat.

J'ai testé ta dernière version et j'ai toujours le message d'erreur au premier lancement...

Une autre question : est-il possible de travailler sur un fichier en partagé alors qu'il contient et utilise des macros ou est-ce simplement impossible ?

Bon après midi.

Cordialement,
 

Papou-net

XLDnaute Barbatruc
Re : insérer une recherche et une message box dans une macro existante

Bonjour Fave,

Chez moi, sous Excel 2010, ça démarre normalement. Toutefois, essaie en remplaçant 'Feuil2.Select' par 'Feuil2.Activate'.

Concernant les fichiers partagés, je ne pense pas que l'utilisation des macros empêche d'y travailler. Mais n'ayant jamais pratiqué cet exercice (il me reste encore beaucoup à faire dans ma vie), je ne saurais être affirmatif.

Bonne journée.

a +

Cordialement.
 

Fave

XLDnaute Junior
Re : insérer une recherche et une message box dans une macro existante

RE Papou-net,

Je viens de faire le test avec le lecteur et c'est impeccable !!! Un immense merci !

Je finis de faire mes tests et je te dis ce qu'il en est.

Mais déjà, un très très grand merci à toi pour ta patience pour ton aide précieuse !!! :)
 

Fave

XLDnaute Junior
Re : insérer une recherche et une message box dans une macro existante

Re Papou-net,

Je te remercie beaucoup car tout fonctionne parfaitement bien. C'est un réel succès.

Encore une fois, un immense merci pour ta précieuse aide.

Très bon après midi.

Cordialement,
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 846
dernier inscrit
Silhabib