Au secours

Nulette en Excel

XLDnaute Nouveau
:mad: Hello contrarié... Quelqu'un peut-il m'aider à résoudre le probléme suivant:
- Je dispose d'une base compléte de noms et prénoms dans un onglet (colonne A et B), lesquels ont un code alphanumérique (COLONNE c).
D'un autre côté j'ai une quantité de feuilles (onglets) Excel qui ont les noms et prénoms, et a qui je dois attribuer le code ! Pouvez vous m'aider à automatiser la chose.
Par ailleurs comment appliquer la fonction supprespace à tous le dossier d'un coup d'un seul ?
1000 mercis d'avance à ceux qui liront et 1001 bises à ceux qui m'aideront...
Nulette....
PS : ne me demandez pas de joindre le fichier, il dépasse les 50 ko et impossible de le réduire !!! GRRRRR !!!!:confused:
 

pierrejean

XLDnaute Barbatruc
Re : Au secours

re

pour supprimer les espaces devant et derriere les noms prenoms et code nationalité:

Code:
Sub supprespaces()
Dim colP As Integer
Dim colN As Integer
Dim colNat As Integer
For n = 1 To Sheets.Count
If Sheets(n).Name <> "Athlètes" Then
 For x = 1 To Sheets(n).Range("IV1").End(xlToLeft).Column
  If Sheets(n).Cells(1, x) = "Prénom" Then colP = x
  If Sheets(n).Cells(1, x) = "Nom" Then colN = x
  If Sheets(n).Cells(1, x) = "Code nationalité" Then colNat = x
 Next x
For m = 2 To Sheets(n).Range("A65536").End(xlUp).Row
 On Error Resume Next
  Sheets(n).Cells(m, colP) = Trim(Sheets(n).Cells(m, colP))
  Sheets(n).Cells(m, colN) = Trim(Sheets(n).Cells(m, colN))
  Sheets(n).Cells(m, colNat) = Trim(Sheets(n).Cells(m, colNat))
 On Error GoTo 0
Next m
End If
Next n
End Sub

Attention ne sois pas trop pressée cette macro ,curieusement , semble plus longue que la precedente
 
C

Compte Supprimé 979

Guest
Re : Au secours

Salut Pierre-Jean,

Ce que tu as fait en macro est vraiment top, ce que veux en plus "Nulette en Excel" c'est supprimer les espaces avant et après mais dans chaque feuille

Donc, Nulette voilà le lien vers ton fichier original avec 2 boutons qui lance : Ma macro ou celle de PierreJean modifiée (supprime les espaces avant et après dans les feuilles)

Avec en plus un message dans la barre de status qui t'indique ou en est la macro, car c'est loooooonnnnnggggg ....

http://cjoint.com/?fjowi4EB5E

La macro de PierreJean à l'air plus rapide ;)

A+
 

Nulette en Excel

XLDnaute Nouveau
Re : Au secours

Merci Pierre Jean de ta vélocité et merci aussi à toi Bruno...
Vos deux macros marchent Impec... et effectivement le code de Pierre Jean m'apparait plus "élégant"...
Mais je soumets à votre sagacité le point suivant :
Avec la Macro de Pierre Jean, 3785 noms sont générés aprés import et dedoublonnage, et avec la Macro de Bruno 3389 noms !!!!! Suspect isn't it...

Pour faire tourner les macros et répondre à Pierre Jean c'est en fait en gros ce que faisais....

Pouvez vous m'expliquer comment intégrer l'import de la date (colonne A dans les courses) en corrolaire des noms prénoms et nationalité. J'aimerais que vous me mettiez sur la piste et que je corrige moi-même une des macros afin de devenir un peu moins bête...
Merci encore, à tous.
PS : Pierre Jean t'as une magnifique moustache !!!!
 
Dernière édition:

pierrejean

XLDnaute Barbatruc
Re : Au secours

