[VBA] Copier une ligne de cellule et coller que les cellules non existant

Bonjour,

Vue le nombre de sujet résolue sur ce forum, je me suis dit que je pourrais trouver de l'aider ici !

Dans le cadre d'un projet professionnel, j'ai la nécessité de copier une ligne de cellule, de vérifier l'existence ou non sur la ligne de destination, et de coller uniquement les cellules non existante sur la ligne de destination.

Pour ce faire, un seul fichier Excel avec deux feuilles. Une feuille avec la liste des "nouvelles" cellules à copier, et une feuille avec la liste des "anciennes" cellules.

Le but est donc de vérifier cellule par cellule la ligne d'émission situé dans la feuille 1 ( FEUILLE AVEC LA LIGNE A COPIER ) et de coller uniquement les cellules non existante sur la ligne de destination situé dans la feuille 2 ( FEUILLE AVEC LA LIGNE A INSERER ).

Merci par avance !

N'hésitez surtout pas à me demander des clarifications sur mes explications !

Le fichier de travail :

Salut Merwan,

Ta demande est en effet fort incomplète :

  • les n° de lignes correspondent-ils toujours ?
  • Dans le cas contraire, quel est la donnée commune pour s'y retrouver ?
Dans ce cadre-là, un fichier réaliste serait le bienvenu !

- Les anciennes données ne correspondant pas (plus) aux nouvelles doivent-elles être modifiées ou pas ?

Sinon, au plus simple, si il n'y a pas de "piège", un double-clic sur la ligne concernée en 'NEW DATA" et l'affaire est faite.

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Cancel = True
Worksheets("BDD").Rows(Target.Row).Value = Rows(Target.Row).Value
'
End Sub

A+

4merwan.xlsm (16.02 Ko)

Bonjour,

Regarde si ça te convient .

@ +

Bonjour curulis57 !

Merci pour la prompitude de ta réponse et pour le message de bienvenu !

Alors en effet, la feuille utilisé pour mon projet est bien différente.

Nous avons des "projets" a affecté à des "personnes".

De plus, il y a une BDD connecté avec Access qui se met à jour automatiquement, présent dans le fichier Excel même.

Depuis cette BDD, nous devons pouvoir remplir et mettre à jour grâce à un cmdButton les feuilles personnel de chaque personne.

Pour pouvoir mieu détaillé mon problème, ci-joint un fichier qui est ressemblant au mien.

PS : Uniquement le nom de la marque est à retourner en fonction de la personne.

5merwan.xlsm (21.15 Ko)

Bonjour fg2b !

Merci pour cette réponse et ton partage de connaissance !

Alors oui, cela fonction sur ton fichier, mais dès lors que je l'adapte au mien il me retourne une erreur : la macro ne connait pas "c" car pas déclaré.

Aurais-tu une réponse concerant le type de variable que "c" représente ?

Merci à toi

Bonjour,

le "c" en question est une cellule qui permet de parcourir une plage de cellules .( on boucle sur c dans une plage ).

je pense que le problème vient plutôt de la plage de cellule (Range) qui est définie.

Si celle ci n'est pas correctement définie ou est vide , l'utilisation des éléments qui la composent (a savoir le "c") pose problème.

Le plus simple serait de mettre a disposition le fichier.

cdlt,

fg2b,

Je ne peux pas vous fournir le fichier directement car il est d'ordre privé.

Cependant, lorsque je lance la macro j'ai l'erreur suivante sur c :

Erreur de compliation :

Variable non definie

Je sais pas si cela concerne le contenu de la variable ou la déclaration.

Merci à toi

Salut Merwan,

Salut fg2b,

m'étonnerait que ce système soit pérenne mais bon...

Un double-clic sur la feuille 'BDD_CONNECTEE' démarre la macro.

Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'
Dim tTab, sNom$, iIdx%, x%, y%
'
Cancel = True
tTab = Range("A2:C" & Range("A" & Rows.Count).End(xlUp).Row).Value
For x = 1 To UBound(tTab, 1)
    If tTab(x, 2) <> sNom And tTab(x, 2) <> "" Then
        sNom = CStr(tTab(x, 2))
        iIdx = 0
        With Worksheets(sNom)
            For y = x To UBound(tTab, 1)
                If tTab(y, 2) = sNom Then
                    tTab(y, 2) = ""
                    iIdx = iIdx + 1
                    If .Cells(1, iIdx) = "" Then .Cells(1, iIdx) = tTab(y, 3)
                End If
            Next
        End With
    End If
Next
'
End Sub

A+

7merwan.xlsm (21.43 Ko)
Rechercher des sujets similaires à "vba copier ligne coller que existant"