VBA : créer colonne (et les nommer) si colonne de référence vide

Bonjour à vous,

Mon projet avance bien en grande partie grâce à toutes les ressources du forum et du site, et VRAIMENT un immense MERCI.

J'en suis presque à l'étape finale et je coince un peu.

Pour résumer un peu le projet : il s'agit pour un groupe d'utilisateur d'alimenter une base de données et dans certains cas mettre à jour des historiques sur des contrats.

1 - UF avec listview de recherche.

2 - Réponse msgbox : OUI/NON

3 - Si oui, ouverture d'un autre UF pour rentrer les variables de l'historique des modificcations à compléter (4 variables : N°, Date, Motif, N° Motif).

4- Alimentation de la BDD....et c'est là que je coince :

La BDD contient 1 premier pavé de ces 4 colonnes (N°, Date, Motif, N° Motif). Le contrat concerné peut avoir eu plusieurs modifications telles que (en colonne) :

N° =1

Date = 01/02/1990

Motif = VACANCES

N° Motif = 5

N° = 2

Date : 05/05/1995

Motif = PAYE

N° Motif = 15

Comment puis je procéder pour que lorsque le programme a détecté dans la 1ère colonne que cette cellule est non vide (la ligne est déjà repérée) pour que alors, le pavé des 4 colonnes se recrée à l'identique OU que les variables viennent alimenter le pavé de colonnes suivants ?

J'en suis à cela pour l'instant qui fonctionne mais insuffisant

Private Sub CommandButtonMAJ_Click()

With Sheets("Form")

    If Cells(ContratLgn, "AN") = "" Then

        .Cells(ContratLgn, "AN").Value = TextBoxNoAvt1.Value
        .Cells(ContratLgn, "AR").Value = TextBoxMotifAvt1.Value
        .Cells(ContratLgn, "AO").Value = TextBoxNoArticle1.Value
        .Cells(ContratLgn, "AP").Value = TextBoxLibelleArticle1.Value
        .Cells(ContratLgn, "AQ").Value = TextBoxDateEffet1.Value

    Else:
        .Cells(ContratLgn, "AN").Activate
        ActiveCell.Offset(0, 5).Value = TextBoxNoAvt1.Value
        ActiveCell.Offset(0, 6).Value = TextBoxMotifAvt1.Value
        ActiveCell.Offset(0, 7).Value = TextBoxNoArticle1.Value
        ActiveCell.Offset(0, 8).Value = TextBoxLibelleArticle1.Value
        ActiveCell.Offset(0, 9).Value = TextBoxDateEffet1.Value
    End If
End With

    rep = MsgBox("Y a t il eu d'autre(s) avenant(s)?", vbYesNo + vbQuestion, "Historique des avenants du contrat")
        If rep = vbNo Then Exit Sub
        If rep = vbYes Then
            TextBoxNoAvt1.Value = ""
            TextBoxMotifAvt1.Value = ""
            TextBoxNoArticle1.Value = ""
            TextBoxLibelleArticle1.Value = ""
            TextBoxDateEffet1.Value = ""
        End If

End Sub

Merci à vous

Bonjour

Comme demandé, merci de bien vouloir cloturer votre autre fil resté ouvert -->

Crdlt

Edit : fil cloturé par Kalagan.

C'est bien cloturé

J' ajout mon fichier en version anonymée pour peut être mieux comprendre mon souci et m'aider à trouver une solution.

Je suis aussi preneuse de toutes proposition pour améliorer mes codes, je débute....

Merci à vous

14eact.xlsm (138.74 Ko)

Bonjour à vous,

Je me permets une petite relance pour avoir un peu d'aide sur mon projet.

Merci à vous

Bonjour

en regardant le fichier il y a pas mal de choses à faire dans les codes

J'ai donc plusieurs questions :

1. Est-ce que cette demande est la suite de votre demande précédente concernant la recherche d'item dans la listview --> https://forum.excel-pratique.com/excel/probleme-listview-items-192090
Si oui, je ne vois rien de ce que je vous ai proposé à ce sujet repris dans le fichier et là je suppose que cela concerne le bouton Changement de la feuille Accueil ?


