Aide sur une modification de macro
Fermé
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
-
17 mars 2013 à 21:30
Clientdunet Messages postés 42 Date d'inscription jeudi 8 mars 2012 Statut Membre Dernière intervention 8 juillet 2023 - 6 avril 2013 à 13:08
Clientdunet Messages postés 42 Date d'inscription jeudi 8 mars 2012 Statut Membre Dernière intervention 8 juillet 2023 - 6 avril 2013 à 13:08
A voir également:
- Aide sur une modification de macro
- Suivi de modification word - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Logiciel gratuit modification pdf - Guide
- Macro word - Guide
- Modification dns - Guide
8 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
18 mars 2013 à 10:02
18 mars 2013 à 10:02
Bonjour,
Macro modifiée :
1- plus de boucle, on trouve la dernière ligne saisie colonn K et on travaille à partir de son numéro,
2- question 1 résolue en partant du principe que increm =NB.SI(Colonne K, Langue)
Pour la question 2, comment est décidé l'attribution de "A", "B", "C"...
Voici le code :
Macro modifiée :
1- plus de boucle, on trouve la dernière ligne saisie colonn K et on travaille à partir de son numéro,
2- question 1 résolue en partant du principe que increm =NB.SI(Colonne K, Langue)
Pour la question 2, comment est décidé l'attribution de "A", "B", "C"...
Voici le code :
Private Sub CommandButton1_Click() Dim increm As Long, lig As Long, drLig As Long With Sheets("chrono") 'te permettra de vérifier .Visible = True 'drLig = N° dernière ligne saisie en colonne C drLig = .Range("C" & Rows.Count).End(xlUp).Row 'lig = ligne suivante drLig (la ligne ou on va saisir) lig = drLig + 1 'increm = NB.SI(ColonneK, Langue) + 1 increm = Application.WorksheetFunction.CountIf(.Range("K1:K" & drLig), Sheets("Formulaire").Range("D13").Value) + 1 'Type .Range("C" & lig).Value = Sheets("Formulaire").Range("D7").Value 'Famille .Range("E" & lig).Value = Sheets("Formulaire").Range("D9").Value .Range("G" & lig).Value = Sheets("Formulaire").Range("D11").Value 'Langue .Range("K" & lig).Value = Sheets("Formulaire").Range("D13").Value 'Version .Range("M" & lig).Value = Sheets("Formulaire").Range("D17").Value 'Numéro Sheets("Formulaire").Range("D15").Value = increm + 1 Range("I" & lig).Value = Sheets("Formulaire").Range("D15").Value 'Titre .Range("Q" & lig).Value = Sheets("Formulaire").Range("C20").Value 'Date .Range("R" & lig).Value = Sheets("Formulaire").Range("c22").Value 'pour rendre invible la feuille "chrono", enlever l'apostrophe en début de ligne suivante : '.Visible = xlSheetVeryHidden End With End Sub
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
18 mars 2013 à 15:07
18 mars 2013 à 15:07
Merci Frank .
J'ai remplacé le code et petit soucis:
Si je change la langue ou si je crée un nouveau document, le N° de version (feuille "chrono" colonne "I" ) n'est plus renseigné (ligne en cours colonne "I" vide).
De même la valeur renvoyée en D15 de la feuille formulaire est aléatoire
Pour ta question sur l'attribution "A", "B", "C"... je ne suis pas sûr d'avoir bien compris.
"A", "B", "C",...... représentent simplement les colonnes dans la feuille "chrono".
Pour la colonne "A", la valeur est toujours D, je l'ai donc rentrée à la main dans les 500 premières lignes de la feuille chrono. (Pas très propre......)
Pareil pour les colonnes "B", "D", "F", "H", "J" et "L" ou la valeur constante est un trait d'union "-"
Les valeurs dans la ligne en cours des colonnes "C", "E", "G", "I", "K" et "M"
sont remplies par la réponse dans la feuille "formulaire".
Ligne en cours , colonne "C" de la feuille chrono = valeur de la cellule D7 de la feuille "Formulaire".
.Range("C" & lig).Value = Sheets("Formulaire").Range("D7").Value
Merci de ton aide
Cordialement
JL
J'ai remplacé le code et petit soucis:
Si je change la langue ou si je crée un nouveau document, le N° de version (feuille "chrono" colonne "I" ) n'est plus renseigné (ligne en cours colonne "I" vide).
De même la valeur renvoyée en D15 de la feuille formulaire est aléatoire
Pour ta question sur l'attribution "A", "B", "C"... je ne suis pas sûr d'avoir bien compris.
"A", "B", "C",...... représentent simplement les colonnes dans la feuille "chrono".
Pour la colonne "A", la valeur est toujours D, je l'ai donc rentrée à la main dans les 500 premières lignes de la feuille chrono. (Pas très propre......)
Pareil pour les colonnes "B", "D", "F", "H", "J" et "L" ou la valeur constante est un trait d'union "-"
Les valeurs dans la ligne en cours des colonnes "C", "E", "G", "I", "K" et "M"
sont remplies par la réponse dans la feuille "formulaire".
Ligne en cours , colonne "C" de la feuille chrono = valeur de la cellule D7 de la feuille "Formulaire".
.Range("C" & lig).Value = Sheets("Formulaire").Range("D7").Value
Merci de ton aide
Cordialement
JL
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
18 mars 2013 à 15:49
18 mars 2013 à 15:49
1- increm est bien la variable qui te donne automatiquement le n° du chrono? Si oui, tu dis vouloir incrémenter en fonction de la langue, je fais donc appel à la fonction Excel :
=NB.SI(colonne K, "FR")
Testons pour voir le résultat :
après la ligne :
2- ma question se rapportait au A, B en fin de chrono :
D-IN-TT-PT-50-FR-B, D-IN-TT-PT-50-FR-A...
Comment le programme sait-il qu'il doit mettre A, B, C ... Z!
3- supprime le + 1 (on l'a déjà mis avant...) dans la ligne :
pour obtenir :
Sheets("Formulaire").Range("D15").Value = increm
=NB.SI(colonne K, "FR")
Testons pour voir le résultat :
après la ligne :
increm = Application.WorksheetFunction.CountIf(.Range("K1:K" & drLig), Sheets("Formulaire").Range("D13").Value) + 1place une msgbox, comme ceci :
increm = Application.WorksheetFunction.CountIf(.Range("K1:K" & drLig), Sheets("Formulaire").Range("D13").Value) + 1 MsgBox incremEt dis moi ce que tu observes grâce à ces messages...
2- ma question se rapportait au A, B en fin de chrono :
D-IN-TT-PT-50-FR-B, D-IN-TT-PT-50-FR-A...
Comment le programme sait-il qu'il doit mettre A, B, C ... Z!
3- supprime le + 1 (on l'a déjà mis avant...) dans la ligne :
Sheets("Formulaire").Range("D15").Value = increm + 1
pour obtenir :
Sheets("Formulaire").Range("D15").Value = increm
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
18 mars 2013 à 16:24
18 mars 2013 à 16:24
pour pouvoir t'aider au mieux, peux tu me passer ton fichier, via https://www.cjoint.com/ sans données confidentielles, sur cjoint, tu créées un lien vers ton fichier, lien que tu viens coller dans une réponse ici même.
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
19 mars 2013 à 11:15
19 mars 2013 à 11:15
Bonjour Frank et merci de ton temps.
Lien vers le fichier
https://www.cjoint.com/?3Ctlc1Pr6OQ
1- La msgbox répond un chiffre mais pas dans l'ordre chronologique espéré.
Dans la colonne Remarques de la feuille "chrono", j'ai mis les deux réponses obtenues
2- J'aurais voulu que le programme cherche dans la feuille chrono et si tous les champs qui composent la référence du document sont identiques, incrémente la version A vers B.
Lien vers le fichier
https://www.cjoint.com/?3Ctlc1Pr6OQ
1- La msgbox répond un chiffre mais pas dans l'ordre chronologique espéré.
Dans la colonne Remarques de la feuille "chrono", j'ai mis les deux réponses obtenues
2- J'aurais voulu que le programme cherche dans la feuille chrono et si tous les champs qui composent la référence du document sont identiques, incrémente la version A vers B.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 13:57
19 mars 2013 à 13:57
Salut,
Je viens de comprendre ce que tu veux...
1- tu veux que si (type, famille, version, titre, date) sont identiques pour deux fichiers, mais que la langue diffère, alors on n'incrémente pas le numéro,
2- si tous les critères sont identiques : type, famille, version, titre, date ET langue alors :
on n'incrémente pas le numéro (on garde celui de l'ancienne version) et on incrément de A en B ou de B en C etc....
C'est Ok pour toi?
Je viens de comprendre ce que tu veux...
1- tu veux que si (type, famille, version, titre, date) sont identiques pour deux fichiers, mais que la langue diffère, alors on n'incrémente pas le numéro,
2- si tous les critères sont identiques : type, famille, version, titre, date ET langue alors :
on n'incrémente pas le numéro (on garde celui de l'ancienne version) et on incrément de A en B ou de B en C etc....
C'est Ok pour toi?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 14:15
19 mars 2013 à 14:15
Si, en mise à jour, tu mets "yes", ça veux dire que l'on passe à "B", "C" ou autre... Ok?
Mais est ce que tous les autres critères, y compris le numéro, seront identiques?
Mais est ce que tous les autres critères, y compris le numéro, seront identiques?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 14:28
19 mars 2013 à 14:28
en fait, je crois bien que je nage...........
Dis moi clairement ce que tu veux.
Dis moi clairement ce que tu veux.
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
19 mars 2013 à 14:29
19 mars 2013 à 14:29
Oui c'est cela pour les 2 points.
Yes ou No en mise à jour .
Oui l'idée était de dire au programme qu'il existe déjà une document identique et que celle-ci est une mise à jour donc la version "B", "C" ou autre....
Yes ou No en mise à jour .
Oui l'idée était de dire au programme qu'il existe déjà une document identique et que celle-ci est une mise à jour donc la version "B", "C" ou autre....
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 14:31
19 mars 2013 à 14:31
A quoi servent les données "titre" et "auteur"?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
19 mars 2013 à 14:39
19 mars 2013 à 14:39
Titre = titre du document crée
Auteur= celui qui a rédigé le document
La feuille chrono répertorie tous les documents crées.
Il y a donc le Titre du document , sa date de création et la personne qui l'a rédigé sur la même ligne qui la référence.
Auteur= celui qui a rédigé le document
La feuille chrono répertorie tous les documents crées.
Il y a donc le Titre du document , sa date de création et la personne qui l'a rédigé sur la même ligne qui la référence.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 14:48
19 mars 2013 à 14:48
tu peux me redécrire précisément tes 2 souhaits?
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
19 mars 2013 à 15:00
19 mars 2013 à 15:00
Aïe, je ne sais pas si je peux mieux l'exprimer que tu ne l'as fait , plus haut et que je recopie ci-dessous
1- tu veux que si (type, famille, version, titre, date) sont identiques pour deux fichiers, mais que la langue diffère, alors on n'incrémente pas le numéro,
2- si tous les critères sont identiques : type, famille, version, titre, date ET langue alors :
on n'incrémente pas le numéro (on garde celui de l'ancienne version) et on incrément de A en B ou de B en C etc....
1- tu veux que si (type, famille, version, titre, date) sont identiques pour deux fichiers, mais que la langue diffère, alors on n'incrémente pas le numéro,
2- si tous les critères sont identiques : type, famille, version, titre, date ET langue alors :
on n'incrémente pas le numéro (on garde celui de l'ancienne version) et on incrément de A en B ou de B en C etc....
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
19 mars 2013 à 15:04
19 mars 2013 à 15:04
Pour la mise à jour, la réponse yes/no n'est peut être pas nécessaire. Si le programme fait une recherche systématique de ce qui existe dans la feuille chrono
Je n'avais pas vu ton commentaire ou tu nage.
Si c'est toujours le cas, je vais prendre le temps de ré écrire ce que je voudrais.
Je n'avais pas vu ton commentaire ou tu nage.
Si c'est toujours le cas, je vais prendre le temps de ré écrire ce que je voudrais.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 15:23
19 mars 2013 à 15:23
je vais retenter... C'est pas aisé.
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 15:39
19 mars 2013 à 15:39
pour le 1- le problème est qu'on ne peux pas comparer type, famille, version, titre, date dans le sens ou version n'est pas saisi dans la feuille formulaire..... C'est un A ou un B ou un C etc..... Tu vois ce que je veux dire?
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
19 mars 2013 à 16:06
19 mars 2013 à 16:06
Si on répond "Non" a la question "Est-ce une mise à jour", on peut saisir un A
ça aide?
ça aide?
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 754
19 mars 2013 à 16:08
19 mars 2013 à 16:08
Ben, je penses qu'il faut que cela fonctionne dans tous les cas, y compris lorsque l'on saisi "oui"...
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
23 mars 2013 à 16:00
23 mars 2013 à 16:00
Bonjour,
Pas de problème, bon WE et à Lundi
Pas de problème, bon WE et à Lundi
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
23 mars 2013 à 22:24
23 mars 2013 à 22:24
J'ai remplacé la ligne correspondant à la gestion du Numéro:
'Numéro
Sheets("Formulaire").Range("D15").Value = increm + 1
Range("I" & lig).Value = Sheets("Formulaire").Range("D15").Value
Par
'Numéro
Sheets("Formulaire").Range("D15").Value = increm + 1
Sheets("crono").(Range("I" & lig).Value = Sheets("Formulaire").Range("D15").Value
De coup, le numéro est correctement renseigné. La MSGbox indique le numéro° qui s'incrémente.
Pour tout nouveau document, donc tout va bien.
Par contre, si je change de langue au lieu de maintenir le même numéro par exemple
D-IN-TT-PT-50-FR-A, en français et D-IN-TT-PT-50-EN-A en anglais, le numéro que le programme va afficher sera celui du dernier document de langue EN +1
Suis-je clair ?
Voir exemple dans la feuille chrono du document joint.
https://www.cjoint.com/?3Cxwu7oAdl3
'Numéro
Sheets("Formulaire").Range("D15").Value = increm + 1
Range("I" & lig).Value = Sheets("Formulaire").Range("D15").Value
Par
'Numéro
Sheets("Formulaire").Range("D15").Value = increm + 1
Sheets("crono").(Range("I" & lig).Value = Sheets("Formulaire").Range("D15").Value
De coup, le numéro est correctement renseigné. La MSGbox indique le numéro° qui s'incrémente.
Pour tout nouveau document, donc tout va bien.
Par contre, si je change de langue au lieu de maintenir le même numéro par exemple
D-IN-TT-PT-50-FR-A, en français et D-IN-TT-PT-50-EN-A en anglais, le numéro que le programme va afficher sera celui du dernier document de langue EN +1
Suis-je clair ?
Voir exemple dans la feuille chrono du document joint.
https://www.cjoint.com/?3Cxwu7oAdl3
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
24 mars 2013 à 17:53
24 mars 2013 à 17:53
J'ai un peu réfléchi à formaliser par écrit des séquences. Je ne suis pas arrivé à gérer à la fois les versions et la langue.
Si on arrive à programmer ce qui suit, j'aurais la gestion des versions et tant pis pour les langues. C'est à dire que deux documents identiques de langues différentes auront un N° différent.
Dans la feuille chrono, j'ai des documents existants jusqu'à la ligne 23 (pour l'exemple),
Je veux en créer un nouveau document qui s'inscrira ligne 24
Je remplis le formulaire et je regarde ce qui se passe sur la feuille chrono
On recherche la valeur de C24, (celle que l'on vient de rentre), plus haut dans la colonne ( je pense qu'il faut regarder de bas en haut --> C23 puis C22,etc...jusqu'à la première ligne.)
Si elle n'existe pas alors c'est un nouveau document et on incrémente I24 (=I23+1)
Si elle existe, par exemple en C20 ,alors je compare :
Si E24 = E20 même famille
ET G24 = G20 même type
ET K24 = K20 même langue
ET T24 = T20 même titre
Alors c'est le même document donc :
il ne faut pas incrémenter le numéro I24 = I20
il faut incrémenter la version soit M24 = M20+1 ( A --> B ou G-->H,...ou autre lettres.,)
Si l'une des 4 égalités n'est pas vraie alors il faut relancer la recherche de la valeur de C24 plus haut que la ligne 20 que l'on vient de comparer,
On refait une comparaison avec la nouvelle ligne trouvée, exemple C15
Si E24 = E15
ET G24 = G15
ET K24 = K15
ET T24 = T15
Alors c'est le même document et il ne faut incrémenter que la version donc I24 = I15 et M24 = M15+1 ( A --> B ou G-->H,....)
Et ainsi de suite jusqu'en haut.
Si les 4 égalités ne se produisent pas alors c'est un nouveau document et on incrémente I24 = I23 +1
Si on arrive à programmer ce qui suit, j'aurais la gestion des versions et tant pis pour les langues. C'est à dire que deux documents identiques de langues différentes auront un N° différent.
Dans la feuille chrono, j'ai des documents existants jusqu'à la ligne 23 (pour l'exemple),
Je veux en créer un nouveau document qui s'inscrira ligne 24
Je remplis le formulaire et je regarde ce qui se passe sur la feuille chrono
On recherche la valeur de C24, (celle que l'on vient de rentre), plus haut dans la colonne ( je pense qu'il faut regarder de bas en haut --> C23 puis C22,etc...jusqu'à la première ligne.)
Si elle n'existe pas alors c'est un nouveau document et on incrémente I24 (=I23+1)
Si elle existe, par exemple en C20 ,alors je compare :
Si E24 = E20 même famille
ET G24 = G20 même type
ET K24 = K20 même langue
ET T24 = T20 même titre
Alors c'est le même document donc :
il ne faut pas incrémenter le numéro I24 = I20
il faut incrémenter la version soit M24 = M20+1 ( A --> B ou G-->H,...ou autre lettres.,)
Si l'une des 4 égalités n'est pas vraie alors il faut relancer la recherche de la valeur de C24 plus haut que la ligne 20 que l'on vient de comparer,
On refait une comparaison avec la nouvelle ligne trouvée, exemple C15
Si E24 = E15
ET G24 = G15
ET K24 = K15
ET T24 = T15
Alors c'est le même document et il ne faut incrémenter que la version donc I24 = I15 et M24 = M15+1 ( A --> B ou G-->H,....)
Et ainsi de suite jusqu'en haut.
Si les 4 égalités ne se produisent pas alors c'est un nouveau document et on incrémente I24 = I23 +1
Clientdunet
Messages postés
42
Date d'inscription
jeudi 8 mars 2012
Statut
Membre
Dernière intervention
8 juillet 2023
3
6 avril 2013 à 13:08
6 avril 2013 à 13:08
Bonjour,
Je suppose que ma demande n'est pas réalisable ou du moins sans y consacrer trop de temps.
Je suppose que ma demande n'est pas réalisable ou du moins sans y consacrer trop de temps.