Matrice
Bonjour à tous et à toutes, expert d’Excel.
Je suis débutant sur le logiciel, mais on m’a confié un gros projet. J’ai lu les cours fait les exercices mais je ne parviens pas à trouver une solution. A chaque fois je me trouve bloqué au bout d’un moment. C’est pour cela que je me tourne vers vous.
Chaque jour une personne reçoit par mail une matrice. Elle l’imprime puis la saisie manuellement comme dans la feuille « résultat attendu ». L'objectif serait de copier/coller la matrice dans une plage prévue (représentée par les bordures ici) et que tout soit saisie comme dans l’exemple.
Le but serait d’arriver à obtenir le résultat dans la feuille « Résultat attendu exemple ». Avec le moins de manipulations de saisie possible, en utilisant au choix VBA ou des formules Excel.
Avant tout j’aimerai surtout un avis, que me conseillez-vous de faire au vue de ce fichier ?
Si vous avez des pistes à étudier je suis preneur.
En vous remerciant.
Bonne année à vous.
Bonjour,
pourrais-tu nous mettre une copie du mail contenant la matrice ou une copie de la matrice telle qu'elle est copiée du mail ?
Bonjour,
En voyant ton fichier, je me dis qu'un coup de VBA pourrait tout faire d'après moi. La seule chose que je ne comprends pas c'est où tu vas chercher le nombre de camions, mais en clair, en faisant des boucles tu peux largement t'en sortir pour ton cas, la seule chose c'est qu'il faut prendre le temps de bien écrire le programme et de l'optimiser, ainsi que de gérer les fusions de cellules qui sont omniprésentes dans ton fichier...
Sinon pour moi ce serait ça la piste à suivre, tu cherches simplement à réécrire les données autrement, VBA peut te faire ça.
Bonjour h2so4,
Elle arrive exactement comme dans la feuille "donnés". (J'ai juste fais un copier/coller). La personne qui occupait mon poste avant avait mis cela en place. Si besoin je peux la modifier, seule contrainte je dois avoir toute les informations qu'elle contient actuellement.
En résumé, je l'envoie vide dans un premier temps, mon interlocuteur me la renvoie rempli (avec des données chiffrées) et on peut ensuite passer à la saisie comme dans l'onglet "résultat attendu (exemple)" à la main.
Merci pour votre réponse.
Bonjour,
donc pas de problème avec le copier/coller ?
tu as juste besoin d'automatiser la création de la feuille "résultat attendu" ?
Bonjour Ausecour,
Pour le nombre de camion : 1 camion = 33 palettes (par colonne dans la matrice qui se trouve sur la feuille "Donnés")
Par exemple : 2 camions pour CFC en Jour 1 car 42 palettes (33< 42 <66), 33 palettes dans un camion et le reste (9 palettes) sans un second camion. S'il y avait eu 67 palettes il y aurait eu 3 camions et ainsi de suite.
Merci pour ton avis, j'arrive en effet à automatiser certaines manipulation via VBA.
Le 1er problème est par exemple lorsque j'ai des lignes avec seulement quelques colis (0 palette, mais un poids à saisir et une ligne à créer) c'est le cas notamment pour LILLE dans ce fichier. Sachant que je peux avoir des palettes et un poids aussi.
2ème problème : lorsque j'ajoute une seconde matrice (Jour 2) je n'arrive pas à ce que les données se copient à la suite de la précédente sans affecter les données du dessus. (par exemple pour la date)
Autre question (peut-être bête) : n'est-il pas possible de mixer les fonctions recherche et VBA ?
Merci pour ta réponse et ton temps précieux.
Re-bonjour h2so4,
Non pas de problème avec le copier/coller. Désolé je me suis peut-être mal exprimé.
Mon problème est que je recherche une solution pour transformer les valeurs de la matrice dans la feuille "Donnés" sous la forme de la feuille "resultat attendu (exemple)" en un minimum de manipulation. Car actuellement tout se fait à la main ligne par ligne.
Pour ce faire, je ne sais pas ce que je dois utiliser. Plutôt VBA, Excel ? Voir modifier la "matrice".
Merci pour ta réponse et ton temps précieux également.
Rebonjour,
Pour ton premier problème je pense qu'il faut tester si ta ligne contient POIDS dans la colonne concernée (ou non), pour le soucis des colis, regarde si tes cellules contiennent colis avec une fonction de recherche de texte (se trouve dans la famille de fonctions Strings, elle s'appelle str je crois mais à vérifier.
Pour ton secon problème, il faut que tu enregistres quelque part la ligne à laquelle tu en es dans ton tableau, tu écriras à partir de cette ligne uniquement, et tu l'incrémentes à chaque fois que tu écris sur une nouvelle ligne, pour passer à la suivante.
J'espère que tu as compris mes explications et que mes idées répondront à tes problèmes...
Merci beaucoup Ausecour,
Je vais faire une tentative je reviens vers vous.
Me revoila,
Je bloque concernant le début de ma macro. Au départ je commençais à faire ligne par ligne de la manière suivante :
Sheets("Tentative").Range("A2").Value = Sheets("Données").Range("A14").Value
Or je suis conscient que si je fais ça pour chaque cellule je ne suis pas sorti de l’auberge. Je pense donc à faire une boucle comme tu me l’as conseillé.
Je ne sais pas par où commencer tant il y a de contraintes.
Pour la première colonne (Jour) par exemple, je dois générer un nombre automatique tant que mes infos se trouvent dans le tableau correspondant au jour 1. (Je ne trouve pas l’expression de cette contrainte sous VBA). Même chose pour la date (3ème colonne).
Ensuite je dois, à chaque fois qu’il y a un chiffre dans une colonne prendre le code de l’entrepôt (CE790), le fournisseur, la palette, le 2ème étage ainsi de suite… Le problème est qu’au début de la colonne j’ai d’autres valeurs 1er chargement, 2ème chargement et palettes gagnées, qu’il faut donc ignorer pour ne pas créer de lignes supplémentaires
Enfin dernière contrainte, lorsque j’arrive à une info de type (1 colis) avec une valeur décimale en dessous il faut que j’affiche 0 dans la colonne palette, et la valeur décimale du dessous dans la colonne poids.
Pouvez-vous m’éclairer ?
En vous remerciant,
Bonjour,
J'ai commencé à me pencher sur le sujet, j'ai préféré commencer une nouvelle macro, pour le moment j'ai ça:
Sub Retraitement()
Dim cel_jour As Range
Dim entrepots As New Collection
Jour = ""
Datejour = 0
fournisseur = ""
transporteur = ""
Set cel_jour = Range("a14")
col_date = 8
With Feuil1
While cel_jour <> ""
Jour = "J" & cel_jour
Datejour = Cells(cel_jour.Row, col_date)
Set cel_jour = cel_jour.End(xlDown)
Wend
End With
End SubBon ce n'est qu'un début mais il y a l'idée, en clair j'enregistrerai le numéro du jour dans une variable, ensuite on appelera cette valeur pour chaque ligne, idem pour la date du jour, une boucle "tant que..." permettra de faire tous les jours grâce à la ligne "Set cel_jour = cel_jour.end(xlDown)".
Pour les cellules fusionnées il faut que je regarde comment régler ça avec des boucles je pense... quand aux valeurs qu'elles contiennent, je compte également contenir ça dans des variables, pour savoir combien de palettes sont dans l'entrepot, je pensais passer par un objet un peu particulier, une collection, ce point là par contre... je n'en suis pas encore sûr, c'est à voir...
En tout cas un gros merci à toi Ausecour, ça me permet déjà de me faire une idée du résultat et de comment procéder. Je reconnais avoir quelques lacunes dans VBA.
Je vais également essayer tant bien que mal de regarder de mon côté.
Bonjour,
une proposition dont la stabilité dépendra de la stabilité de la structure de la matrice copiée. à savoir
1) une cellule contenant Matrice Jn : en colonne A pour identifier le début d'un tableau à prendre en compte pour mettre dans la feuille résultat.
2) en regard de cette cellule sur la même ligne, la présence d'une date en colonne 5, confirme qu'il y a des données dans le tableau
3) la ligne contenant le nom des transporteurs se trouve 2 lignes plus bas que la cellule contenant matrice et va de la colonne G à la colonne P
4) la colonne contenant le nom des fournisseurs est la colonne E
5) les lignes desquelles il faut extraire les valeurs contiennent en colonne F :
Total (à saisir) ou PAL pour les palettes
2ème étage (à saisir) pour 2 eme étage
PAL /COLIS pour les palettes ou Colis avec poids
POIDS pour le poids
6) il y a une ligne Total suivie d'une ligne nombre de Camion à la fin du tableau et dans les 38 lignes suivent la cellule contenant Matrice.
lancer la macro aargh via alt-F8, résultat dans la feuille tentative.
Bonjour h2so4,
Merci pour le boulot que tu as accompli, je ne sais pas comment je peux te remercier ! Je n'y serai pas arrivé tout seul pour être honnête !
Puis-je te demander de m'expliquer brièvement comment tu t'y es pris ? (quand tu auras le temps, ça ne presse pas)
Il ne reste plus qu'à l'adapter à mon fichier de base.
UN GRAND MERCI !
Merci h2so4 pour ce retour, je te laisse expliquer ton travail
Bonne journée à vous deux!
Bonjour Ausecour,
Merci à toi aussi, pour avoir passé du temps à résoudre mon problème !
Passe une excellente journée
De rien
Si h2so4 ne répond pas d'ici demain, n'hésites pas à renvoyer un message pour que j'essaye de jeter un oeil à ce qu'il a fait