XL 2019 Détecter les valeurs suivant les tableaux sélectionnés et, si elles sont non-existantes, les copier

Amigo

XLDnaute Occasionnel
Bonjour le Forum
J’utilise un fichier contenant plusieurs tableaux. Mon souhait est de dupliquer une ligne d’un tableau dans d’autres tableaux. Ces tableaux seront sélectionnés à l’aide de cases à cocher dans un Userform qui s’ouvre lorsque l’on clique sur le bouton “Dupliquer” (voir fichier ci-joint).
Si je souhaite copier une ligne du tableau_2024 dans les tableaux 2025 et 2026 :
  1. Si les valeurs existent dans 2025, afficher le message “Personne existe” et passer au tableau suivant.
  2. Si les valeurs existent dans le tableau 2025 mais pas dans le tableau 2026, afficher le message “Personne existe” et copier la ligne dans 2026.
  3. Si les valeurs n’existent ni dans 2025 ni dans 2026, copier la ligne dans les tableaux sélectionnés."
Merci par avance
Amigo

VB:
Private Sub CommandButton1_Click()
Dim mnom As String, mprenom As String
  If Me.Source.ListIndex <> -1 And Me.Source.ListCount > 0 Then
    For i = 0 To Me.Source.ListCount - 1
        If Me.Source.Selected(i) = True Then
            NomTableau = "Tableau" & Me.Source.List(i)
            On Error Resume Next
            mnom = Range(NomTableau & "[Nom]").Find(Me.TextBox1, LookIn:=xlValues)
            mprenom = Range(NomTableau & "[Prénom]").Find(Me.TextBox2, LookIn:=xlValues)
                If Trim(UCase(mnom)) = Trim(UCase(Me.TextBox1)) And Trim(UCase(mprenom)) = Trim(UCase(Me.TextBox2)) Then
                    MsgBox MsgBox(Me.TextBox2 & " " & Me.TextBox1 & " existe déjà dans " & NomTableau & vbCr & "Répéter Dupliquer")
'                    Unload Me
'                    Exit Sub
 
                Else

                    NomTableau = "Tableau" & Me.Source.List(i) 'temp
                    NbCol = Range(NomTableau).Columns.Count
                    If RechIntuit.TextBox1 <> "" Then
                        RechIntuit.Enreg = Range(NomTableau).Rows.Count + 1
                        Mode = "Consult"
                           For c = 1 To NbCol
                            If Not Range(NomTableau).Item(RechIntuit.Enreg, c).HasFormula Then
                              tmp = RechIntuit("textbox" & c)
                              If IsNumeric(Replace(tmp, ".", ",")) And InStr(tmp, " ") = 0 Then
                                 tmp = Replace(tmp, ".", ",")
                                 Range(NomTableau).Item(RechIntuit.Enreg, c) = CDbl(tmp)
                              Else
                                  If IsDate(tmp) Then
                                    Range(NomTableau).Item(RechIntuit.Enreg, c) = CDate(tmp)
                                  Else
                                    Range(NomTableau).Item(RechIntuit.Enreg, c) = tmp
                                  End If
                              End If
                             Else
                              Range(NomTableau).Item(RechIntuit.Enreg - 1, c).Copy
                              Range(NomTableau).Item(RechIntuit.Enreg, c).PasteSpecial Paste:=xlPasteFormats
                           End If
                         Next c
                           Range(NomTableau).Sort key1:=Range(NomTableau & "[nom]"), Header:=xlYes, Order1:=xlAscending
                 
                    End If

                End If
        End If
     Next i
  End If
Unload Me
End Sub
 

Pièces jointes

  • FormRechercheModifAjoutSupMultiBD - V2.xlsm
    82.3 KB · Affichages: 9
Dernière édition:

Amigo

XLDnaute Occasionnel
Bonjour Oneida et le Forum
D’abord, merci pour votre réponse.
J’ai une grande pensée pour Boisgontier, l’auteur de ce fichier ; que son âme repose en paix.
Je tiens à signaler que je suis novice en VBA, mais j’essaie d’apprendre. Mes explications n’étaient peut-être pas très claires, et je m’en excuse.

Dans mon fichier initial, j’ai plus de 3 tableaux, chacun constitué de milliers de lignes. Ces tableaux ne sont pas identiques, à l’exception des 2 premières cellules (Nom et Prénom, comme dans l’exemple de fichier). Prenons l’exemple de mon fichier sur le forum : certaines personnes se trouvent dans certains tableaux, mais pas dans d’autres.

