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
Bonjour,






Je souhaiterais de l'aide pour modifier une macro dans Excel 2010.

Ce fichier sert à obtenir une référence de document (chrono).

J'ai deux feuilles "Formulaire" et "Chrono". Lorsque je veux faire un document, je remplis le formulaire ou il y a un certain nombre de choix par listes déroulantes.

Lorsque je valide (par un bouton), la dernière ligne de libre dans la feuille "chrono" est renseignée avec les infos.

Le résultat est de la forme D-IN-TT-PT-50-EN-A

Soit dans la feuille "chrono"
A B C D E F G H I J K L M
D - INT - TT - PT - 50 - EN - A

La lettre D et les traits d'unions sont écrit en « dur » dans la feuille
En gras, le résultat des choix du formulaire.
Le chiffre (ici 50) s'incrémente automatiquement.
Le champ EN (anglais) est la langue du document et le champ suivant est la version, ici A


Ci dessous le code actuel, je ne suis pas expert il doit être certainement perfectible mais cela fonctionne.

Private Sub CommandButton1_Click()

Dim increm As Integer
Dim i As Integer
Sheets("chrono").Visible = xlSheetVeryHidden
i = 4
While i < 5000
If Sheets("chrono").Range("c" & i).Value <> "" Then
i = i + 1
Else
increm = Sheets("chrono").Range("i" & i - 1)

'Type
Sheets("chrono").Range("c" & i).Value = Sheets("Formulaire").Range("D7").Value
'Famille
Sheets("chrono").Range("e" & i).Value = Sheets("Formulaire").Range("D9").Value
Sheets("chrono").Range("g" & i).Value = Sheets("Formulaire").Range("D11").Value
'Langue
Sheets("chrono").Range("k" & i).Value = Sheets("Formulaire").Range("D13").Value
'Version
Sheets("chrono").Range("m" & i).Value = Sheets("Formulaire").Range("D17").Value
'Numéro
Sheets("Formulaire").Range("D15").Value = increm + 1
Sheets("chrono").Range("i" & i).Value = Sheets("Formulaire").Range("D15").Value
'Titre
Sheets("chrono").Range("Q" & i).Value = Sheets("Formulaire").Range("C20").Value
'Date
Sheets("chrono").Range("R" & i).Value = Sheets("Formulaire").Range("c22").Value

i = 5000
End If
Wend

End Sub

Ce que je voudrais pouvoir faire :

1-Aujourd'hui si je crée ce même document dans une autre langue comme FR (français) le résultat dans "chrono" sera
D-IN-TT-PT-51-FR-A, on incrémente inutilement le chiffre je voudrais avoir à la place D-IN-TT-PT-50-FR-A

2-Par ailleurs la version du document est rentrée manuellement dans le formulaire. Je réponds à la question "Existe-t 'il une version précédente du document Oui /Non" mais je ne gère pas la réponse, je rentre une version à la main.
Si la réponse est oui il existe une version, je voudrais que la bonne version soit alors automatiquement rentrée par exemple D-IN-TT-PT-50-FR-B

Merci
Cordialement
A voir également:

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
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 :
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

0
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
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
0
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
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 :
increm = Application.WorksheetFunction.CountIf(.Range("K1:K" & drLig), Sheets("Formulaire").Range("D13").Value) + 1
place une msgbox, comme ceci :
increm = Application.WorksheetFunction.CountIf(.Range("K1:K" & drLig), Sheets("Formulaire").Range("D13").Value) + 1
MsgBox increm
Et 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
0
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
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.
0
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
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.
0
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
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?
0
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
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?
0
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
en fait, je crois bien que je nage...........
Dis moi clairement ce que tu veux.
0
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
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....
0
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
A quoi servent les données "titre" et "auteur"?
0

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
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.
0
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
tu peux me redécrire précisément tes 2 souhaits?
0
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
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....
0
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
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.
0
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
je vais retenter... C'est pas aisé.
0
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
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?
0
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
Si on répond "Non" a la question "Est-ce une mise à jour", on peut saisir un A
ça aide?
0
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
Ben, je penses qu'il faut que cela fonctionne dans tous les cas, y compris lorsque l'on saisi "oui"...
0
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
Bonjour,
Pas de problème, bon WE et à Lundi
0
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
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
0
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
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
0
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
Bonjour,
Je suppose que ma demande n'est pas réalisable ou du moins sans y consacrer trop de temps.
0