Merci a Bruno pour son appreciation de la macro
Merci a Nulette pour son appreciation sur ma moustache (les pointes s'en relevent de fierté)

pour la date voici la macro assaisonnée de commentaires

Code:
Sub test()
'declaration variables correspondantes aux N° de colonnes
Dim colP As Integer
Dim colN As Integer
Dim colNat As Integer
Dim colAn As Integer
'declaration de la collection
'utilisée car elle n'accepte pas de doublons
Dim athletes As Collection
Set athletes = New Collection
'parcours de toutes les feuilles a l'exception de la feuille Athletes
For n = 1 To Sheets.Count
If Sheets(n).Name <> "Athlètes" Then
'parcours de la premier ligne de la feuille pour definir
'le N° des colonnes
 For x = 1 To Sheets(n).Range("IV1").End(xlToLeft).Column
  If Sheets(n).Cells(1, x) = "Prénom" Then colP = x
  If Sheets(n).Cells(1, x) = "Nom" Then colN = x
  If Sheets(n).Cells(1, x) = "Code nationalité" Then colNat = x
  If Sheets(n).Cells(1, x) = "Année course" Then colAn = x
 Next x
'parcours de toutes les lignes de la feuille
'jusqu'a la derniere remplie en colonne A
For m = 2 To Sheets(n).Range("A65536").End(xlUp).Row
'mise en collection des contenus de cellules interessantes séparées par "_"
'les on error sont traditionnels pour remplir la collection sans doublon
  On Error Resume Next
  'nota (la fonction Trim supprime les espaces)
    athletes.Add Sheets(n).Cells(m, colAn) & "_" & Trim(Sheets(n).Cells(m, colP)) & "_" & Trim(Sheets(n).Cells(m, colN)) & "_" & Trim(Sheets(n).Cells(m, colNat)), CStr(Trim(Sheets(n).Cells(m, colP)) & "_" & Trim(Sheets(n).Cells(m, colN)) & "_" & Trim(Sheets(n).Cells(m, colNat)))
  On Error GoTo 0
'ligne suivante
Next m
End If
'feuille suivante
Next n
'exploitation de la collection
For n = 1 To athletes.Count
'creation d'un tableau en 'explosant' le contenu de la ligne de la collection
 tableau = Split(athletes(n), "_")
'ecriture dans la feuille athlete
 Sheets("Athlètes").Range("A" & n + 1) = tableau(0)
 Sheets("Athlètes").Range("B" & n + 1) = tableau(1)
 Sheets("Athlètes").Range("C" & n + 1) = tableau(2)
 Sheets("Athlètes").Range("D" & n + 1) = tableau(3)
Next n
End Sub

en ce qui concerne les resultats je suis pour l'instant perplexe d'autant que je n'ais pas encore etudié la version de Bruno (qui m'apportera surement quelque chose comme le font toutes les macros que j'etudie sur ce forum)
 
C

Compte Supprimé 979

Guest
Re : Au secours

Je viens de trouver la différence entre la liste de PierreJean et la mienne :D

Dans la liste de pierre jean, est prise en compte la nationalité, d'ou des "doublons" par rapport à la nationalité :rolleyes:

Exemple : Macro PierreJean
Igor ABAKOUMOV BEL
Igor ABAKOUMOV
...
Jean AERTS BEL
Jean AERTS FRA

La mienne :
Igor ABAKOUMOV BEL
...
Jean AERTS BEL (car première ligne trouvée)

Après il faut voir ce que tu veux !?

Par contre il y a d'autres soucis mais impossible à résoudre, les erreurs de frappe :
Jan ADRIAENSENS BEL
Jan ADRIAENSSENS BEL
Ugo AGOSTINI ITA
Ugo AGOSTONI ITA

Sinon au point de vu délai d'éxécution, la mienne dure 9 secondes de plus :( (zut alors)
Testé sur un Dual Core 3Ghz

Voilà
 
Dernière modification par un modérateur:

pierrejean

XLDnaute Barbatruc
Re : Au secours

bonsoir a tous

j'arrivais a la même conclusion

les collections sont intraitables

alors si Jean AERTS est BELge c'est Bruno qui l'emporte
s'il est FRAnçais c'est moi

il est certain ma pauvre Nulette que je te donnes plus de corrections a faire mais je me console en me disant que le ou les vrais coupables sont ceux qui ont fait la saisie

Poignée de main à Bruno
Bises a Nulette
 

Nulette en Excel

XLDnaute Nouveau
Re : Au secours

Hello tous et Hello Pierre Jean et Bruno
Juste un petit mot pour vous remercier très chaleureusement (certes un peu tardivement, sorry mais le boulot!!!). Les macros marchent super et je suis en train de finaliser le nettoyage a la mano (c'est pire que la lessive !). Je voudrais pas abuser, mais en préambule, j'avais demandé comment, une fois la base propre et une fois les codes athlétes générés (5 lettres suivies de chiffres) dans l'onglet athlètes, comment je peux les affecter par macro à tous les noms et prénoms similaires qui se trouvent dans les onglets courses.... Voili, voilo... Plein de bise de la région parisienne...
Nulette.
 

pierrejean

XLDnaute Barbatruc
Re : Au secours

bonjour chere Nulette

est-il indicret de savoir comment les codes athletes sont générés dans la feuille Athletes

en effet comme je m'efforce de toujours tester ce que je propose , autant travailler sur le definitif
 

pierrejean

XLDnaute Barbatruc
Re : Au secours

re

voila un code pour affecter un code Athlete pourvu qu'il soit renseigné en colonne E de la page Athlète

notes:
1) la macro a révélé 2 hics dans la page Tirreno - Adriatico
a) decalage des colonnes (il convient de supprimer la colonne A qui ne comprte rien d'interessant me semble-t-il)
b) la colonne Code de pays devrait s'appeler Code de nationalité
(cela a pu avoir une incidence sur des doubons supplementaires )

2) la macro est assez longue (10 minutes chez moi avec pc double core 1,6 Ghz)

Code:
Sub affectation()
Dim plage As Range
For x = 2 To Sheets("Athlètes").Range("A65536").End(xlUp).Row
For n = 1 To Sheets.Count
If Sheets(n).Name <> "Athlètes" Then
  Set plage = Sheets(n).Range("E2:E" & Sheets(n).Range("E65536").End(xlUp).Row)
  With plage
    Set c = .Find(Sheets("Athlètes").Range("C" & x), Lookat:=xlWhole)
    If Not c Is Nothing Then
        firstAddress = c.Address
        Do      
       Application.StatusBar = x & " Mise à jour Athlète:" & Sheets("Athlètes").Range("C" & x)
       On Error Resume Next
          If c.Offset(0, -1).Value & c.Value & c.Offset(0, 1) = Sheets("Athlètes").Range("B" & x) & Sheets("Athlètes").Range("C" & x) & Sheets("Athlètes").Range("D" & x) Then
            c.Offset(0, -2) = Sheets("Athlètes").Range("E" & x)
          End If
       On Error GoTo 0
          Set c = .FindNext(c)
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
End With
End If
Next n
Next x
Application.StatusBar = ""
MsgBox (Timer - debut)
End Sub

Ps: serais absent tout ce WE
 

Discussions similaires

Réponses
7
Affichages
620

Statistiques des forums

Discussions
312 890
Messages
2 093 349
Membres
105 696
dernier inscrit
FrancisR