Selon mes besoins, je souhaite dupliquer des personnes, par exemple celles présentes dans le tableau2025, vers les tableaux2024 et 2026. Cependant, étant donné qu’il y a beaucoup de mouvements dans les tableaux, je dois d’abord vérifier si ces personnes existent déjà dans les tableaux 2024 et 2026. Si une personne existe déjà dans l’un des tableaux, un message “Personne existe dans tableau…” devrait s’afficher. Sinon, je l’ajoute et si possible un message à la fin de l'ajout de la personne dans le ou les tableaux, et ainsi de suite, en vérifiant tous les tableaux cochés dans l’Userform.
J'espère que mes explications sont plus clairs.
Merci par avance
 

Amigo

XLDnaute Occasionnel
Bonjour Oneida et le Forum
C'est des essais pour vérifier si doublon.
En fait, avec mon code si nom prénom n'existent pas il va les enregistrer dans les tableaux choisis.
Par contre, s'ils existent dans un des tableaux il m'affiche le message pour chaque tableau coché.
Il me semble qu'il y a un problème de boucle mais je n'arrive pas à saisir le problème.
Bon dimanche
Amigo
 
Dernière édition:

Oneida

XLDnaute Impliqué
Re,
Pour resumer:
vous voulez mettre a jour tous les tableaux selectionne dans la listbox en verifiant que les personnes ne soient pas deja enregistrees
Exact?
Au fait combien de tableaux au final combien de ligne max

Pourquoi pas le meme nombre de colonnes pour tous les tableaux?
 
Dernière édition:

Amigo

XLDnaute Occasionnel
Re Bonjour
le nombre de colonne varie par rapport aux lignes de production et des matières premières.
J'ai modifié le nombre de colonne au lieu de nbcol "For c = 1 To NbCol" à 2 (Nom et prénom).
Le point commun essentiel entre les tableaux c'est les personnes
J'ai essayé de changer le test en If Not nom et prénom existe mais ca n'a pas changé le résultat
Cordialement
 
Dernière édition:

Oneida

XLDnaute Impliqué
Re,
Pour Trois tableaux selectionnes
ex: 1, 2, 3
Il ya mise a jour de:
1 vers 2 puis vers 3
2 vers1 puis vers 3
3 vers 1 puis vers 2

les trois pouvant etre different a la base

Suivant votre code, peut pas "marcher"
Les Textbox1 et 2 sont vide et je ne vois pas a quoi elles peuvent servir
 
Dernière édition:

Oneida

XLDnaute Impliqué
Re,
Est ce que vous dupliquer systematiquement a chaque fois que vous ajoutez/modifiez ou autre?
Parce que le plus simple serait de faire une mise a jour de tous les tableaux a la moindre action sur les boutons ajoutez/modifiez ou autre
Comprends pas votre selection tableaux si tous doivent identiques
 

Amigo

XLDnaute Occasionnel
Re,
Est ce que vous dupliquer systematiquement a chaque fois que vous ajoutez/modifiez ou autre?
Parce que le plus simple serait de faire une mise a jour de tous les tableaux a la moindre action sur les boutons ajoutez/modifiez ou autre
Re
je ne peux pas dupliquer systématiquement à chaque ajout ou modification car pour une simple raison : si j'ai une personne qui est qualifié pour une tache de production, il pourrait acquérir d'autres compétences dans le temps et à ce moment là que je pourrais l'ajouter dans un tableau.
Idem pour un nouvel arrivé.
Et ca arrive de supprimer des personnes qui perdent leurs compétences
Cordialement
 

Oneida

XLDnaute Impliqué
Re,
Donc Uniquement sur click bouton Duplique
Vous ne dite rien sur la selection tableau userform1, a quoi cela sert puisques qu'il faut a priori mettre a jour tous les tableaux ou alors vous ne nous dites pas tout
 

Amigo

XLDnaute Occasionnel
Re
Si j'ai bien compris votre question
la procédure est :
1 - je choisis la personne dans l'userfom "RechIntuit".
2 - je clique sur le bouton "Dupliquer" de l'Userform "RechIntuit" qui m'affiche l'Userform1
3 - je coche les tableaux à mettre à jour
4 - je clique sur "Dupliquer" pour mettre à jour les tableaux.
Cordialement
 

Discussions similaires