VBA problème macro parcours sequentiel

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
Configuration: Windows NT 4.0
Internet Explorer 6.

3 réponses

  1. Foch
     
    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
    1
  2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
    0
    1. Foch
       
      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 :



      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
      0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Pas de pb, on va attendre qcq'un bonne volonté qui passera par là pour préparer un fichier avec des infos fictives...
    eric
    0
    1. Foch
       
      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
      0