Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/10/2011, 19h33   #1
Membre actif
 
Eric
Inscription : février 2008
Messages : 439
Détails du profil
Informations personnelles :
Nom : Eric

Informations forums :
Inscription : février 2008
Messages : 439
Points : 156
Points : 156
Par défaut is not nothing

Bonjour,

Je ne maitrise pas bien les sélections de plage....

J'ai un souci avec "Nothing".

Dans mon classeur, j'ai 52 feuilles (=52 semaines). Dans chaque feuille, il y a une série de données (des noms de personnes, leur adresse, etc...). Je vais dans chaque feuille, si je ne trouve un nom, je le mets dans la feuille "Total". Si le nom existe déjà, je ne le mets pas dans la feuille "Total", et je continue sur chaque feuille et sur toutes les feuilles. C'est un code adapté d’un ancien post (merci gFZT82 ). Ci joint le code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
Sub Totalsemaine()
 
 
Dim DerligR1 As Long
Dim DerligR2 As Long
Dim MaPlage As Range
Dim DerniereLigne As Integer
Dim ajout As Integer
Dim nb As Integer
Dim j As Integer
 
 
nb = Worksheets.Count
 
For j = 2 To nb ' - 1
 
 ActiveWorkbook.Worksheets(j).Tab.ColorIndex = 3
 ActiveWorkbook.Worksheets(j).Select
 
ajout = 0
 
With Sheets("S " & j - 1)
    DerligR1 = .Range("b" & .Rows.Count).End(xlUp).Row
End With
 
With Sheets("Total")
    DerligR2 = .Range("a" & .Rows.Count).End(xlUp).Row
Set MaPlage = .Range(.Cells(1, 1), .Cells(DerligR2, 1))
End With
 
 
For i = 2 To DerligR1
    With MaPlage
    Set c = .Find(Sheets("S " & j - 1).Range("b" & i), LookIn:=xlValues, lookat:=xlWhole)
 
 
 
        If c Is Nothing Then
        ajout = ajout + 1
 
 
        'DerniereLigne = Sheets("Total").Range("a65536").End(xlUp).Row
        Sheets("Total").Cells(DerligR2 + ajout, 1) = Sheets("S " & j - 1).Cells(i, 2)
        Sheets("Total").Cells(DerligR2 + ajout, 2) = Sheets("S " & j - 1).Cells(i, 13)
        Sheets("Total").Cells(DerligR2 + ajout, 3) = Sheets("S " & j - 1).Cells(i, 30)
           ' With Sheets("S 1")
 
               ' .Range(.Cells(DerniereLigne + 1, 2), .Cells(DerniereLigne + 1, 2)).Copy Destination:=Sheets("Total").Cells(i, 1)
               '  .Range(.Cells(DerniereLigne + 1, 13), .Cells(DerniereLigne + 1, 13)).Copy Destination:=Sheets("Total").Cells(i, 2)
 
           ' End With
        End If
 
 
    End With
Next i
 
 
Next j
 
MsgBox ("Fini")
 
End Sub
En fait, je me suis aperçu que certains noms étaient présents en semaine 3 avec une adresse, mais qu'en semaine 40, leur adresse avait changée...donc, il n'y avait pas de mise à jour puisqu'avec mon code, le nom était "sauté".

Donc j'ai essayé de rajouter
Code :
1
2
3
         If c Is Not Nothing Then
            Sheets("Total").Cells(DerligR2, 3) = Sheets("S " & j - 1).Cells(i, 30)
        End If
dans ma boucle, histoire que si le nom est trouvé, on met la dernière adresse...

J'ai donc essayé avec ce code, il ne marche pas, j'ai essayé avec , marche pas..

Il y a certainement une instruction spécifique (mais je ne la connais pas.....)

Une idée, ?

Merci,

A+
ericdev67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 19h51   #2
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Une adaptation du code
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Sub TotalSemaine()
Dim DerligR1 As Long, DerligR2 As Long, i As Long
Dim j As Integer
Dim c As Range
Dim Sh As Worksheet
 
Application.ScreenUpdating = False
For j = 2 To Sheets.Count
    Worksheets(j).Tab.ColorIndex = 3
 
    Set Sh = Worksheets("S " & j - 1)
    DerligR1 = Sh.Range("B" & Sh.Rows.Count).End(xlUp).Row
 
    With Sheets("Total")
        DerligR2 = .Range("a" & .Rows.Count).End(xlUp).Row
 
        For i = 2 To DerligR1
            Set c = .Range("A:A").Find(Sh.Range("B" & i), LookIn:=xlValues, lookat:=xlWhole)
 
            If c Is Nothing Then
                DerligR2 = DerligR2 + 1
                .Range("A" & DerligR2) = Sh.Range("B" & i)
                .Range("B" & DerligR2) = Sh.Range("M" & i)
                .Range("C" & DerligR2) = Sh.Range("AD" & i)
            Else
                If .Range("B" & c.Row) <> Sh.Range("M" & i) Then .Range("B" & c.Row) = Sh.Range("M" & i)
                If .Range("C" & c.Row) <> Sh.Range("AD" & i) Then .Range("C" & c.Row) = Sh.Range("AD" & i)
                Set c = Nothing
            End If
 
        Next i
    End With
 
    Set Sh = Nothing
Next j
 
MsgBox "Traitement terminé"
End Sub
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/10/2011, 20h48   #3
Membre actif
 
Eric
Inscription : février 2008
Messages : 439
Détails du profil
Informations personnelles :
Nom : Eric

Informations forums :
Inscription : février 2008
Messages : 439
Points : 156
Points : 156
Merci mercatog,

C'est dans des codes comme ça que je vois qu'il me reste beaucoup à apprendre...., ton code est super génial , Merci !!!!

J'ai déjà rencontré des utilisations de code avec ce fameux "Sh"....tu n'aurai pas un tuto qui puisse m'éclairer sur l'utilisation de ce code ?????

Je ne comprends pas..... et j'aime comprendre ce qui se passe.....

Je ne cloture pas pour l'instant en attendant ta réponse...

Merci d'avance

A+
ericdev67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/10/2011, 20h57   #4
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Sh est une variable objet de type worksheet instanciée par
Code :
Set Sh=Worksheets("S " & j)
Pour ne pas à chaque fois travailler avec Worksheets("S " & j)... (Tu peux l'appeler comme tu veux Sh, X ou Y)
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/10/2011, 23h19   #5
Membre actif
 
Eric
Inscription : février 2008
Messages : 439
Détails du profil
Informations personnelles :
Nom : Eric

Informations forums :
Inscription : février 2008
Messages : 439
Points : 156
Points : 156
Génial mercatog,

Je pense avoir compris

Merci encore,

A+ pour de nouvelles aventures
ericdev67 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h42.


 
 
 
 
Partenaires

Hébergement Web