VBA problème macro parcours sequentiel
Foch
-
Foch -
Foch -
Bonjour, (qu'elle est bien cette formule de politesse )
je suis en iut informatique donc j'ai l'habitude de manier le C++, le C, je fait des algotithme etc et
comme job d'été j'ai intégré une entreprise dans un secteur de programmation.
Et bien sur, on me fait programmer du visual basic, langage que je ne connais pas du tout
j'ai déjà fait le programme en C++ mais cela ne m'avance pas plus que ça.
J'ai donc 2 onglet excel, l'un est une synthèse d'énormément de case, l'autre un résumé de
cet immense tableau.
Le but de la macro que je doit crée est de vérifié si la personne qui tape le résumé ne se trompe pas en recopiant.
j'ai un squelette d'algorithme en vb mais il ne fonctionne que ... très partiellement . A comprendre qu'il me renvoi des erreur mais pas les bonnes enfin je ne comprends pas très bien. Si un expert en vb pouvais bien m'aider ... je vous laisse ce que j'ai déjà fait si vous pouviais le corriger ( ma boucle while par rapport au indice i et j devrait normalement être une boucle for mais j'ai du mal a l'utiliser.)
Sub Macro_finale()
'Initialisation des variables
login = RecupLogon
lig_min_NR = Range("Debut_NR").Row + 1
lig_max_NR = Range("Fin_NR").Row - 1
lig_min_R = Range("Debut_R").Row + 1
lig_max_R = Range("Fin_R").Row - 1
Lig_min_P = Range("Debut_P").Row + 1
Lig_max_P = Fligmax(Lig_min_P, Range("nom_mod").Column)
i = lig_min_NR
j = Lig_min_P
'Condition de la première comparaison
While i <> lig_max_NR Or j <> Lig_max_P
If Cells(j, Range("nom_mod").Column) = sheets("Synthèse").Cells(i, sheets("Synthèse").Range("mod_GPS").Column) Then
With sheets("synthèse")
'Vérification des informations tapées par L'assistante
While Cells(j, Range("NR_cout").Column) = .Cells(i, .Range("S_Cout_NR").Column) And _
Cells(j, Range("NR_Deb_T0").Column) = .Cells(i, .Range("S_Deb_T0").Column) And _
Cells(j, Range("NR_Fin_T0").Column) = .Cells(i, .Range("S_Fin_T0").Column) And _
Cells(j, Range("Nom_LH").Column) = .Cells(i, .Range("S_Nom_LH").Column) And _
Cells(j, Range("Nom_LP").Column) = .Cells(i, .Range("S_Nom_LP").Column)
i = i + 1
j = j + 1
Wend
End With
Else
'Séparation des traitements
'Le premier login entrainant une remplacement des données
If login = "leloginduchef" Then
Copie "Propriétés_modéles_gps", "j", "Synthèse", "i"
Else
'Le second entrainant un message d'erreur indiquant la ligne fausse
lig_er = sheets("Propriétés_modéles_gps").Cells(i, sheets("Propriétés_modéles_gps").Range("nom_mod").Column)
Dim Msg, Style, Title, Rep
Msg = "Veuillez modifier cette information :" & lig_er
Style = vbOKOnly
Title = "Vérification"
Rep = MsgBox(Msg, Style, Title)
End If
End If
i = i + 1
j = j + 1
Wend
End Sub
Le but est que si le programme recconait le login de mon chef , les données sont remplacé immediattement mais si c'est le login de son assistante un message d'erreur lui dise quelle information est fausse, pour qu'elle se rende compte de ses erreurs (idée du chef).
les initialisations du début sont les mise en place de ligne min et max pour le parcours séquentiel.
Merci d'avance et désolé d'avoir écris un post aussi long .
A la prochaine pour vos réponses
je suis en iut informatique donc j'ai l'habitude de manier le C++, le C, je fait des algotithme etc et
comme job d'été j'ai intégré une entreprise dans un secteur de programmation.
Et bien sur, on me fait programmer du visual basic, langage que je ne connais pas du tout
j'ai déjà fait le programme en C++ mais cela ne m'avance pas plus que ça.
J'ai donc 2 onglet excel, l'un est une synthèse d'énormément de case, l'autre un résumé de
cet immense tableau.
Le but de la macro que je doit crée est de vérifié si la personne qui tape le résumé ne se trompe pas en recopiant.
j'ai un squelette d'algorithme en vb mais il ne fonctionne que ... très partiellement . A comprendre qu'il me renvoi des erreur mais pas les bonnes enfin je ne comprends pas très bien. Si un expert en vb pouvais bien m'aider ... je vous laisse ce que j'ai déjà fait si vous pouviais le corriger ( ma boucle while par rapport au indice i et j devrait normalement être une boucle for mais j'ai du mal a l'utiliser.)
Sub Macro_finale()
'Initialisation des variables
login = RecupLogon
lig_min_NR = Range("Debut_NR").Row + 1
lig_max_NR = Range("Fin_NR").Row - 1
lig_min_R = Range("Debut_R").Row + 1
lig_max_R = Range("Fin_R").Row - 1
Lig_min_P = Range("Debut_P").Row + 1
Lig_max_P = Fligmax(Lig_min_P, Range("nom_mod").Column)
i = lig_min_NR
j = Lig_min_P
'Condition de la première comparaison
While i <> lig_max_NR Or j <> Lig_max_P
If Cells(j, Range("nom_mod").Column) = sheets("Synthèse").Cells(i, sheets("Synthèse").Range("mod_GPS").Column) Then
With sheets("synthèse")
'Vérification des informations tapées par L'assistante
While Cells(j, Range("NR_cout").Column) = .Cells(i, .Range("S_Cout_NR").Column) And _
Cells(j, Range("NR_Deb_T0").Column) = .Cells(i, .Range("S_Deb_T0").Column) And _
Cells(j, Range("NR_Fin_T0").Column) = .Cells(i, .Range("S_Fin_T0").Column) And _
Cells(j, Range("Nom_LH").Column) = .Cells(i, .Range("S_Nom_LH").Column) And _
Cells(j, Range("Nom_LP").Column) = .Cells(i, .Range("S_Nom_LP").Column)
i = i + 1
j = j + 1
Wend
End With
Else
'Séparation des traitements
'Le premier login entrainant une remplacement des données
If login = "leloginduchef" Then
Copie "Propriétés_modéles_gps", "j", "Synthèse", "i"
Else
'Le second entrainant un message d'erreur indiquant la ligne fausse
lig_er = sheets("Propriétés_modéles_gps").Cells(i, sheets("Propriétés_modéles_gps").Range("nom_mod").Column)
Dim Msg, Style, Title, Rep
Msg = "Veuillez modifier cette information :" & lig_er
Style = vbOKOnly
Title = "Vérification"
Rep = MsgBox(Msg, Style, Title)
End If
End If
i = i + 1
j = j + 1
Wend
End Sub
Le but est que si le programme recconait le login de mon chef , les données sont remplacé immediattement mais si c'est le login de son assistante un message d'erreur lui dise quelle information est fausse, pour qu'elle se rende compte de ses erreurs (idée du chef).
les initialisations du début sont les mise en place de ligne min et max pour le parcours séquentiel.
Merci d'avance et désolé d'avoir écris un post aussi long .
A la prochaine pour vos réponses
A voir également:
- VBA problème macro parcours sequentiel
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Jitbit macro recorder - Télécharger - Confidentialité
- Excel compter cellule couleur sans vba - Guide
- Mes parcours google - Guide
3 réponses
voila donc ça commence bien je suis désolé mais l'editeur d'article n'a pas pri en compte mon indentation et cela a rendu le code illisible j'espère que vous y arriverai quand même .
A la prochaine
A la prochaine
Bonjour,
1) déjà pour conserver l'indentation sélectionne ton texte et clique sur l'outil 'conserver la mise en forme', le 4ème (après s, au dessus de ton texte.
2) Tu peux déposer un fichier exemple sur cijoint.fr et coller ici le lien fourni, ça sera bcp plus pratique pour tester ta macro. En précisant 'sur telle cellule il doit se passer ça...' etc
eric
1) déjà pour conserver l'indentation sélectionne ton texte et clique sur l'outil 'conserver la mise en forme', le 4ème (après s, au dessus de ton texte.
2) Tu peux déposer un fichier exemple sur cijoint.fr et coller ici le lien fourni, ça sera bcp plus pratique pour tester ta macro. En précisant 'sur telle cellule il doit se passer ça...' etc
eric
Le problème c'est que le fichier contient des données confidentielle et qu'il ne faut pas que je les déposes n'importe ou, d'ailleur il ne faut pas que je les divulgue.
Voila la séquence de code avec mise en forme :
Voila la séquence de code avec mise en forme :
Sub Macro_finale()
'Initialisation des variables
login = RecupLogon
lig_min_NR = Range("Debut_NR").Row + 1
lig_max_NR = Range("Fin_NR").Row - 1
lig_min_R = Range("Debut_R").Row + 1
lig_max_R = Range("Fin_R").Row - 1
Lig_min_P = Range("Debut_P").Row + 1
Lig_max_P = Fligmax(Lig_min_P, Range("nom_mod").Column)
i = lig_min_NR
j = Lig_min_P
'Condition de la première comparaison
While i <> lig_max_NR Or j <> Lig_max_P
If Cells(j, Range("nom_mod").Column) = sheets("Synthèse").Cells(i, sheets("Synthèse").Range("mod_GPS").Column) Then
With sheets("Synthèse")
'Vérification des informations tapées par Hélène
While Cells(j, Range("NR_cout").Column) = .Cells(i, .Range("S_Cout_NR").Column) And _
Cells(j, Range("NR_Deb_T0").Column) = .Cells(i, .Range("S_Deb_T0").Column) And _
Cells(j, Range("NR_Fin_T0").Column) = .Cells(i, .Range("S_Fin_T0").Column) And _
Cells(j, Range("Nom_LH").Column) = .Cells(i, .Range("S_Nom_LH").Column) And _
Cells(j, Range("Nom_LP").Column) = .Cells(i, .Range("S_Nom_LP").Column)
i = i + 1
j = j + 1
Wend
End With
Else
'Séparation des traitements
'Le premier login entrainant une remplacement des données
If login = "danielc" Then
Copie "Propriétés_modéles_gps", "j", "Synthèse", "i"
Else
'Le second entrainant un message d'erreur indiquant la ligne fausse
lig_er = sheets("Propriétés_modéles_gps").Cells(i, sheets("Propriétés_modéles_gps").Range("nom_mod").Column)
Dim Msg, Style, Title, Rep
Msg = "Veuillez modifier cette information :" & lig_er
Style = vbOKOnly
Title = "Vérification"
Rep = MsgBox(Msg, Style, Title)
End If
End If
i = i + 1
j = j + 1
Wend
End Sub
Pas de pb, on va attendre qcq'un bonne volonté qui passera par là pour préparer un fichier avec des infos fictives...
eric
eric
Après plusieurs test je me suis rendu compte que ce qui ne fonctionne pas
se trouve dans la condition du parcours. En effet il me trouve bien la bonne
valeur de la cellule de la première feuille (qui est la page active) mais il ne trouve pas celle
de la seconde page pourtant indexé avec "sheets".
Voilà pour vour tenir informé de ma progression dans la résolution de mon problème et au passage
cela pourra vous aidez a m'aider . Merci encore
se trouve dans la condition du parcours. En effet il me trouve bien la bonne
valeur de la cellule de la première feuille (qui est la page active) mais il ne trouve pas celle
de la seconde page pourtant indexé avec "sheets".
Voilà pour vour tenir informé de ma progression dans la résolution de mon problème et au passage
cela pourra vous aidez a m'aider . Merci encore