Qu'est ce que ca vaut?

xoloth

XLDnaute Nouveau
Bonjour,

J'ai fait une maccro pour un besoin specifique pour le boulot. Ca m'a pris quelque temps car j'ai pas mal tatonner et je suis plutot content d'avoir reussit ce que je voulais faire. Mais etant plutot beginner j'aimerais avoir l'avis de specialiste si on aurait pu ecrire cette maccro de maniere un peu plus orthodoxe. Ou si ce code est correct.

La macro fait la chose suivante :

Dans la colonne de gauche j'ai une liste de dossier extracter d'une query sur AS400. Cette colonne presente pour chaque dossier un type de conteneur (transport maritime) qui lui est attribue. Si un dossier contient plus d'un conteneur, le dossier est doublonner vers le bas et donc apparait 2 fois ou plus avec son conteneur correspondant.
A droite, j'ai les memes dossiers mais unifies, sans doublons.

La macro consiste a attribu le conteneur de la colonne de gauche sur le dossier equivalent de la colonne de droite. Si il y a plus d'un conteneur sur un dossier particulier, alors les types de conteneurs doivent etre copier sur la meme ligne de son dossier mais en decalant d'une cellule a chaque fois et ce afin d'avoir pour chaque dossier la liste complete de conteneur correspondant.

J'espere que c'est claire.
Voila je joins le fichier. Merci de vos avis.
 

Pièces jointes

  • conteneur.zip
    41.6 KB · Affichages: 44
  • conteneur.zip
    41.6 KB · Affichages: 28
  • conteneur.zip
    41.6 KB · Affichages: 33

xoloth

XLDnaute Nouveau
Re : Qu'est ce que ca vaut?

Salut Bebere,

Merci c'est vachement plus rapide que ce que j'avais pondu... :eek:

Soit dit en passant, ce qui est bizarre dans ton code, c'est que quand je lance la macro automatiquement, ca fonctionne nickel et quand je fais pas a pas, ca 'merdouille' ???

Enfin bon, pas grave.


Mais j'aurais besoin que tu me fournisses quelques explications sur ce code qui est parfait pour progresser si ca te derange pas trop??


1/ Variant (item) : quel est l'utilisation de ce type de variable ?

2/ Col as New collection : pareil : quel est son utilite?

3/ LastCol As Byte : pareil a quoi sert ce type de variable?


4/ Le code ci dessous a pour fonction 'efface' mais peut m'expliquer la synthaxe de la fonctions Lastco = .cells.find(what Difficilement comprehensible de prime abord. Quel est son resultat?

Code:
With Sheets("sheet1")
'efface
   LastCol = .Cells.Find(What:="*", After:=.Range("A1"), LookIn:=xlValues, LookAt:= _
        xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
 .Range(.Cells(2, "P"), .Cells(.Range("P65536").End(xlUp).Row, LastCol)).ClearContents 'list account for a country
Set A = .Range("G2:G" & .Range("G65536").End(xlUp).Row) 'list account from table MASCONPF - query AEILOG in ECCLXG
End With


5/ Je comprends pas l'utilite du bloc ci dessous car je ne connais pas l'argument chaine. A quoi sert il? :

Code:
For Each cell In A
On Error Resume Next
 'une collection c'est sans doublon,il faut un argument chaîne(string:cstr)
Col.Add cell, CStr(cell)   [I]<-- comprends pas[/I]
On Error GoTo 0
Next cell

6/ Je suppose que le bloc ci dessous sert a re-ecrire la liste sans doublon mais je vois pas trop comment il s'y prends...

Code:
i = 1
With Sheets("sheet1")
For Each Item In Col
i = i + 1
.Range("P" & i) = Item
Next Item
Set A = .Range("G2:G" & .Range("G65536").End(xlUp).Row)
Set E = .Range("P2:P" & .Range("P65536").End(xlUp).Row)
End With


7/ Bloc ci-dessous :

Code:
 For i = 1 To E.Rows.Count

    Set c = .Range("G2:G" & .Range("G65536").End(xlUp).Row).Find(E(i), LookIn:=xlValues)
    If Not c Is Nothing Then
        firstAddress = c.Address
        j = c.Column + 10
        Do
            .Cells(i + 1, j) = c.Offset(0, 1)
            Set c = .Range("G2:G" & .Range("G65536").End(xlUp).Row).FindNext(c)
            j = j + 1
        Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
    Next i
End With

For i = 1 To E.Rows.Count <-- ca sert a quoi?

Set c = .Range("G2:G" & .Range("G65536").End(xlUp).Row).Find(E(i), LookIn:=xlValues) <-- quel est la signification de la partie .Finf(E(i)....

firstaddress : c'est une variable? Une fonction? Un nom?


Farnchement ce dernier bloc est assez complique et je ne comprensd pas grand chose :confused:

Faudrait une explication ligne par ligne...

Notamment le bloc :

Code:
 Do
            .Cells(i + 1, j) = c.Offset(0, 1)
            Set c = .Range("G2:G" & .Range("G65536").End(xlUp).Row).FindNext(c)
            j = j + 1
        Loop While Not c Is Nothing And c.Address <> firstAddress

qui m'a l'air tres interessant mais dont je comrpends pas grand chose. Quel est la fonction Findnext... ?


8/ Enfin ma derniere question :eek: est la suivante:

A quoi servent les instructions :
Application.ScreenUpdating = False au debut
Application.ScreenUpdating = True a la fin


Voila Bebere... tu auras compris que ce qui m'intressse c'est de comprendre ton code afin de progresser. Donc voila, si tu as la patience de me donner quelques explications, je t'en remercie a l'avance. ;)

Xo
 

Spitnolan08

XLDnaute Barbatruc
Re : Qu'est ce que ca vaut?

Bonsoir,

En attendant que Bebere t'explique tout ça..., tu peux essayer de comprendre avec l'aide de Microsoft : en sélectionnant par exemple le mot Find puis en tapant F1 : tu verras c'est magique! Enfin presque... car pas toujours abordable du 1er coup;)

Mais dans tous les cas ça te servira.

Cordialement

Edit : Salut Bebere:)
 
Dernière édition:

Discussions similaires