La BDD contient 1 premier pavé de ces 4 colonnes (N°, Date, Motif, N° Motif). Le contrat concerné peut avoir eu plusieurs modifications telles que (en colonne) :

2. Ce sont les colonnes AN .....


3. Dans votre demande ici, cela concerne-t-il l'USF HistAvtUF ?
Si oui la variable "Contratlig" n'est pas trouvée lorsque vous cliquez sur "Mettre à jour".
3-1. A quelle colonne cela correspond-t-il dans la feuille "Form", la colonne AI ?
3-2. Comment procédez vous avec cette USF pour la mise à jour


4. Pourquoi la ligne 3 comporte-t-elle des numéros ? Cela n'a pas d'utilité dans un tableau structuré et si vous voulez connaitre le numéro des colonnes,il suffit de configurer Excel dans les options pour que les entêtes de colonnes soient en chiffre au lieu de lettre

Bonjour Dan,

Voici quelques éclaircissements :

1. Est-ce que cette demande est la suite de votre demande précédente concernant la recherche d'item dans la listview --> https://forum.excel-pratique.com/excel/probleme-listview-items-192090
Si oui, je ne vois rien de ce que je vous ai proposé à ce sujet repris dans le fichier et là je suppose que cela concerne le bouton Changement de la feuille Accueil ?
> Oui bien sur, j'ai repris toutes vos propositions dans mon projet réel. J'avais préparé ce fichier "anonymé" avant d'avoir vos propositions et je ne l'ai pas mis à jour.

Effectivement, il s'agit bien du bouton "Changements" : Ce bouton ouvre un premier formulaire de recherche avec une listview. Le résultat de la recherche déclenche un msgbox demandant s'il y a eu des modifications (avenants) sur ce contrat (le but étant de mettre à jour les historiques) :

  • Si oui, alors un autre formulaire s'ouvre afin de compléter les historiques des changements
  • Si non, alors un autre formulaire s'ouvre afin de compléter les nouveaux changements

La BDD contient 1 premier pavé de ces 4 colonnes (N°, Date, Motif, N° Motif). Le contrat concerné peut avoir eu plusieurs modifications telles que (en colonne) :

2. Ce sont les colonnes AN .....

Oui, il s'agit des colonnes AN à AR (qui sont alimentées par les 2 UF : HistAvtUF et NouveauxAvtsUF)

3. Dans votre demande ici, cela concerne-t-il l'USF HistAvtUF ? Les 2 formulaires : HistAvtUF et NouveauxAvtsUF sont concernés
Si oui la variable "Contratlig" n'est pas trouvée lorsque vous cliquez sur "Mettre à jour".

> je viens de refaire un essai : la variable "ContratLgn" fonctionne bien et alimente bien les colonnes avec HistAvtUF, effectivement je viens de m'apercevoir que je n'avais pas terminé les paramétrages avec NouveauxAvtsUF

3-1. A quelle colonne cela correspond-t-il dans la feuille "Form", la colonne AI ? Oui c'est bien la colonne AI qui donne donne un ID unique sur les lignes
3-2. Comment procédez vous avec cette USF pour la mise à jour Avec le bouton MAJ

4. Pourquoi la ligne 3 comporte-t-elle des numéros ? Cela n'a pas d'utilité dans un tableau structuré et si vous voulez connaitre le numéro des colonnes,il suffit de configurer Excel dans les options pour que les entêtes de colonnes soient en chiffre au lieu de lettre

> Oui je n'utilise cela (double identification - en lettres et en numéros) que pour le temps de la conception. Vous avez raison, je l'ai retiré, ce n'est pas une bonne manière de procéder

Merci à vous Dan

Bonjour

Merci de vos précisions

Toutefois je reprends mon point 3 qui concerne directement votre demande dans ce fil

Point 3.1 c'est ok pour moi
Point 3.2 : Je voudrais comprendre comment vous utilisez l'USF HistAvtUF pour effectuer la mise à jour. Vous l'ouvrez depuis une autre ?

