Mise à jour

Le
JulieH
Re-bonjour à toutes et tous,

Deuxième problème du jour, évidemment simplifié.

J'ai une base de données que je souhaite mettre à jour. les données à
remonter sont dans un autre fichier :
- Structure de la base : en colonne A un nom d'élève, en B un numéro
de bureau.
- Structure du fichier à remonter : en A un nom d'élève, en B le
numéro de bureau.

Je sais remonter le fichier à la fin de la base. Mais il me manque
plusieurs choses pour gérer les erreurs. En effet, il ne doit jamais y
avoir de doublons sur le nom de l'élève, ni sur le numéro de bureau (ni
à plus forte raison sur les 2 en même temps).
En cas de doublons sur l'un ou l'autre de ces deux points, la macro
doit donc :
- Remonter toutes les données cohérentes, mais rejeter les données à
problème.
- Signaler le problème.
- Générer une feuille EXCEL avec les numéros des élèves à problème.

Merci pour vos idées

Julie
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
francois.forcet
Le #5427921
Rebonjours Julie

Pour cette nouvelle demande je te propose de ramener toutes les
données (les données nouvelles avec les actuelles) dans une feuille
(Feuil1) colonne A et B et d'analyser les doublons avec ce code

For Each c In Worksheets("Feuil1").Range("A2", "A" &
Range("A65535").End(xlUp).Row)
On Error Resume Next
Range(c, "A" & Range("A65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n1 = n1 + 1
c.Interior.ColorIndex = 3
End If
Next
For Each c In Worksheets("Feuil1").Range("B2", "B" &
Range("B65535").End(xlUp).Row)
On Error Resume Next
Range(c, "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n2 = n2 + 1
c.Interior.ColorIndex = 3
End If
Next
If n1 <> "" Then
MsgBox (n1 & " doublon(s) pour les Noms")
End If
If n2 <> "" Then
MsgBox (n2 & " doublon(s) pour les numéros")
End If

Les doublons pour les noms ainsique pour les numéros sont colorés en
rouge et un message pour chacun donne leur nombre

A toi ensuite de les traiter

Qu'en penses tu ????
JulieH
Le #5427901
Je viens de voir ta réponse sur mon nouveau fil et je te remercie à
nouveau. J'ai essayé rapidement sans tout vérifier. Je vois un petit
problème car il repère bien les doubles sur les noms (colonne A) mais il
en repère trop sur la colonne B. Voir Cjoint :

http://cjoint.com/?dFsli1oDHs

Par ailleurs, comment faire pour récupérer ceux qui sont colorés en
rouge pour la suite des opérations : supprimer et copier dans une autre
feuille.

Julie

Rebonjours Julie

Pour cette nouvelle demande je te propose de ramener toutes les
données (les données nouvelles avec les actuelles) dans une feuille
(Feuil1) colonne A et B et d'analyser les doublons avec ce code

For Each c In Worksheets("Feuil1").Range("A2", "A" &
Range("A65535").End(xlUp).Row)
On Error Resume Next
Range(c, "A" & Range("A65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n1 = n1 + 1
c.Interior.ColorIndex = 3
End If
Next
For Each c In Worksheets("Feuil1").Range("B2", "B" &
Range("B65535").End(xlUp).Row)
On Error Resume Next
Range(c, "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n2 = n2 + 1
c.Interior.ColorIndex = 3
End If
Next
If n1 <> "" Then
MsgBox (n1 & " doublon(s) pour les Noms")
End If
If n2 <> "" Then
MsgBox (n2 & " doublon(s) pour les numéros")
End If

Les doublons pour les noms ainsique pour les numéros sont colorés en
rouge et un message pour chacun donne leur nombre

A toi ensuite de les traiter

Qu'en penses tu ????


FdeCourt
Le #5427861
Salut,

Une autre solution (elle doit pouvoir être grandement simplifié et
optimisée, mais je l'ai fait rapidement et l'idée est la), mais qui a
l'avantage d'être plutot rapide :

prérequis :
trois feuilles :
- data > dans laquelle il y a tes données
- error > qui va contenir une colonne avec les nom en erreur, et une
autre avec les bureaux en erreur
- ok > qui va contenir la liste sans erreur


Sub verification()
Dim k As Long, x As Long, l As Long, ko As Integer, y As Long, f As
Long
Dim data As Object
Dim unique_nom As New Collection
Dim err_nom As New Collection
Dim err_bureau_temp()
Dim err_nom_temp()
Dim unique_bureau As New Collection
Dim err_bureau As New Collection
Dim final_ok()
Dim donnees
Set data = Sheets("data")

donnees = data.Range(data.Cells(1, 1), data.Cells(data.Cells(65536,
1).End(xlUp).Row, 2))


For x = 1 To UBound(donnees, 1)
'Verif Nom
On Error Resume Next
unique_nom.Add donnees(x, 1), CStr(donnees(x, 1))
If Err <> 0 Then
On Error Resume Next
err_nom.Add donnees(x, 1), CStr(donnees(x, 1))
If Err = 0 Then
k = k + 1
ReDim Preserve err_nom_temp(1 To k)
err_nom_temp(k) = donnees(x, 1)
End If
End If

'Verif bureau
On Error Resume Next
unique_bureau.Add donnees(x, 2), CStr(donnees(x, 2))
If Err <> 0 Then
On Error Resume Next
err_bureau.Add donnees(x, 2), CStr(donnees(x, 2))
If Err = 0 Then
l = l + 1
ReDim Preserve err_bureau_temp(1 To l)
err_bureau_temp(l) = donnees(x, 2)
End If
End If


Next
With Sheets("error")
.Range(.Cells(1, 1), .Cells(UBound(err_nom_temp), 1)) =
Application.Transpose(err_nom_temp)
.Range(.Cells(1, 2), .Cells(UBound(err_bureau_temp), 2)) =
Application.Transpose(err_bureau_temp)
End With

For x = 1 To UBound(donnees)
On Error Resume Next
err_bureau.Add donnees(x, 2), CStr(donnees(x, 2))
If Err <> 0 Then ko = ko + 1

On Error Resume Next
err_nom.Add donnees(x, 1), CStr(donnees(x, 1))
If Err <> 0 Then ko = ko + 1

If ko = 0 Then
f = f + 1
ReDim Preserve final_ok(1 To 2, 1 To f)
final_ok(1, f) = donnees(x, 1)
final_ok(2, f) = donnees(x, 2)
End If
ko = 0
Next

With Sheets("ok")
.Range(.Cells(1, 1), .Cells(UBound(final_ok, 2), 2)) =
Application.Transpose(final_ok)
End With


On 31 mar, 18:12, JulieH
Je viens de voir ta réponse sur mon nouveau fil et je te remercie à
nouveau. J'ai essayé rapidement sans tout vérifier. Je vois un petit
problème car il repère bien les doubles sur les noms (colonne A) mais il
en repère trop sur la colonne B. Voir Cjoint :

http://cjoint.com/?dFsli1oDHs

Par ailleurs, comment faire pour récupérer ceux qui sont colorés en
rouge pour la suite des opérations : supprimer et copier dans une autre
feuille.

        Julie




Rebonjours Julie

Pour cette nouvelle demande je te propose de ramener toutes les
données (les données nouvelles avec les actuelles) dans une feuille
(Feuil1) colonne A et B et d'analyser les doublons avec ce code

For Each c In Worksheets("Feuil1").Range("A2", "A" &
Range("A65535").End(xlUp).Row)
On Error Resume Next
    Range(c, "A" & Range("A65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
        MatchCase:úlse, SearchFormat:úlse).Activate
    If ActiveCell.Address <> c.Address Then
    n1 = n1 + 1
    c.Interior.ColorIndex = 3
    End If
    Next
For Each c In Worksheets("Feuil1").Range("B2", "B" &
Range("B65535").End(xlUp).Row)
On Error Resume Next
    Range(c, "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
        MatchCase:úlse, SearchFormat:úlse).Activate
    If ActiveCell.Address <> c.Address Then
    n2 = n2 + 1
    c.Interior.ColorIndex = 3
    End If
    Next
    If n1 <> "" Then
    MsgBox (n1 & " doublon(s) pour les Noms")
    End If
    If n2 <> "" Then
    MsgBox (n2 & " doublon(s) pour les numéros")
    End If

Les doublons pour les noms ainsique pour les numéros sont colorés en
rouge et un message pour chacun donne leur nombre

A toi ensuite de les traiter

Qu'en penses tu ????- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -



JulieH
Le #5427851
Bonjour et merci pour ta réponse,

Je pense que là, c'est vraiment au dessus de ce que je sais faire.
Comme mon exemple était simplifié et qu'il faudra que j'adapte, je ne
vais pas pouvoir retenir cette solution.
Je crois que je vais m'en tenir à l'idée de François, à condition qu'il
(ou que quelqu'un) m'aide à trouver l'erreur signalée.

Bonne soirée.

Julie

Salut,

Une autre solution (elle doit pouvoir être grandement simplifié et
optimisée, mais je l'ai fait rapidement et l'idée est la), mais qui a
l'avantage d'être plutot rapide :

prérequis :
trois feuilles :
- data > dans laquelle il y a tes données
- error > qui va contenir une colonne avec les nom en erreur, et une
autre avec les bureaux en erreur
- ok > qui va contenir la liste sans erreur


Sub verification()
Dim k As Long, x As Long, l As Long, ko As Integer, y As Long, f As
Long
Dim data As Object
Dim unique_nom As New Collection
Dim err_nom As New Collection
Dim err_bureau_temp()
Dim err_nom_temp()
Dim unique_bureau As New Collection
Dim err_bureau As New Collection
Dim final_ok()
Dim donnees
Set data = Sheets("data")

donnees = data.Range(data.Cells(1, 1), data.Cells(data.Cells(65536,
1).End(xlUp).Row, 2))


For x = 1 To UBound(donnees, 1)
'Verif Nom
On Error Resume Next
unique_nom.Add donnees(x, 1), CStr(donnees(x, 1))
If Err <> 0 Then
On Error Resume Next
err_nom.Add donnees(x, 1), CStr(donnees(x, 1))
If Err = 0 Then
k = k + 1
ReDim Preserve err_nom_temp(1 To k)
err_nom_temp(k) = donnees(x, 1)
End If
End If

'Verif bureau
On Error Resume Next
unique_bureau.Add donnees(x, 2), CStr(donnees(x, 2))
If Err <> 0 Then
On Error Resume Next
err_bureau.Add donnees(x, 2), CStr(donnees(x, 2))
If Err = 0 Then
l = l + 1
ReDim Preserve err_bureau_temp(1 To l)
err_bureau_temp(l) = donnees(x, 2)
End If
End If


Next
With Sheets("error")
.Range(.Cells(1, 1), .Cells(UBound(err_nom_temp), 1)) > Application.Transpose(err_nom_temp)
.Range(.Cells(1, 2), .Cells(UBound(err_bureau_temp), 2)) > Application.Transpose(err_bureau_temp)
End With

For x = 1 To UBound(donnees)
On Error Resume Next
err_bureau.Add donnees(x, 2), CStr(donnees(x, 2))
If Err <> 0 Then ko = ko + 1

On Error Resume Next
err_nom.Add donnees(x, 1), CStr(donnees(x, 1))
If Err <> 0 Then ko = ko + 1

If ko = 0 Then
f = f + 1
ReDim Preserve final_ok(1 To 2, 1 To f)
final_ok(1, f) = donnees(x, 1)
final_ok(2, f) = donnees(x, 2)
End If
ko = 0
Next

With Sheets("ok")
.Range(.Cells(1, 1), .Cells(UBound(final_ok, 2), 2)) > Application.Transpose(final_ok)
End With


On 31 mar, 18:12, JulieH
Je viens de voir ta réponse sur mon nouveau fil et je te remercie à
nouveau. J'ai essayé rapidement sans tout vérifier. Je vois un petit
problème car il repère bien les doubles sur les noms (colonne A) mais il
en repère trop sur la colonne B. Voir Cjoint :

http://cjoint.com/?dFsli1oDHs

Par ailleurs, comment faire pour récupérer ceux qui sont colorés en
rouge pour la suite des opérations : supprimer et copier dans une autre
feuille.

Julie




Rebonjours Julie
Pour cette nouvelle demande je te propose de ramener toutes les
données (les données nouvelles avec les actuelles) dans une feuille
(Feuil1) colonne A et B et d'analyser les doublons avec ce code
For Each c In Worksheets("Feuil1").Range("A2", "A" &
Range("A65535").End(xlUp).Row)
On Error Resume Next
Range(c, "A" & Range("A65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n1 = n1 + 1
c.Interior.ColorIndex = 3
End If
Next
For Each c In Worksheets("Feuil1").Range("B2", "B" &
Range("B65535").End(xlUp).Row)
On Error Resume Next
Range(c, "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n2 = n2 + 1
c.Interior.ColorIndex = 3
End If
Next
If n1 <> "" Then
MsgBox (n1 & " doublon(s) pour les Noms")
End If
If n2 <> "" Then
MsgBox (n2 & " doublon(s) pour les numéros")
End If
Les doublons pour les noms ainsique pour les numéros sont colorés en
rouge et un message pour chacun donne leur nombre
A toi ensuite de les traiter
Qu'en penses tu ????- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -







JulieH
Le #5427831
Bonsoir,

Mon message suivant n'est plus d'actualité car j'ai résolu le problème
en changeant XlPart par XlWhole.

En revanche, j'ai noté un autre problème car le doublon que je veux
garder est systématiquement le premier alors que la macro colorie le
premier.

Enfin je ne trouve pas le moyen de sélectionner les lignes dans
lesquelles il y a une cellule en couleur. Je l'ai déjà vue cette macro
mais je ne la retrouve pas.

Julie



Rebonjours Julie

Pour cette nouvelle demande je te propose de ramener toutes les
données (les données nouvelles avec les actuelles) dans une feuille
(Feuil1) colonne A et B et d'analyser les doublons avec ce code

For Each c In Worksheets("Feuil1").Range("A2", "A" &
Range("A65535").End(xlUp).Row)
On Error Resume Next
Range(c, "A" & Range("A65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n1 = n1 + 1
c.Interior.ColorIndex = 3
End If
Next
For Each c In Worksheets("Feuil1").Range("B2", "B" &
Range("B65535").End(xlUp).Row)
On Error Resume Next
Range(c, "B" & Range("B65535").End(xlUp).Row).Find(What:=c,
After:=c, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows,
SearchDirection:=xlNext, _
MatchCase:úlse, SearchFormat:úlse).Activate
If ActiveCell.Address <> c.Address Then
n2 = n2 + 1
c.Interior.ColorIndex = 3
End If
Next
If n1 <> "" Then
MsgBox (n1 & " doublon(s) pour les Noms")
End If
If n2 <> "" Then
MsgBox (n2 & " doublon(s) pour les numéros")
End If

Les doublons pour les noms ainsique pour les numéros sont colorés en
rouge et un message pour chacun donne leur nombre

A toi ensuite de les traiter

Qu'en penses tu ????


JB
Le #5427811
Avec MFC:

http://cjoint.com/?dFvbzOcq5S

JB
On 31 mar, 17:05, JulieH
Re-bonjour à toutes et tous,

        Deuxième problème du jour, évidemment simplifié.

        J'ai une base de données que je souhaite mettre à jour . les données à
remonter sont dans un autre fichier :
   - Structure de la base : en colonne A un nom d'élève, en B un n uméro
de bureau.
   - Structure du fichier à remonter : en A un nom d'élève, en B le
numéro de bureau.

        Je sais remonter le fichier à la fin de la base. Mais il me manque
plusieurs choses pour gérer les erreurs. En effet, il ne doit jamais y
avoir de doublons sur le nom de l'élève, ni sur le numéro de bureau (ni
à plus forte raison sur les 2 en même temps).
        En cas de doublons sur l'un ou l'autre de ces deux points, la macro
doit donc :
   - Remonter toutes les données cohérentes, mais rejeter les donn ées à
problème.
   - Signaler le problème.
   - Générer une feuille EXCEL avec les numéros des élèves à problème.

Merci pour vos idées

        Julie


JulieH
Le #5427771
Merci pour ton aide,

La solution VBA correspond bien à ce que je demande. Cependant comme je
l'ai écrit dans les messages complémentaires, je souhaite :
- Garder la première valeur.
- Toujours supprimer la seconde
- Noter dans le fichier temporaire les lignes entières où il y a un
doublon quelqu'il soit (correspondant toujours à la seconde valeur).

Julie

Avec MFC:

http://cjoint.com/?dFvbzOcq5S

JB
On 31 mar, 17:05, JulieH
Re-bonjour à toutes et tous,

Deuxième problème du jour, évidemment simplifié.

J'ai une base de données que je souhaite mettre à jour. les données à
remonter sont dans un autre fichier :
- Structure de la base : en colonne A un nom d'élève, en B un numéro
de bureau.
- Structure du fichier à remonter : en A un nom d'élève, en B le
numéro de bureau.

Je sais remonter le fichier à la fin de la base. Mais il me manque
plusieurs choses pour gérer les erreurs. En effet, il ne doit jamais y
avoir de doublons sur le nom de l'élève, ni sur le numéro de bureau (ni
à plus forte raison sur les 2 en même temps).
En cas de doublons sur l'un ou l'autre de ces deux points, la macro
doit donc :
- Remonter toutes les données cohérentes, mais rejeter les données à
problème.
- Signaler le problème.
- Générer une feuille EXCEL avec les numéros des élèves à problème.

Merci pour vos idées

Julie





JB
Le #5427731
http://cjoint.com/?dFwyrdXlb2

Sub essai()
Application.DisplayAlerts = False
On Error Resume Next
Sheets("temp").Delete
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "temp"
On Error GoTo 0
f = 1
Set champ1 = Sheets(f).Range("A1:A" & Sheets(f).
[A65000].End(xlUp).Row)
Set champ2 = Sheets(f).Range("B1:B" & Sheets(f).
[B65000].End(xlUp).Row)

For i = champ1.Rows.Count To 2 Step -1
If Application.CountIf(champ1, Sheets(f).Cells(i, 1)) > 1 Then
k = k + 1
Sheets("temp").Cells(k, 1).Resize(, 2).Value = Sheets(f).Cells(i,
1).Resize(, 2).Value
Sheets(f).Rows(i).Delete
End If
Next i
For i = champ2.Rows.Count To 2 Step -1
If Application.CountIf(champ2, Sheets(f).Cells(i, 2)) > 1 Then
k = k + 1
Sheets("temp").Cells(k, 1).Resize(, 2).Value = Sheets(f).Cells(i,
1).Resize(, 2).Value
Sheets(f).Rows(i).Delete
End If
Next i
End Sub


JB

On 31 mar, 21:20, JulieH
Merci pour ton aide,

        La solution VBA correspond bien à ce que je demande. Cep endant comme je
l'ai écrit dans les messages complémentaires, je souhaite :
        - Garder la première valeur.
        - Toujours supprimer la seconde
        - Noter dans le fichier temporaire les lignes entières o ù il y a un
doublon quelqu'il soit (correspondant toujours à la seconde valeur).

        Julie




Avec MFC:

http://cjoint.com/?dFvbzOcq5S

JB
On 31 mar, 17:05, JulieH
Re-bonjour à toutes et tous,

        Deuxième problème du jour, évidemment simplifié .

        J'ai une base de données que je souhaite mettre à j our. les données à
remonter sont dans un autre fichier :
   - Structure de la base : en colonne A un nom d'élève, en B u n numéro
de bureau.
   - Structure du fichier à remonter : en A un nom d'élève, e n B le
numéro de bureau.

        Je sais remonter le fichier à la fin de la base. Mais il me manque
plusieurs choses pour gérer les erreurs. En effet, il ne doit jamais y
avoir de doublons sur le nom de l'élève, ni sur le numéro de bure au (ni
à plus forte raison sur les 2 en même temps).
        En cas de doublons sur l'un ou l'autre de ces deux poin ts, la macro
doit donc :
   - Remonter toutes les données cohérentes, mais rejeter les d onnées à
problème.
   - Signaler le problème.
   - Générer une feuille EXCEL avec les numéros des élève s à problème.

Merci pour vos idées

        Julie- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -




JulieH
Le #5427611
Bonjour,

Je n'ai pas assez veillé hier soir pour voir ta solution. Elle
fonctionne parfaitement.

Bonne journée

Julie

http://cjoint.com/?dFwyrdXlb2

Sub essai()
Application.DisplayAlerts = False
On Error Resume Next
Sheets("temp").Delete
Sheets.Add after:=Sheets(Sheets.Count)
ActiveSheet.Name = "temp"
On Error GoTo 0
f = 1
Set champ1 = Sheets(f).Range("A1:A" & Sheets(f).
[A65000].End(xlUp).Row)
Set champ2 = Sheets(f).Range("B1:B" & Sheets(f).
[B65000].End(xlUp).Row)

For i = champ1.Rows.Count To 2 Step -1
If Application.CountIf(champ1, Sheets(f).Cells(i, 1)) > 1 Then
k = k + 1
Sheets("temp").Cells(k, 1).Resize(, 2).Value = Sheets(f).Cells(i,
1).Resize(, 2).Value
Sheets(f).Rows(i).Delete
End If
Next i
For i = champ2.Rows.Count To 2 Step -1
If Application.CountIf(champ2, Sheets(f).Cells(i, 2)) > 1 Then
k = k + 1
Sheets("temp").Cells(k, 1).Resize(, 2).Value = Sheets(f).Cells(i,
1).Resize(, 2).Value
Sheets(f).Rows(i).Delete
End If
Next i
End Sub


JB

On 31 mar, 21:20, JulieH
Merci pour ton aide,

La solution VBA correspond bien à ce que je demande. Cependant comme je
l'ai écrit dans les messages complémentaires, je souhaite :
- Garder la première valeur.
- Toujours supprimer la seconde
- Noter dans le fichier temporaire les lignes entières où il y a un
doublon quelqu'il soit (correspondant toujours à la seconde valeur).

Julie




Avec MFC:
http://cjoint.com/?dFvbzOcq5S
JB
On 31 mar, 17:05, JulieH
Re-bonjour à toutes et tous,
Deuxième problème du jour, évidemment simplifié.
J'ai une base de données que je souhaite mettre à jour. les données à
remonter sont dans un autre fichier :
- Structure de la base : en colonne A un nom d'élève, en B un numéro
de bureau.
- Structure du fichier à remonter : en A un nom d'élève, en B le
numéro de bureau.
Je sais remonter le fichier à la fin de la base. Mais il me manque
plusieurs choses pour gérer les erreurs. En effet, il ne doit jamais y
avoir de doublons sur le nom de l'élève, ni sur le numéro de bureau (ni
à plus forte raison sur les 2 en même temps).
En cas de doublons sur l'un ou l'autre de ces deux points, la macro
doit donc :
- Remonter toutes les données cohérentes, mais rejeter les données à
problème.
- Signaler le problème.
- Générer une feuille EXCEL avec les numéros des élèves à problème.
Merci pour vos idées
Julie- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -









francois.forcet
Le #5427601
On 31 mar, 21:20, JulieH
Merci pour ton aide,

        La solution VBA correspond bien à ce que je demande. Cep endant comme je
l'ai écrit dans les messages complémentaires, je souhaite :
        - Garder la première valeur.
        - Toujours supprimer la seconde
        - Noter dans le fichier temporaire les lignes entières o ù il y a un
doublon quelqu'il soit (correspondant toujours à la seconde valeur).

        Julie




Avec MFC:

http://cjoint.com/?dFvbzOcq5S

JB
On 31 mar, 17:05, JulieH
Re-bonjour à toutes et tous,

        Deuxième problème du jour, évidemment simplifié .

        J'ai une base de données que je souhaite mettre à j our. les données à
remonter sont dans un autre fichier :
   - Structure de la base : en colonne A un nom d'élève, en B u n numéro
de bureau.
   - Structure du fichier à remonter : en A un nom d'élève, e n B le
numéro de bureau.

        Je sais remonter le fichier à la fin de la base. Mais il me manque
plusieurs choses pour gérer les erreurs. En effet, il ne doit jamais y
avoir de doublons sur le nom de l'élève, ni sur le numéro de bure au (ni
à plus forte raison sur les 2 en même temps).
        En cas de doublons sur l'un ou l'autre de ces deux poin ts, la macro
doit donc :
   - Remonter toutes les données cohérentes, mais rejeter les d onnées à
problème.
   - Signaler le problème.
   - Générer une feuille EXCEL avec les numéros des élève s à problème.

Merci pour vos idées

        Julie- Masquer le texte des messages précédents -



- Afficher le texte des messages précédents -


Salut Julie

J'ai modifié la macro pour colorer les bons doublons et rajouter une
macro pour les rapporter dans une autre feuille et les supprimer de la
liste

Le code pour la suppression :

i = 1
Do While Range("A" & i).Row < Range("A65535").End(xlUp).Offset(1,
0).Row
If Range("A" & i).Interior.ColorIndex = 3 Or Range("B" &
i).Interior.ColorIndex = 3 Then
Range("A" & i, "B" & i).Copy
Sheets("Feuil2").Range("A65535").End(xlUp).Offset(1, 0)
Range("A" & i).EntireRow.Delete
i = i - 1
End If
i = i + 1
Loop

Sur ce lien ton document modifié ainsi

http://www.cijoint.fr/cjlink.php?file=cj200804/cij6umvsUh.xls.

Donne moi ton avis !!!!



Publicité
Poster une réponse
Anonyme