|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Bonjour,
Je me rends compte que je n'ai pas toutes les compétences requises à ce que je veux mettre en place, aprés trois jours de galère, je fais appel à vous. Mon objectif de macro est le suivant : Dans mon fichier excel (un template), l'utilisateur copie un certain nombre de données. Dans les autres onglets se trouvent des tables de référence. 1- La macro défini la dernière ligne du tableau présent dans Feuil1 2 - La macro néttoie les valeurs : suppression des " " et "." avant et aprés les valeurs saisies, remplacement des " " par des " " dans les valeurs. 3- La macro force le format de toutes les cellules en Texte. 4 - la macro vérifie que les champs des colonnes à en-têtes verts sont bien remplis (pas de " " ou " " ou "." sinon, cellule colorée rouge), que les valeurs saisies correspondent aux valeurs présentes dans la table de référence associée (dans un autre onglet) sinon, cellule colorée rouge. 5- La macro vérifie que les valeurs présentes dans la colonne bzu sont correctes par rapport à la valeur de la colonne1. Table de référence val/bzu dans l'onglet bzu. Si les valeur ne correspondent pas, cellule de la colonne bzu colorée en rouge. 6 - La macro vérifie que les valeurs de la colonne date (si elles sont présentes, pas obligatoires) sont bien au format DD/MM/YYYY (sinon, cellule colorée en rouge). 7 - Dans la colonne 6, le format doit être le suivant : 145.45 Le point est le séparateur, avec deux décimales aprés le point. Si la valeur saisie ne se termine pas par ".00", colorer la cellule en gris. 8 - Les valeurs des cellules de la colonne5 ne doivent pas faire plus de 25 caractères, sinon cellule colorée grise. 9 - Si par chance, aucune cellule n'avait été colorée, supprimer toutes les lignes qui se trouvent en dessous du tableau (par sécurité) et générer un fichier txt (tab delimited text) dans un dossier donné. J'ai pas mal d'idées, j'ai essayer de tourner mon algo dans tous les sens mais je suis définitivement mauvais...ou pas logique. Merci de votre aide ! Jacques |
|
|
01
|
|
|
#2 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Je n'ai pas encore regardé ton fichier, mais j'ai une première remarque. Pourquoi tu passes par un format texte ? Pour les nombres, il est plus logique que l'utilisateur rentres naturellement un nombre en utilisant le séparateur de décimal habituel de son PC et tu peux le mettre au format que tu souhaites avant de le transformer en TXT. Pareil pour les dates, ça va être un casse tête si tu veux forcer un format prédéfini. Au pire tu mets la colonnes dans un format avec le mois en texte pour qu'il puisse se rendre compte s'il a inversé mois et jour.
|
|
|
00
|
|
|
#3 |
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Bonjour Zebreloup,
En fait, tout ceci est dans le but d'importer les donner dans une base oracle. J'ai donc des impératifs de mise en forme. J'ai testé le truc dans tous les sens, si les cellules ne sont pas au format texte à la base, c'est la mouise... Pour "démystifier" mon projet, je propose de vraiment le décortiquer, en procédant par étapes simples. 1 - trouver la dernière ligne de mon tableau ? Qui saura, qui sauraaaaa, qui sauraaaaaaaaaaaa... J'ai réussi à trouver mon n° de derniere ligne !!! J'ai aussi réussi à virer ces conneries d'espaces avant et aprés !!! Savez vous comment : - virer les "doubles espaces" présents dans les expressions ? - verifier si cell.value se trouve bien dans un tableau d'un autre onglet ? Merci ! |
|
|
01
|
|
|
#4 | ||||||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Edit : Je suis un peu en retard pour la première question mais quand même :
Code :
Pour le remplacement, si monRange a été défini auparavant : Code :
Code :
|
||||||
|
|
00
|
|
|
#5 |
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Merci beaucoup !
Autre question, comment ecrire mon test vlookup en faisant référence à Worksheets(Manufacturers).Range("D58: D434") par exemple ? J'ai systématiquement l'erreur "Subscript out of range" ??! |
|
|
01
|
|
|
#6 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Il manquait peut-être les guillemets :
Code :
Worksheets("Manufacturers").Range("D58:D434") |
|
|
00
|
|
|
#7 | ||
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Problème :
Savez-vous comment contrôler que la valeur d'un champ ne dépasse pas X caractères ? Aussi, est-il possible de contrôler que la valeur du champ soit bien composée de trois chiffres par exemple ? J'aimerai mettre en place ces deux tests avec mise en forme conditionnelle. Enfin, comment faire un test sur la présence de deux valeurs dans ce type de test : Code :
![]() Merci d'avance ! |
||
|
|
00
|
|
|
#8 | ||
|
Expert Confirmé
![]() Philippe ex Observeur CGG / Analyste prog. Inscription : juin 2006 Messages : 1 713 ![]() |
Salut, adaptation à poursuivre
Code :
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )Balisez votre code après l'avoir indenté sous Excel via Smart Indenter Autre utilitaire : MZ Tools 3.0 VBA Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2 |
||
|
|
00
|
|
|
#9 |
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Bonjour Kiki29, merci !!!
J'ai adapté, c'est pile poil ce qu'il me fallait. Je ne sais pas pourquoi, je cherchais compliqué... Du coup j'en profite : J'ai dans ma colonne Q j'ai une donnée qui peut prendre plusieurs valeurs en fonction de la valeur en A. J'ai dans un autre onglet la table de référence A/Q. Comment coder ça...??? Je ne vois pas comment faire ça avec match. Je pense qu'il faudrait stocker les deux valeurs dans une sorte de tableau, ensuite parcourir ma table de référence et tester si une occurrence est trouvée...? Merci ! |
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Si tu connais la fonction Excel RechercheV (ou VLookUp en anglais), sache que tu peux l'utiliser en VBA
Code :
Application.WorksheetFunction.VLookUp(...) |
|
|
00
|
|
|
#11 |
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Au risque de paraître ridicule, je ne visualise pas la syntaxe appropriée pour le type de recherche que je souhaite faire.
Code :
VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup]) ...
|
|
|
00
|
|
|
#12 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Imaginons que ta table de correspondance est dans une feuille tabCorres au niveau A1:B100. Pour chaque ligne i concernée sur la feuille Feuil1 :
Code :
|
||
|
|
00
|
|
|
#13 | ||
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Ok, je commence à comprendre...
Justement, en gros je ne veux gérer que le cas ou il ne trouve rien. J'ai ce code : Code :
Je ne suis pas certain de ce que renvoie Vlookup, c'est pourquoi mon test est peut être mauvais... Je ne suis pas certain non plus d'avoir saisi à quoi servait le 2 ? "la deuxième colonne de la ligne sur laquelle il a trouvé la valeur en première colonne" Merci de votre aide. |
||
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Je ne comprends pas bien ta double boucle (pour chaque ligne, tu boucles sur toutes les cellules de la colonne jusqu'à cette ligne. Si tu as 100 lignes, tu vas faire 100 fois la même chose pour la première ligne, 99 fois pour la deuxième...). Tu utilises également i qui sort d'on ne sait où...
Pour la compréhension de VLookup, si tu as un Excel Français, essaie de mettre en Q2 : Code :
=RECHERCHEV($A2;CU!$A$2:$B$576;2;FAUX) En anglais, tu remplaces RECHERCHEV par VLOOKUP et les ; par des , cette fonction va rechercher dans la première colonne de la plage CU!A2:B576, la valeur qui est en A2. S'il la trouve, il va chercher sur la même ligne, la valeur située dans la colonne i (ici 2) de la plage en question. Le dernier paramètre précise si la recherche est approchée ou pas |
|
|
00
|
|
|
#15 | ||
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Le "i" n'avait effectivement rien à faire là.
Pour ce qui est du procédé, je parcours chaque colonne de la ligne 2 à la dernière ligne en appliquant une mise en forme conditionnée par le résultat des tests. Si j'ai tout bien saisi, mon test devrait s'écrire comme ce qui suit ? Code :
|
||
|
|
00
|
|
|
#16 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Avec ce que tu fais, toute ta colonne Q n'est conditionnée qu'à la dernière valeur sur la colonne A :
Pour chaque ligne m, si valeurs en A répond au critère, colorier toutes les cellules de la colonne Q entre 1 et m en rouge ! Essaie plutôt : Code :
|
||
|
|
00
|
|
|
#17 |
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
Bon...je dois être abruti, rien ne fonctionne. Enfin ça tourne mais ne donne pas le résultat escompté...
Tu veux bien qu'on reprenne le fichier que j'ai posté en exemple ? En fait, je voudrais vérifier que les valeurs de la colonne bzu dans feuil1 soient ok par rapport aux valeurs de la colonne1 dans feuil1 en prenant le tableau de l'onglet bzu en référence. Si la valeur est ok par rapport à colonne1 ==> nada Si pas ok ==> colorée rouge Merci de ta patience, je comprends vite mais il faut m'expliquer longtemps...
|
|
|
00
|
|
|
#18 | ||
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Il y a plusieurs façons de faire, mais voici un code qui marche chez moi sur ton fichier :
Code :
|
||
|
|
00
|
|
|
#19 |
Administrateur systèmes et réseaux Inscription : décembre 2011 Messages : 14 ![]() |
ça marche...
ZebreLoup.Merci. |
|
|
00
|
|
|
#20 |
|
Membre Expert
![]() Sebastien LIngénieur Financier Inscription : mars 2010 Messages : 880 ![]() |
Allez regarde bien ce que je t'ai donné, tu verras qu'il manque un .Column (Pour faire un offset jusqu'à la première colonne en fait). Bière ?
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com