Bonsoir Dan,

Pour gérer les changements :

1 Ouvrir AvenantsUF

  • Rechercher la personne (un précédent existe forcément dans la base de données)
  • Cliquer sur la ligne trouvée :
    • La msgbox s'ouvre :
      • Y a t il eu déjà des avenants sur ce contrat (historique)
        • Si oui : ouverture de HistoAvtsUF
          • Complétion et mise à jour de la bdd (onglet Form)
        • Si non : Ouverture de NouveauxAvts(UF)
          • Complétion et mise à jour de la BDD

J'ai besoin de ces 2 UF car les champs à compléter ne sont pas identiques. Les paramétrages de l' userform "NouveauxAvtsUF" ne sont pas encore tous opérationnels sur le fichier que j'ai posté

Bonne soirée à vous et merci encore

Bonjour,

Le code que vous avez mis dans ce fil ne se trouve pas dans l'USF avenants mais dans l'UF HistoAvtUF. Du coup, je ne pense pas que vous avez posté un fichier à jour.
Toutefois compte tenu de vos explications, j'ai pu revoir en premier les codes dans l'USF avenants.

Comme j'ai regardé par rapport aux tableaux structurés, les modifications vont impliquer d'autres modifications ailleurs

Etes-vous ok sur ce point ?

Bonjour Dan,

Oui vous avez raison : le code que j'ai posté correspond bien à "HistoAvtsUF" (le userform "AvenantsUF" ne sert qu'à faire la recherche et ensuite générer un document).

Je ne sais pas quelles modifications cela va occasionner sur le reste du projet, mais je tâcherai d'adapter tout cela avec votre aide certainement.

Si vous souhaitez en échanger par téléphone pour mieux se comprendre, c'est ok pour moi bien sur.

Belle journée à vous et merci encore : rien que nos échanges et vos questions m'aident à progresser

Les modifications concernent l'UF avenant.

Pour faire au plus simple, supprimez tous les codes dans cette UF et remplacez-les par tous les codes dans le fichier joint

13uf-avenant.txt (3.46 Ko)

Faites d'abord quelques tests, juste sur cette UF.

Rem :
- Supprimez au préalable la ligne 3 qui contient des numéros si vous ne l'avez pas fait
- la ligne contratlig tient compte du tableau structuré et va être différente de ce que vous aviez précédemment


Si ok et ce point résolu, je regarderai l'UF HistAvt.

Re Dan,

Oui tout fonctionne, c'est parfait :

Avec AvenantsUF :

  • La recherche est parfaite,
  • En réponse à la msgbox, les 2 autres UF s'affichent bien (et super d'avoir amélioré le code qui permet maintenant de re sélectionner la ligne dans la listview).

Vous êtes vraiment super

Ok parfait.

Concernant la mise à jour, lorsque je regarde le code que vous avez posté, je ne comprend pas le pourquoi du OFFSET de colonne 5 à 8 alors que le code positionne la cellule sur AN et que le tableau ne contient que 4 colonnes à droite

Merci d'expliquer ce qui doit être fait notamment selon l'info en colonne AN.
de ce que je comprends si on a un chiffre dans la colonne AN, on modifie ce chiffre en incrémentant de 1 et si en AN on n'a rien il s'agit d'ajouter une nouvelle ligne ? ou de placer le chiffre 1 en colonne AN

Voici Dan,

Je vous transfère le fichier, ce sera peut être plus explicite : j'ai remis des précisions dans l'onglet "Form".

En résumé :

Prenons la ligne 2 : Il peut y avoir un premier changement à enregistrer, dans ce cas, les informations de ce premier changement viendront s'enregistrer à partir de la colonne AN et suivantes. Dans 3 mois, il pourrait y avoir un second changement, dans ce cas, ce second changement doit venir alimenter les colonnes correspondantes au changement N° 2, etc

