VBA Excel, tri en fonction de str
Résolu/Fermé
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
-
Modifié par Brasiligun le 24/05/2016 à 15:25
Brasiligun Messages postés 122 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 4 mars 2019 - 30 juin 2016 à 15:39
Brasiligun Messages postés 122 Date d'inscription mardi 29 décembre 2009 Statut Membre Dernière intervention 4 mars 2019 - 30 juin 2016 à 15:39
12 réponses
Bonjour,
Avec une petite boucle for et plusieurs critères de recherche :
Sub tri()
Dim I As Variant
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(I, 1), "Parabole") <> 0 Or InStr(Cells(I, 1), "Rateau") <> 0 Or InStr(Cells(I, 1), "Wifi") <> 0 Then Cells(I, 2) = "Antenne"
Next I
End Sub
Le meme résultat avec la recherche *Like* :
If Cells(I, 1).Value Like "Parabole" Or Cells(I, 1).Value Like "Rateau" Or Cells(I, 1).Value Like "Wifi" Then Cells(I, 2) = "Antenne"
A votre disposition pour d'éventuelles questions
Avec une petite boucle for et plusieurs critères de recherche :
Sub tri()
Dim I As Variant
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(I, 1), "Parabole") <> 0 Or InStr(Cells(I, 1), "Rateau") <> 0 Or InStr(Cells(I, 1), "Wifi") <> 0 Then Cells(I, 2) = "Antenne"
Next I
End Sub
Le meme résultat avec la recherche *Like* :
If Cells(I, 1).Value Like "Parabole" Or Cells(I, 1).Value Like "Rateau" Or Cells(I, 1).Value Like "Wifi" Then Cells(I, 2) = "Antenne"
A votre disposition pour d'éventuelles questions
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
24 mai 2016 à 21:12
24 mai 2016 à 21:12
Un énorme merci! je comprend mieux la syntaxe des boucles for du coup!
Je ne trouve pas le VB particulièrement intuitif à l'inverse du C ou du Pyhton mais j'ai l'impression que couplé à Excel il a un potentiel monstrueux
Du coup grâce a ton code en m'en inspirant plus qu’énormément, j'ai pu obtenir ce que je voulais:
Demain j'essayerai de modifier ça pour avoir sur une autre feuille, tous les objets disponibles avec la famille à la quelle ils appartiennent (comme une base de données). Et lorsque que sur une autre feuille sélectionnée, en présence de quelques objets issus de cette base de données mais qui n'ont pas encore été trier, au lancant de la macro, elle ira vérifier cette base de données pour trouver ces même produits déjà triés, et donc leurs donner leurs famille. Je ne sais pas si c'est possible en VB mais c'est la petite idée que j'ai en tête et que je souhaite réaliser
En tout cas encore merci! Et bonne soirée
Je ne trouve pas le VB particulièrement intuitif à l'inverse du C ou du Pyhton mais j'ai l'impression que couplé à Excel il a un potentiel monstrueux
Du coup grâce a ton code en m'en inspirant plus qu’énormément, j'ai pu obtenir ce que je voulais:
Sub tri()
Dim I As Variant
'Antennes'
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(I, 1), "Parabole") <> 0 Or InStr(Cells(I, 1), "Rateau") <> 0 Or InStr(Cells(I, 1), "Wifi") <> 0 Then Cells(I, 2) = "Antenne"
Next I
'Cartes'
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(I, 1), "Atmega") <> 0 Or InStr(Cells(I, 1), "Arduino") <> 0 Or InStr(Cells(I, 1), "Polulu") <> 0 Or InStr(Cells(I, 1), "Driver") <> 0 Then Cells(I, 2) = "Carte"
Next I
'Liaisons'
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
If InStr(Cells(I, 1), "BusCAN") <> 0 Or InStr(Cells(I, 1), "RS232") <> 0 Or InStr(Cells(I, 1), "LI-FI") <> 0 Or InStr(Cells(I, 1), "SPI") <> 0 Or InStr(Cells(I, 1), "I2C") <> 0 Or InStr(Cells(I, 1), "RS512") <> 0 Or InStr(Cells(I, 1), "LI-FI") <> 0 Or InStr(Cells(I, 1), "Bluetooth") <> 0 Or InStr(Cells(I, 1), "Ethernet") <> 0 Then Cells(I, 2) = "Liaison"
Next I
End Sub
Demain j'essayerai de modifier ça pour avoir sur une autre feuille, tous les objets disponibles avec la famille à la quelle ils appartiennent (comme une base de données). Et lorsque que sur une autre feuille sélectionnée, en présence de quelques objets issus de cette base de données mais qui n'ont pas encore été trier, au lancant de la macro, elle ira vérifier cette base de données pour trouver ces même produits déjà triés, et donc leurs donner leurs famille. Je ne sais pas si c'est possible en VB mais c'est la petite idée que j'ai en tête et que je souhaite réaliser
En tout cas encore merci! Et bonne soirée
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
24 mai 2016 à 21:49
24 mai 2016 à 21:49
Surtout ne vous embêtez pas trop :p Je m'y remet demain matin, je me permettrais de vous montrer mon ébauche de code
En tout cas merci de votre aide, et une bonne soirée à vous
Thomas
En tout cas merci de votre aide, et une bonne soirée à vous
Thomas
Bonjour,
dans une feuille nommée liste matériel remplissez les colonnes A et B avec la base de données (en A les produits et B les familles)
Option Explicit
Sub tri()
Dim I As Variant, J As Variant
Dim cible1 As String, cible2 As String, nomfeuille As String
nomfeuille = ActiveSheet.Name
Range(Cells(1, 2), Cells(Range("A" & Rows.Count).End(xlUp).Row, 2)).ClearContents
Sheets("liste matériel").Activate
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
cible1 = Cells(I, 1).Value
cible2 = Cells(I, 2).Value
Sheets(nomfeuille).Activate
For J = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(J, 1) <> "" Then
If InStr(Cells(J, 1), cible1) <> 0 And Cells(J, 2) <> "" Then
Cells(J, 1).Select
MsgBox "Attention " & cible1 & " fait déjà partie de la famille " & cible2
End If
If InStr(Cells(J, 1), cible1) <> 0 And Cells(J, 2) = "" Then Cells(J, 2) = cible2
End If
Next J
Sheets("liste matériel").Activate
Next I
Sheets(nomfeuille).Activate
End Sub
J'espère que c'est ce que vous vouliez faire...
dans une feuille nommée liste matériel remplissez les colonnes A et B avec la base de données (en A les produits et B les familles)
Option Explicit
Sub tri()
Dim I As Variant, J As Variant
Dim cible1 As String, cible2 As String, nomfeuille As String
nomfeuille = ActiveSheet.Name
Range(Cells(1, 2), Cells(Range("A" & Rows.Count).End(xlUp).Row, 2)).ClearContents
Sheets("liste matériel").Activate
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
cible1 = Cells(I, 1).Value
cible2 = Cells(I, 2).Value
Sheets(nomfeuille).Activate
For J = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(J, 1) <> "" Then
If InStr(Cells(J, 1), cible1) <> 0 And Cells(J, 2) <> "" Then
Cells(J, 1).Select
MsgBox "Attention " & cible1 & " fait déjà partie de la famille " & cible2
End If
If InStr(Cells(J, 1), cible1) <> 0 And Cells(J, 2) = "" Then Cells(J, 2) = cible2
End If
Next J
Sheets("liste matériel").Activate
Next I
Sheets(nomfeuille).Activate
End Sub
J'espère que c'est ce que vous vouliez faire...
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 25/05/2016 à 14:25
Modifié par Brasiligun le 25/05/2016 à 14:25
En fait, j'ai un petit projet à faire, je dois créer une macro pour Excel pour pouvoir traiter les familles d'une multitude de référence d'objets
Le code que vous m'avez fourni fonctionne parfaitement! Je ne connaissais pas l'option Explicit, c'est super, franchement! je vais continuer de peaufiné ça mais je vais énormément avancer aujourd'hui grave à vous
Un énorme merci! je vous payerai bien une bière ou un café (au choix) :p
Cordialement
Le code que vous m'avez fourni fonctionne parfaitement! Je ne connaissais pas l'option Explicit, c'est super, franchement! je vais continuer de peaufiné ça mais je vais énormément avancer aujourd'hui grave à vous
Un énorme merci! je vous payerai bien une bière ou un café (au choix) :p
Cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 25/05/2016 à 15:45
Modifié par Brasiligun le 25/05/2016 à 15:45
je viens juste de penser à un petit cas d'erreur, si le produit n'est pas présent ou référencé dans la Base de donnée, puis-je utiliser un Else ou un autre test quelconque pour afficher une MsgBox "Un produit n'est pas présent dans la BDD" ou même pour cibler le produit en question "Ce produit n'est pas présent dans la BDD"
Si ce n'est pas possible t'en pis mais je viens juste d'y penser
En tout cas, grâce à toi j'ai presque fini o/
Si ce n'est pas possible t'en pis mais je viens juste d'y penser
En tout cas, grâce à toi j'ai presque fini o/
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
>
Stif
25 mai 2016 à 22:08
25 mai 2016 à 22:08
J'ai tenté de l'ajouter, mais que toutes les pièces soient comprises dans la BDD ou à l'inverse aucune, il affiche toujours le message ATTENTION ce produit n'est pas présent dans la BDD"
J'ai cherché le pourquoi, et j'ai l'impression que c'est une erreur de lecture de la colonne A de la BDD. J'ai essayé de la corrigé ce soir mais sans succès, je ré-attaque demain
Si tu met le doigt dessus avant moi merci d'avance, mais quoi qu'il en soit ne te dérange pas trop tu m'as déjà bien sorti du caca :3
L'amateur de bière au soleil, encore merci et bonne soirée :p
J'ai cherché le pourquoi, et j'ai l'impression que c'est une erreur de lecture de la colonne A de la BDD. J'ai essayé de la corrigé ce soir mais sans succès, je ré-attaque demain
Si tu met le doigt dessus avant moi merci d'avance, mais quoi qu'il en soit ne te dérange pas trop tu m'as déjà bien sorti du caca :3
L'amateur de bière au soleil, encore merci et bonne soirée :p
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
26 mai 2016 à 14:19
26 mai 2016 à 14:19
J'ai bidouillé un peu, il y a du mieux, mais de petites nouvelles erreurs sont apparues par exemple, il dit que certains objets sont déjà présent dans une certaine famille (alors que ces objets apparaissent une seule fois), mais bon c'est minime et ça ne gêne pas il suffit de retirer la MsgBox, et au moins quand les objets sont dans la BDD il ne dit plus rien donc nickel!
Alors maintenant pour les objets manquants, le truc bizarre c'est qu'il dit le nombre d'objets manquant +1. Pour l'exemple je t'ai donné 2 feuilles:
https://drive.google.com/open?id=0ByykuPoanvBmOE0xLWo0U1dFVGM
- une ou tous les objets sont présent, donc il ne dit rien (parfait)
- dans le second fichier il manque 3 objets, il dit donc 4 fois via MsgBox qu'un objet n'est pas présent dans la BDD sans dire le quel, (ça serrait top s'il disait objet xxx non présent à chaque fois qu'il rencontre un objet qui n'est pas dans la BDD).
Après j'ai encore pensé a quelque chose, j'essaye de le mettre en place depuis ce matin mais j'ai l'impression que ce n'est pas possible car trop de va et vient dans l'écriture des fichiers), ça serrait qu'à chaque objet non présent dans le fichier besoin_client (colonne A), il propose de l'ajouter à la BDD et qu'il nous demande sa famille d'appartenance
Mais c'est encore du chipotage au moins mon projet tourne grâce a toi :p
(les exemples ne sont pas top c'était pour y voir clair et chercher les eventuels dépassements)
Alors maintenant pour les objets manquants, le truc bizarre c'est qu'il dit le nombre d'objets manquant +1. Pour l'exemple je t'ai donné 2 feuilles:
https://drive.google.com/open?id=0ByykuPoanvBmOE0xLWo0U1dFVGM
- une ou tous les objets sont présent, donc il ne dit rien (parfait)
- dans le second fichier il manque 3 objets, il dit donc 4 fois via MsgBox qu'un objet n'est pas présent dans la BDD sans dire le quel, (ça serrait top s'il disait objet xxx non présent à chaque fois qu'il rencontre un objet qui n'est pas dans la BDD).
Après j'ai encore pensé a quelque chose, j'essaye de le mettre en place depuis ce matin mais j'ai l'impression que ce n'est pas possible car trop de va et vient dans l'écriture des fichiers), ça serrait qu'à chaque objet non présent dans le fichier besoin_client (colonne A), il propose de l'ajouter à la BDD et qu'il nous demande sa famille d'appartenance
Mais c'est encore du chipotage au moins mon projet tourne grâce a toi :p
(les exemples ne sont pas top c'était pour y voir clair et chercher les eventuels dépassements)
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 26/05/2016 à 15:37
Modifié par Brasiligun le 26/05/2016 à 15:37
Le probleme de l'objet manquant +1 semble se corriger en faisant:
Mais j'ai des décalage de valeur. Imaginons qu'il me manque 3 pièces par rapport a la BDD, il va m'afficher 3 MsgBox mais en ne disant pas le bon nom d'article
J'avance o/
'Gestion de présence dans la BDD'
For I = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(I, 2) = "" And Cells(I, 1) <> "" Then
Cells(I, 1).Select
MsgBox "ATTENTION un produit n'est pas présent dans la BDD"
End If
Next I
</code
Donc avec I=2 au lieu de I=1, j'ai fais des essais, ça semble marcher mais à confirmer à la longue avec des exemples plus compliqué
Et pour indiquer le produit manquant j'ai fait:
<code>For I = 2 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(I, 2) = "" And Cells(I, 1) <> "" Then
Cells(I, 1).Select
MsgBox "ATTENTION " & cible1 & " n'est pas présent dans la BDD"
End If
Next I
Mais j'ai des décalage de valeur. Imaginons qu'il me manque 3 pièces par rapport a la BDD, il va m'afficher 3 MsgBox mais en ne disant pas le bon nom d'article
J'avance o/
Voilà testes ces quelques lignes / dernière boucle For I à remplacer par :
Sheets(nomfeuille).Activate
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(I, 2) = "" And Cells(I, 1) <> "" Then
cible1 = Cells(I, 1).Value
Cells(I, 1).Select
MsgBox "ATTENTION " & cible1 & " n'est pas présent dans la BDD"
If MsgBox("Voulez-vous rajouter cet objet dans la BBD", vbYesNo, "Demande de confirmation") = vbYes Then
cible2 = InputBox("Quelle est la famille de cet objet?", "Rensignez la famille de cet objet")
Sheets("BDD").Activate
For J = 2 To Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("BDD").Activate
cible3 = Cells(J, 2).Value
If UCase(cible3) <> cible3 Then
cible2 = StrConv(cible2, vbProperCase)
Else: cible2 = UCase(cible2)
End If
If cible2 = cible3 And Cells(J, 2) <> "" Then
Range(Cells(J, 1), Cells(J, 2)).Select
Selection.Copy
Selection.Insert Shift:=xlDown
Cells(J, 1) = cible1
Sheets(nomfeuille).Activate
Exit For
End If
If Cells(J, 1) = "" And Cells(J, 2) = "" Then
cible2 = StrConv(cible2, vbProperCase)
Cells(J, 1) = cible1
Cells(J, 2) = cible2
Sheets(nomfeuille).Activate
Exit For
End If
Next J
End If
End If
Next I
If MsgBox("Voulez-vous relancer l'analyse?", vbYesNo, "Demande de confirmation") = vbYes Then Call tri
Sheets(nomfeuille).Activate
For I = 1 To Range("A" & Rows.Count).End(xlUp).Row
If Cells(I, 2) = "" And Cells(I, 1) <> "" Then
cible1 = Cells(I, 1).Value
Cells(I, 1).Select
MsgBox "ATTENTION " & cible1 & " n'est pas présent dans la BDD"
If MsgBox("Voulez-vous rajouter cet objet dans la BBD", vbYesNo, "Demande de confirmation") = vbYes Then
cible2 = InputBox("Quelle est la famille de cet objet?", "Rensignez la famille de cet objet")
Sheets("BDD").Activate
For J = 2 To Range("A" & Rows.Count).End(xlUp).Row + 1
Sheets("BDD").Activate
cible3 = Cells(J, 2).Value
If UCase(cible3) <> cible3 Then
cible2 = StrConv(cible2, vbProperCase)
Else: cible2 = UCase(cible2)
End If
If cible2 = cible3 And Cells(J, 2) <> "" Then
Range(Cells(J, 1), Cells(J, 2)).Select
Selection.Copy
Selection.Insert Shift:=xlDown
Cells(J, 1) = cible1
Sheets(nomfeuille).Activate
Exit For
End If
If Cells(J, 1) = "" And Cells(J, 2) = "" Then
cible2 = StrConv(cible2, vbProperCase)
Cells(J, 1) = cible1
Cells(J, 2) = cible2
Sheets(nomfeuille).Activate
Exit For
End If
Next J
End If
End If
Next I
If MsgBox("Voulez-vous relancer l'analyse?", vbYesNo, "Demande de confirmation") = vbYes Then Call tri
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
27 mai 2016 à 10:14
27 mai 2016 à 10:14
Monstrueux, franchement respect :p Ecoute encore une fois merci!
Je vais maintenant essayer d'ajouter une 3ieme colonne "constructeur" à la bdd et appliquer les mêmes conditions mais je devrais savoir me débrouiller :p Je te contacte encore une fois si je bute sur un point mais ça devrait rouler
Franchement juste merci!
Je vais maintenant essayer d'ajouter une 3ieme colonne "constructeur" à la bdd et appliquer les mêmes conditions mais je devrais savoir me débrouiller :p Je te contacte encore une fois si je bute sur un point mais ça devrait rouler
Franchement juste merci!
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 27/05/2016 à 14:05
Modifié par Brasiligun le 27/05/2016 à 14:05
Une nouvelle modif va tomber
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 27/05/2016 à 14:15
Modifié par Brasiligun le 27/05/2016 à 14:15
Hum, le problème c'est que maintenant j'ai reçu une liste beaucoup plus complexe avec beaucoup de produit qui ne sont pas encore référencé (environ 15 000 réf pour seulement 3000 connus), et la c'est la douleur du coup
Alors j'ai modifié ton code pour qu'il ajoute systématiquement les nouveaux objets dans la BDD sans demander quelles sont leurs familles, il marque automatiquement "?" dans la famille pour que l'utilisateur le renseigne lui même après. C'est moins cool que la fenêtre qui demande mais c'est vrai que c'est plus rapide du coup
La nouvelle étape qui m'a été demandé c'est d'ajouté deux catégories supplémentaires, la 3ième qui correspond à si le produit est fabriqué par nous ou si elle est sous-traité et la 4ieme le nom des société qui achèteront ce matériel ou sont clientes
Pour ces nouvelles catégories je pense pouvoir réutiliser ton tri et l'appliquer aux catégories
genre
- tri1: famille produit
- tri2: tri production
- tri3: tri acheteur
Je me suis permis de remettre à jours les fichiers que je t'avais partagé pour que tu me donnes ton avis sur le système que la BDD ajoute les nouveautés d'elle même, si tu pouvais me dire ce que tu en penses ou si c'est pas top
https://drive.google.com/open?id=0ByykuPoanvBmOE0xLWo0U1dFVGM
Merci bien :p
Alors j'ai modifié ton code pour qu'il ajoute systématiquement les nouveaux objets dans la BDD sans demander quelles sont leurs familles, il marque automatiquement "?" dans la famille pour que l'utilisateur le renseigne lui même après. C'est moins cool que la fenêtre qui demande mais c'est vrai que c'est plus rapide du coup
La nouvelle étape qui m'a été demandé c'est d'ajouté deux catégories supplémentaires, la 3ième qui correspond à si le produit est fabriqué par nous ou si elle est sous-traité et la 4ieme le nom des société qui achèteront ce matériel ou sont clientes
Pour ces nouvelles catégories je pense pouvoir réutiliser ton tri et l'appliquer aux catégories
genre
- tri1: famille produit
- tri2: tri production
- tri3: tri acheteur
Je me suis permis de remettre à jours les fichiers que je t'avais partagé pour que tu me donnes ton avis sur le système que la BDD ajoute les nouveautés d'elle même, si tu pouvais me dire ce que tu en penses ou si c'est pas top
https://drive.google.com/open?id=0ByykuPoanvBmOE0xLWo0U1dFVGM
Merci bien :p
Stif
>
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
29 mai 2016 à 00:37
29 mai 2016 à 00:37
Je regarde ça Lundi matin no souci ;)
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
30 mai 2016 à 09:17
30 mai 2016 à 09:17
ça roule merci
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 3/06/2016 à 10:37
Modifié par Brasiligun le 3/06/2016 à 10:37
Re-bonjour, j'aurais une petite question a te poser, j'ai une date dans une colonne de type JJ/MM/AAAA, et dans une colonne je dois mettre que l'année, l'autre que le mois, la troiseme le numero de la semaine
Donc pas de probleme imagine =ANNEE(), =MOIS(), =NO.SEMAINE
Avec l’enregistreur ça marche très bien, mais le probleme c'est que si un jour le fichier ne fait plus 1500 lignes mais 3000, bah les dates n'iront pas jusqu'au bout. Donc je me demandais avec programmation, comment faire un peu comme pour les tri, générer les dates en fonction de la colonne JJ/MM/AAAA pour qu'il y ait toujours le bon nombre de données. J'ai essayé mais ça merdouille
1) En A il faut convertir la date en jj.mm.aaaa en date, donc onglet convertir et pas de probleme, mais je me demande si un jour j'ai un tableau énorme est-ce qu'il y aura conversion jusqu'au bout
2) En B sortir l'année de cette date (la c'est sur qu'en cas de grand tableau, à cause de enregistreur ça pose un gros pb)
3) En C le mois (idem)
4) En D le n°semaine (idem)
Je voudrais que 2-3-4 soient fait en fonction de A comme pour le tri, et pas sur une plage fixe à cause de l’enregistreur
Tu verras j'ai fais un petit exemple ou comme des données ne sont pas en A, il y à une plage d'erreur
https://drive.google.com/open?id=0ByykuPoanvBmOXF3eDlQMXhFWVE
Merci beaucoup! :p
Donc pas de probleme imagine =ANNEE(), =MOIS(), =NO.SEMAINE
Avec l’enregistreur ça marche très bien, mais le probleme c'est que si un jour le fichier ne fait plus 1500 lignes mais 3000, bah les dates n'iront pas jusqu'au bout. Donc je me demandais avec programmation, comment faire un peu comme pour les tri, générer les dates en fonction de la colonne JJ/MM/AAAA pour qu'il y ait toujours le bon nombre de données. J'ai essayé mais ça merdouille
1) En A il faut convertir la date en jj.mm.aaaa en date, donc onglet convertir et pas de probleme, mais je me demande si un jour j'ai un tableau énorme est-ce qu'il y aura conversion jusqu'au bout
2) En B sortir l'année de cette date (la c'est sur qu'en cas de grand tableau, à cause de enregistreur ça pose un gros pb)
3) En C le mois (idem)
4) En D le n°semaine (idem)
Je voudrais que 2-3-4 soient fait en fonction de A comme pour le tri, et pas sur une plage fixe à cause de l’enregistreur
Tu verras j'ai fais un petit exemple ou comme des données ne sont pas en A, il y à une plage d'erreur
https://drive.google.com/open?id=0ByykuPoanvBmOXF3eDlQMXhFWVE
Merci beaucoup! :p
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
3 juin 2016 à 11:27
3 juin 2016 à 11:27
Résolu! J'ai créé une variable derniereLigne qui prend comme référence la colonne précédente, pour que la taille s'adapte toujours
Voila le résultat:
Voila le résultat:
Sub DateMacro()
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Columns("A:A").Select
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 4), TrailingMinusNumbers:=True
Selection.NumberFormat = "dd/mm/yy;@"
Range("B2").Select
ActiveCell.FormulaR1C1 = "=YEAR(RC[-1])"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=MONTH(RC[-2])"
Range("D2").Select
ActiveCell.FormulaR1C1 = "=WEEKNUM(RC[-3])"
Range("D3").Select
Range("B2").AutoFill Destination:=Range("B2:B" & DernLigne)
Range("C2").AutoFill Destination:=Range("C2:C" & DernLigne)
Range("D2").AutoFill Destination:=Range("D2:D" & DernLigne)
End Sub
Désolé l'ami soucis perso... De retour lundi je te bip les macros et regarde les derniers messages
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
3 juin 2016 à 13:40
3 juin 2016 à 13:40
Rien de grave j’espère :/ En tout cas te prend pas le choux, je me suis débrouillé pour la grande majorité des problèmes :p Il ne restera plus qu'a trouver le moyen d'appeler cette BDD et ça va etre nickel
Un bon weekend et bon courage alors
Un bon weekend et bon courage alors
Stif
>
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
8 juin 2016 à 19:54
8 juin 2016 à 19:54
Avec un peu de retard... J'espère que ça te servira quand même
http://www.cjoint.com/c/FFirY2xeKKO
http://www.cjoint.com/c/FFirY2xeKKO
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
9 juin 2016 à 11:34
9 juin 2016 à 11:34
Franchement énorme! Merci! J'ai réadapté aux nouveautés de ces dernières semaines mais franchement je n'aurais jamais su faire ce type de ciblage! Vraiment chapeau-bas! :p
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
9 juin 2016 à 21:01
9 juin 2016 à 21:01
Je n'osais pas te demander si ça aller mieux, nickel si ça roule maintenant :p
La dernière modification éventuelle que je n'ai pas encore fait, (ni essayé), c'est une dernière macro indépendante qui s’appellerait "Sauvegarde_BDD" par exemple, qui justement après que le fichier a été traité, et la base de donnée mise à jour avec les inconnus éventuels, sauvegarde uniquement la BDD, (que la feuille BDD.xls ou .xlsx)
Parce que dans l'état actuel des choses, il faut re-séparer besoin_client et la BDD pour save que la BDD
Ce qui faciliterait grandement la MàJ :3
Mais grâce à toi et tes indications dès le début, j'ai pu carrément beaucoup avancer dans mon coin, j'ai choppé le truc, et pour ça vraiment merci!
La dernière modification éventuelle que je n'ai pas encore fait, (ni essayé), c'est une dernière macro indépendante qui s’appellerait "Sauvegarde_BDD" par exemple, qui justement après que le fichier a été traité, et la base de donnée mise à jour avec les inconnus éventuels, sauvegarde uniquement la BDD, (que la feuille BDD.xls ou .xlsx)
Parce que dans l'état actuel des choses, il faut re-séparer besoin_client et la BDD pour save que la BDD
Ce qui faciliterait grandement la MàJ :3
Mais grâce à toi et tes indications dès le début, j'ai pu carrément beaucoup avancer dans mon coin, j'ai choppé le truc, et pour ça vraiment merci!
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
14 juin 2016 à 14:55
14 juin 2016 à 14:55
J'ai une nouvelle colle si ça intéresse :p
Chaque produit est associé une date, elle peut-être passée/aujourd'hui/futur
En cas de date passé, pour tout les articles, il faut que la date des articles passé soit mise à la date du dernier jours du mois précédent
Par exemple aujourd'hui 14/06/2016
Tout les articles <14/06/2016 doivent prendre la date du 31/05/2016
Demain idem, les articles du 14/06/2016 -> 31/05/2016
Ce qui implique, une fonction d'excel qui donne surement à une variable le jour d'aujourd'hui. Et surement un petit test qui regarde si la date des articles est inférieur ou égale à la valeur de cette variable
je vais m'y mettre, si tu trouves avant moi tiens moi au jus :p
Un grand merci
Chaque produit est associé une date, elle peut-être passée/aujourd'hui/futur
En cas de date passé, pour tout les articles, il faut que la date des articles passé soit mise à la date du dernier jours du mois précédent
Par exemple aujourd'hui 14/06/2016
Tout les articles <14/06/2016 doivent prendre la date du 31/05/2016
Demain idem, les articles du 14/06/2016 -> 31/05/2016
Ce qui implique, une fonction d'excel qui donne surement à une variable le jour d'aujourd'hui. Et surement un petit test qui regarde si la date des articles est inférieur ou égale à la valeur de cette variable
je vais m'y mettre, si tu trouves avant moi tiens moi au jus :p
Un grand merci
Essaies quelque chose comme ça :
Dim dernierjour As Date
dernierjour = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy")))
If Range("A6") < Date And Range("A6") <> "" Then Range("A6") = dernierjour
Dans ce cas ça teste la cellule A6 donc à adapter avec une petite boucle par exemple.
Dis moi si ça te va
Dim dernierjour As Date
dernierjour = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy")))
If Range("A6") < Date And Range("A6") <> "" Then Range("A6") = dernierjour
Dans ce cas ça teste la cellule A6 donc à adapter avec une petite boucle par exemple.
Dis moi si ça te va
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 15/06/2016 à 08:17
Modifié par Brasiligun le 15/06/2016 à 08:17
C'est exactement ça merci :p Mais c'est de ma faute il y a eu une petite modification (sinon c'est pas marrant)
Alors il faut que pour le mois en cours les dates ne bougent pas, mais toutes les dates inférieurs au mois en cours, par exemple les date de février, mars, avril, mai prennent toutes la valeur du dernier jour du dernier mois précédent, en l’occurrence le 31 mai pour ce mois-çi
Concrètement un exemple, aujourd'hui 15 Juin 2016
28/02/2016 - > 31/05/2016
14/04/2016 -> 31/05/2016
20/05/2016 - > 31/05/2016
31/05/2016 - > 31/05/2016
01/06/2016 - > 01/06/2016
13/06/2016 - > 13/06/2016
15/06/2016 - > 15/06/2016
25/06/2016 - > 25/06/2016
Je m'y colle directement, te te tiens au jus si je m'en sors :p
Pour que ça te parle plus, voila le fichier, il n'y a que la colonne H qui nous intéresse:
https://drive.google.com/file/d/0ByykuPoanvBmTGdWMmMzdHZXS2s/view?usp=sharing
Alors il faut que pour le mois en cours les dates ne bougent pas, mais toutes les dates inférieurs au mois en cours, par exemple les date de février, mars, avril, mai prennent toutes la valeur du dernier jour du dernier mois précédent, en l’occurrence le 31 mai pour ce mois-çi
Concrètement un exemple, aujourd'hui 15 Juin 2016
28/02/2016 - > 31/05/2016
14/04/2016 -> 31/05/2016
20/05/2016 - > 31/05/2016
31/05/2016 - > 31/05/2016
01/06/2016 - > 01/06/2016
13/06/2016 - > 13/06/2016
15/06/2016 - > 15/06/2016
25/06/2016 - > 25/06/2016
Je m'y colle directement, te te tiens au jus si je m'en sors :p
Pour que ça te parle plus, voila le fichier, il n'y a que la colonne H qui nous intéresse:
https://drive.google.com/file/d/0ByykuPoanvBmTGdWMmMzdHZXS2s/view?usp=sharing
Stif
>
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
15 juin 2016 à 13:12
15 juin 2016 à 13:12
Essaies avec ça et dis moi :
Dim dernierjour As Date
If Range("A6") <> "" Then
dernierjour = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy")))
If Month(Range("A6")) < Month(Date) And Year(Range("A6")) = Year(Date) Then Range("A6") = dernierjour
If Year(Range("A6")) < Year(Date) Then Range("A6") = dernierjour
End If
Dim dernierjour As Date
If Range("A6") <> "" Then
dernierjour = DateAdd("d", -1, CDate("1/" & Format(Date, "mm/yyyy")))
If Month(Range("A6")) < Month(Date) And Year(Range("A6")) = Year(Date) Then Range("A6") = dernierjour
If Year(Range("A6")) < Year(Date) Then Range("A6") = dernierjour
End If
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 15/06/2016 à 15:42
Modifié par Brasiligun le 15/06/2016 à 15:42
Parfait! Bien joué :p Plus qu'a le mettre dans une petite boucle pour qu'il parcourt toute la colonne. J'essayerai avec le truc que j'avais bidouillé dans ce genre la, pour parcourir une colonne qui peut-etre amenée a grandir
J'espère pouvoir essayer avant ce soir, je te dis quoi et merci :p
EDIT: j'ai regardé vite fait, mais j'ai pas encore su la lancer sur une colonne complète
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Columns("A:A").Select
Application.CutCopyMode = False
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(1, 4), TrailingMinusNumbers:=True
Selection.NumberFormat = "dd/mm/yy;@"
Range("B2").Select
ActiveCell.FormulaR1C1 = "=YEAR(RC[-1])"
Range("C2").Select
ActiveCell.FormulaR1C1 = "=MONTH(RC[-2])"
Range("D2").Select
ActiveCell.FormulaR1C1 = "=WEEKNUM(RC[-3])"
Range("D3").Select
Range("B2").AutoFill Destination:=Range("B2:B" & DernLigne)
Range("C2").AutoFill Destination:=Range("C2:C" & DernLigne)
Range("D2").AutoFill Destination:=Range("D2:D" & DernLigne)
J'espère pouvoir essayer avant ce soir, je te dis quoi et merci :p
EDIT: j'ai regardé vite fait, mais j'ai pas encore su la lancer sur une colonne complète
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
24 juin 2016 à 13:33
24 juin 2016 à 13:33
Si tu es toujours d'attaque, j'ai un morceau encore plus gros :p
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
25 juin 2016 à 12:16
25 juin 2016 à 12:16
Mais la honnêtement c'est un sacré morceau :p J'ai terminé toute ma partie grâce à toi, mais du coup quelqu'un d'un autre service m'a demandé si je pouvais faire un truc pour lui
J'ai regardé et je suis lui ai carrément dit que c'était hardcore :p Mais il me reste une semaine après je suis liiiiiiiiiiiiiiiiiiiiiiiiiibre (je ne chanterais pas :3)
En fait, tout les jours il a une liste, avec les retards d'envois ou le bon respect de délai de différentes commandes client, et tous les jours, qu'elles soient en retards ou non, il doit envoyé l'état de ces commandes aux clients
Mais, j'ai déjà une macro qui permet d'envoyer a chaques clients en cochant leurs noms, un mail de rappel, (j'ai déjà la feuille avec les noms et les mails correspondants, ainsi que la feuille à cocher pour l'envois, et la macro qui fait ce mail de rappel, le tout fonctionnel)
Il faudrait donc l'adapté à la fiche d'état des commandes, pour scinder cette feuille et envoyer l'état des commandes aux bon clients correspondants et non à tout le monde la même feuille
J'ai conscience que c'est pas super claire :p Et que ça va être plus compliqué, je récupère ce que j'ai déjà fait et qui fonctionne lundi je te l'enverrais, ça sera plus claire
En tout cas un bon weekend à toi et merci de ta bonne volonté
Thomas
J'ai regardé et je suis lui ai carrément dit que c'était hardcore :p Mais il me reste une semaine après je suis liiiiiiiiiiiiiiiiiiiiiiiiiibre (je ne chanterais pas :3)
En fait, tout les jours il a une liste, avec les retards d'envois ou le bon respect de délai de différentes commandes client, et tous les jours, qu'elles soient en retards ou non, il doit envoyé l'état de ces commandes aux clients
Mais, j'ai déjà une macro qui permet d'envoyer a chaques clients en cochant leurs noms, un mail de rappel, (j'ai déjà la feuille avec les noms et les mails correspondants, ainsi que la feuille à cocher pour l'envois, et la macro qui fait ce mail de rappel, le tout fonctionnel)
Il faudrait donc l'adapté à la fiche d'état des commandes, pour scinder cette feuille et envoyer l'état des commandes aux bon clients correspondants et non à tout le monde la même feuille
J'ai conscience que c'est pas super claire :p Et que ça va être plus compliqué, je récupère ce que j'ai déjà fait et qui fonctionne lundi je te l'enverrais, ça sera plus claire
En tout cas un bon weekend à toi et merci de ta bonne volonté
Thomas
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
27 juin 2016 à 08:27
27 juin 2016 à 08:27
Voila les fichiers, il y a un début qui s'appliquait à un autre fichier, mais j'aurais besoin qu'en cochant les cases correspondantes dans le fichier "relance", la macro envoie par mail l'état du fichier OTD aux client des lignes correspondantes, par exemple si on coche client1 et client3, client1 recevra les lignes correspondante au client1 du fichier OTD, et idem client3
les adresses mails et les noms serront dans le fichier _Fournisseurs_
Merci de ton aide, je t'avoue que je me casse vraiment les dents dessus :/
J'aurais pas du devoir le faire mais comme j'ai fini ma partie ils m'ont demandé de regarder :p
Un grand merci l'ami!
les adresses mails et les noms serront dans le fichier _Fournisseurs_
Merci de ton aide, je t'avoue que je me casse vraiment les dents dessus :/
J'aurais pas du devoir le faire mais comme j'ai fini ma partie ils m'ont demandé de regarder :p
Un grand merci l'ami!
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
27 juin 2016 à 11:11
27 juin 2016 à 11:11
Edit: ça ira vachement mieux avec ça :p
https://drive.google.com/folderview?id=0ByykuPoanvBmQ05yX3NFVkYyMUE&usp=sharing
https://drive.google.com/folderview?id=0ByykuPoanvBmQ05yX3NFVkYyMUE&usp=sharing
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
28 juin 2016 à 08:05
28 juin 2016 à 08:05
Ça marche merci, mais c'est un sacré morceau la :p
Bonjour,
Voici qui devrait te donner une bonne base de départ pour ta demande.
http://www.cjoint.com/c/FFCmfvQdfgG
N'oublies pas de changer les chemins des fichiers à ouvrir dans les macro.
Pour le corp du mail qui s'envoie automatiquement je te laisse marquer ce que tu veux... là "Veuillez trouver ci-joint le fichier des lignes de commandes en attente d'Accusé Réception. (6 lignes) " avec le nombre de lignes qui se calcule en fonction des cellules vides colonne T du fichier OTD (pour le client en question évidemment)
Tiens mi au courant si ça te va
Ps : moi aussi c'est Thomas ;)
Voici qui devrait te donner une bonne base de départ pour ta demande.
http://www.cjoint.com/c/FFCmfvQdfgG
N'oublies pas de changer les chemins des fichiers à ouvrir dans les macro.
Pour le corp du mail qui s'envoie automatiquement je te laisse marquer ce que tu veux... là "Veuillez trouver ci-joint le fichier des lignes de commandes en attente d'Accusé Réception. (6 lignes) " avec le nombre de lignes qui se calcule en fonction des cellules vides colonne T du fichier OTD (pour le client en question évidemment)
Tiens mi au courant si ça te va
Ps : moi aussi c'est Thomas ;)
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
Modifié par Brasiligun le 28/06/2016 à 15:03
Modifié par Brasiligun le 28/06/2016 à 15:03
Une invasion de Thomas! Des Thomas, des Thomas paaaaaartout!
Non plus sérieusement un énorme merci à toi, la franchement, pour faire un peu de poésie, ça me trou le cul :p C'est exactement le rendu que j'avais besoin, j'ai galéré dessus pourtant surtout sur la partie découper le fichier OTD
Franchement, merci! J'ai une question cependant, peut-on travailler sur uns des fichiers OTD découpé avant qu'il soit envoyé? Lui appliqué un formule Excel toute bête? Ou le fichier est "scellé" pour l'envoie?
Et a quoi sert le testclient = 2?
Par exemple pour chaque OTD par client, lui appliqué un moyenne par exemple?
En tout cas, cher homonyme: Respect et Robustesse!
Non plus sérieusement un énorme merci à toi, la franchement, pour faire un peu de poésie, ça me trou le cul :p C'est exactement le rendu que j'avais besoin, j'ai galéré dessus pourtant surtout sur la partie découper le fichier OTD
Franchement, merci! J'ai une question cependant, peut-on travailler sur uns des fichiers OTD découpé avant qu'il soit envoyé? Lui appliqué un formule Excel toute bête? Ou le fichier est "scellé" pour l'envoie?
Et a quoi sert le testclient = 2?
Par exemple pour chaque OTD par client, lui appliqué un moyenne par exemple?
En tout cas, cher homonyme: Respect et Robustesse!
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
30 juin 2016 à 11:24
30 juin 2016 à 11:24
Ah non il reste un problème, mais c'est peut-etre moi qui est mal intégré ton code regarde:
Il reste ce morceau "Workbooks.Open ("K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD\OTD.xlsx")" qui fait que le fichier ne lit pas en fait l'OTD qu'on lui a donné, mais toujours celui par défaut
Public classeur2 As String
Public classeur3 As String
Public mailclient As String
Public lignesenretard As Integer
Public OTDcible As String
Public nomODTcible As String
Option Explicit
Sub Envoi_OTD()
Dim a As Variant, b As Variant
Dim classeur1 As String
Dim I As Variant, J As Variant
Dim clienta As String, clientb As String
Dim testclient As Integer
testclient = 2
MsgBox ("Séléctionner le fichier OTD:")
ChDrive "K:" ' Choix du lecteur
ChDir "K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD" 'Choix du répertoire
a = Application.GetOpenFilename("fichier excel (*.xlsx), *.xlsx", _
, "Quel sera le PJ à renseigner ?", , True)
Select Case TypeName(a)
Case Is = "Boolean"
Exit Sub
Case Else
For b = LBound(a) To UBound(a)
Workbooks.Open a(b)
Next
End Select
nomODTcible = ActiveWorkbook.Name
OTDcible = ActiveWorkbook.FullName
Windows(nomODTcible).Close False
classeur1 = ActiveWorkbook.Name
Application.ScreenUpdating = False
For I = 2 To Range("B" & Rows.Count).End(xlUp).Row
If Cells(I, 1) <> "" Then
'clienta = Cells(I, 2)
clienta = StrConv(Cells(I, 2).Value, vbProperCase)
'Cells(I, 2) = StrConv(Cells(I, 2).Value, vbProperCase)
'clienta = Cells(I, 2).Value
Workbooks.Open ("K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD\OTD.xlsx")
classeur2 = ActiveWorkbook.Name
Windows(classeur2).Activate
ChDir "K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD"
ActiveWorkbook.SaveAs Filename:="OTD_" & clienta & classeur2
classeur2 = ActiveWorkbook.Name
Windows(classeur2).Activate
Do While Cells(testclient, 2) <> ""
If Cells(testclient, 2) = "" Then Exit Do
If clienta <> StrConv(Cells(testclient, 2), vbProperCase) Then Cells(testclient, 2).EntireRow.Delete
If clienta = StrConv(Cells(testclient, 2), vbProperCase) Then testclient = testclient + 1
Loop
'lignesenretard
For J = 2 To Range("B" & Rows.Count).End(xlUp).Row
If Cells(J, 20) = "" And Cells(J, 2) <> "" Then lignesenretard = lignesenretard + 1
Next J
Columns("T:T").Select
Selection.TextToColumns Destination:=Range("T1"), DataType:=xlFixedWidth, _
FieldInfo:=Array(0, 1), TrailingMinusNumbers:=True
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row
Rows("1:1").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
'Nb de lignes
Range("M1").Select
ActiveCell.FormulaR1C1 = "Nb de lignes:"
Range("N1").Select
ActiveCell.FormulaR1C1 = (DernLigne - 1)
'Nb cellule non vides
Range("P1").Select
ActiveCell.FormulaR1C1 = "Lignes non vides:"
Range("Q1").Select
ActiveCell.FormulaR1C1 = "=COUNTA(R[2]C[3]:R[199]C[3])"
Range("S1").Select
ActiveCell.FormulaR1C1 = "OTD:"
'Cellule non vides/Nb de ligne
Range("T1").Select
ActiveCell.FormulaR1C1 = "=RC[-3]/RC[-6]"
Range("A1").Select
Windows(classeur2).Close True
Workbooks.Open ("K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD\Fournisseurs\_Fournisseurs_.xls")
classeur3 = ActiveWorkbook.Name
Windows(classeur3).Activate
For J = 2 To Range("A" & Rows.Count).End(xlUp).Row
If clienta = StrConv(Cells(J, 1), vbProperCase) Then
If Cells(J, 2) = "" Then
MsgBox "ATTENTION aucun Email Fournisseur n'est renseigné pour le client" & clienta
ChDir "K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD"
Kill classeur2
Exit Sub
Else:
mailclient = Cells(J, 2).Value
Call mail
ChDir "K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD"
Kill classeur2
End If
End If
Next J
Windows(classeur3).Close False
End If
lignesenretard = 0
testclient = 2
Windows(classeur1).Activate
Next I
MsgBox ("Mail(s) envoyé(s)")
Application.ScreenUpdating = True
End Sub
Sub mail()
Dim OutApp As Object
Dim OutMail As Object
Dim strbody As String
Dim olFormatHTML As String
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = mailclient
.Subject = "OTD"
.Body = "Veuillez trouver ci-joint le fichier ODT" & vbCrLf & vbCrLf & "Cordialement"
.Attachments.Add "K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD\" & classeur2
.Send
End With
Set OutApp = Nothing
End Sub
Il reste ce morceau "Workbooks.Open ("K:\Systeme_D-info\PIC\archive\Macro TJ\Mail OTD\OTD.xlsx")" qui fait que le fichier ne lit pas en fait l'OTD qu'on lui a donné, mais toujours celui par défaut
Brasiligun
Messages postés
122
Date d'inscription
mardi 29 décembre 2009
Statut
Membre
Dernière intervention
4 mars 2019
1
>
Stif
30 juin 2016 à 15:39
30 juin 2016 à 15:39
Nickel nickel! Un grand merci et bonne fin d'après-midi
Thomas
Thomas