VBA - Création d'une interface pour insérer des lignes

Bonjour à tous,

J'ai besoin d'aide dans la réalisation d'une macro VBA, je travaille actuellement dessus mais je suis novice et autant vous dire que je n'arrive pas bien loin...

J'aimerais réaliser une macro VBA me permettant d'insérer une ligne de compte dans un tableau (onglet Sheet 1), à partir d'une interface (onglet Admin) dans laquelle l'utilisateur renseignerait 3 données (fichier exemple joint).

Les 3 données à renseigner par l'utilisateur sont: Account Code, Code CC et Parent. À partir des deux dernières données, la macro doit être capable de positionner la ligne de compte exactement au bon endroit dans le tableau. Je vous explique comment:

Code CC est la donnée renseignée en colonne D et permet donc d'identifier une plage potentielle où placer la ligne, car les différentes lignes qui correspondent à des comptes, sont regroupées par Code CC. On a d'abord les CC65, puis les CC1065, CC1115, CC1070.

Parent va permettre d'identifier la ligne exacte de cette plage, où placer la nouvelle ligne de compte. La donnée Parent est en fait le compte "parent" du nouveau compte que l'on va insérer. Tous les comptes parents correspondent aux lignes en gras dans le tableau. Les "parents" ne sont pas uniques dans le tableau mais le sont en revanche pour un "Code CC" donné! D'où l'importance de cette donnée. La macro rechercherait donc au sein de la plage identifiée grâce au CC, la ligne du compte parent renseignée par l'utilisateur avec Parent ; et insérerait la nouvelle ligne juste au dessus de son "parent". Dans cette nouvelle ligne devra figurer:

En colonne B: Account Code

En colonne D: Code CC

En colonne F: "No"

En colonne H: "B"

En colonne I: "N"

Voilà, j'ai essayé de formuler au mieux ce que je souhaitais faire, en espérant que ce soit clair. Mon tableau s'étale sur 12000 lignes et non 468 mais le principe est le même. J'ai quelques connaissances VBA comme je le disais, notamment pour comprendre un code ou en créer un succinct, mais l'ampleur du chantier ici, me semble trop importante. Si quelqu'un aurait une réponse à m'apporter, même partielle, ce serait génial.

Je vous remercie d'avance,

SkillzZ

Salut SkillzZ,

pourrais-tu préciser :

  • ton interface est-elle ce que tu montres dans ton fichier ou bien est-ce une UserForm que tu souhaites ?
  • Parent : c'est la colonne [C] ? Peux-tu donner un exemple concret de tout cela tel que tu le calculerais ?

A+

Bonjour à tous,

Merci beaucoup pour ta réponse curulis57 ! ! Je commence à désespérer (je continue d'essayer de trouver une solution de mon côté).

- Dans mon fichier j'ai dessiné qqch à l'aide des cellules excel mais c'était simplement à titre illustratif. Une Userform me paraît être pas mal ! (Une sorte de petit panneau avec des barres de saisie et des boutons c'est ça?)

- Je n'ai pas été clair je pense désolé. Non, les parents ne sont pas dans la colonne C. Ils sont en colonne B, et sont en gras (du coup toute la ligne est en gras au final). J'attends de l'utilisateur, qu'il rentre qqchose du genre "PL10103T" pour la donnée Parent. Cette donnée va permettre à la macro d'identifier la cellule de la colonne B, dans laquelle se trouve le Parent. ATTENTION: Ce "parent" peut potentiellement apparaître plusieurs fois. Pour avoir unicité de l'emplacement, il faut associer ce "parent" à la donnée Code CC que va aussi renseigner l'utilisateur (pour un Code CC donné, le parent est unique).

Du coup, j'aimerais que l'insertion de la nouvelle ligne se fasse sur la ligne qui précède celle du Parent. Si on reprend l'exemple que j'ai cité, j'ai tout renseigné dans un nouveau fichier exemple. Je pense que ce sera beaucoup plus parlant.

Merci pour ton aide curulis57, je sais que ma demande est complexe!

SkillzZ

PS: Ma réflexion a un peu évolué puisque je travaille sur le fichier en parallèle, et peut-être qu'il est plus simple (et à la fois mieux), de non pas identifier le CC_Code puis le Parent associé, mais de faire les deux " d'un seul coup " avec l'aide d'un "And". C'est-à-dire rechercher le Parent (colonne B) renseigné par l'utilisateur qui a le bon Code CC (colonne D) lui aussi renseigné par l'utilisateur.

Salut SkillzZ (je vais finir par m'endormir avec un pseudo pareil),

bête question (dont j'attends une réponse intelligente, hein !) :

Tes comptes Parent et Code CC sont-ils en nombre fixes (en d'autres termes, peut-on en créer d"autres) ?

Auquel cas, plutôt que d'obliger l'utilisateur à taper ces codes, proposer une ComboBox avec tous les codes disponibles = moins d'erreurs!

On peut aussi proposer une ComboBox d'office mais si nouveau code, le rajouter à la liste proposée le coup suivant...

Je constate que certains parents ne se terminent pas par "T"... Correct ?

A+

Bonjour à tous,

Curulis57, si l'utilisateur veut ajouter un compte parent, il le fera à la main et ne passera pas par l'interface de la macro. Mais oui il peut y en avoir des nouveaux! Il peut y avoir de nouveaux comptes CC aussi, mais très peu.

Par ailleurs il est normal que certains parents ne finissent pas par "T" même si ce n'est pas la majorité.

J'ai pas mal avancé sur le sujet avec un collègue et je pense que l'on a résolu à peu près le problème en fait, à quelques détails sur lesquels on va continuer à bosser. En revanche en ce qui concerne la userform je n'en ai jamais fait, et si tu peuxx m'en proposer une qui permettrait de rentrer les 3 données évoquées pour ensuite faire tourner la macro je suis preneur Curulis57!

Merci beaucoup pour ton aide dans tous les cas, j'apprécie vraiment.

Il n'est pas impossible que je refasse une apparition dans la journée ou dans les prochains jours pour des problématiques liées à ce souci si jamais je ne m'en sors pas. Donc si tu traînes encore sur le forum à ce moment là..

Bonne journée à toi !!

SkillzZ

Salut SkillzZ,

la vie n'étant pas un long fleuve tranquille, les rapides m'ont quelque peu ralenti...

A tester...

With Worksheets("BDD")
    For x = 1 To .Range("B" & Rows.Count).End(xlUp).Row
        If .Cells(x, 2) = Me.txt3.Text And .Cells(x, 2).Font.Bold = True And .Cells(x, 4) = Me.txt2.Text Then
            .Range("B" & x & ":J" & x).Insert shift:=xlDown
            .Cells(x, 2) = Me.txt1.Text
            .Cells(x, 4) = Me.txt2.Text
            .Cells(x, 6) = "N°"
            .Cells(x, 8) = "B"
            .Cells(x, 9) = "N"
            iOK = 1
            MsgBox "Le compte a été ajouté en ligne " & x & ".", vbInformation, "New account"
            Exit For
        End If
    Next
End With

A+

12skillzz.xlsm (52.86 Ko)

Je teste ça ce soir au mieux, au pire dimanche ou lundi ! Merci bcp pour le temps accordé et les neurones grillés (s'il y en a eu!) !

Bon week-end,

SkillzZ

Rechercher des sujets similaires à "vba creation interface inserer lignes"