Certaines lignes, n'auront aucun changements, d'autres lignes pourront avoir 6 , 7 et plus de changements. Ainsi si les colonnes du changement N° 6 par exemple n'existent pas, alors il faut les créer et nommer les colonnes avec leur numéro de changement.

Est ce plus clair de cette manière ?

14eactforum.xlsm (115.70 Ko)

Vous n'aviez pas besoin de me mettre le fichier.
Avec vos explications cela devient plus clair (enfin je crois)

en gros :

Vous n'avez jamais de doublons de contrat dans la colonne C. Si vous faites un changement c'est la colonne AN qui est incrémentée
Au départ AN est toujours vide
Si changement on ajoute 1 à la valeur de la cellule en AN
Correct ?

Re,

Oui oui, il peut y avoir des doublons dans la colonne C, la seule colonne où il ne peut pas y avoir de doublons est la colonne AI (numéro unique généré par la lettre de la colonne A , l'année , _ , la première lettre de la colonne C et enfin le numéro de ligne (qui donne un numéro unique). C'est donc la colonne AI qui sert de référence pour retrouver les numéros de lignes

Oui à la livraison de l'application, les colonnes AN à AR seront vides (ces 5 colonnes vont ensemble et forment un groupe = elles seront alimentées par les userform avenants), donc :

Sur une même ligne :

  1. 1er Changement = colonnes AN à AR,
  2. 2nd Changement = colonnes AS à AW,
  3. et ainsi de suite

On continue !

Bonjour à tous,

A force ne risque t-on pas d'avoir trop de colonnes à gérer pour les changements ?

Une solution consisterait à gérer disons à la manière d'Access. Dans le tableau T_BDDRH ne garder que le strict minimum plus une colonne de valeurs uniques ID, ensuite créer un tableau changements avec une colonne IDContrats ou IDContacts ou autre à voir cet id reprendrais la valeur de l'ID de la ligne concernée dans le tableaau T_BDDRH.

Je pense que cela simplifierait la tache.

En cas de suppression d'une ligne du tableau T_BDDRH il suffirait de rechercher et supprimer les lignes du tableau changement qui auraient le même IDContrats.

Petites questions, pourquoi ne pas utiliser la puissance des tableaux structurés ?

Bonsoir Jean Paul,

Oui je me dis aussi que la BDD risque d'être assez longue en nombre de colonnes, cependant, les utilisateurs utiliseront davantage la BDD au format TCD avec les champs qu'ils souhaitent avoir en visu; J'ai aussi intégré un onglet "Mon Tableau de bord" avec des petits TCD d'indicateurs;

Concernant la "Grande" BDD, je serais la seule à vraiment l'utiliser pour faire les compilations mensuelles à l'aide de powerquery;

Mais suis preneuse d'informations si tu as une autre organisation en tête

Bonjour

Oui oui, il peut y avoir des doublons dans la colonne C,

Oups désolé c'est de la colonne contrat AI dont je voulais parler. Donc c'est bon de ce coté

Lorsque vous répondez Oui à la question dans l'USF avenants, cela vous amène sur l'UF histavt avec le N° de contrat choisi.
Si pour ce contrat il y a déjà eu un changement, la TextBoxNoAvt1 ne renseigne pas le n° de changement existant dans la BDD. Normal cela ?
Ne devrait-elle pas renseigner le dernier changement effectué en y ajoutant 1 ?

Je vois aussi que ce nombre de changements peut devenir ingérable et il vaudrait mieux prévoir les colonnes pour les changements ou alors le code doit aussi ajouter les 4 colonnes en plus des infos....
Cela risque de devenir assez lourd ...

De mon coté, je pense qu'en base de données ce n'est pas toujours comme cela que l'on procède, on aurait plutot ajouté une nouvelle ligne à chaque nouvel avenant

NB : je pense que c'est ce que Jean Paul vous écrit dans son post

Bonjour à tous,

je pense que c'est ce que Jean Paul vous écrit dans son post

Je le vois comme dans Access, des tables avec relations par index.

Comme une photo vaut mieux que moult explications...

000495
Rechercher des sujets similaires à "vba creer colonne nommer reference vide"