Compréhension code VBA

Bonjour à tous,

J'ai lu sur ce même forum la réponse à un de mes problèmes via un code VBA dont je joins le fichier également (mettre en ligne les ID contrats par rapport aux ID clients en colonne.
J'aurais pu me contenter d'appliquer la solution bêtement mais je me casse la tête à essayer de comprendre le code pas à pas:

Sub GO()
Dim J As Long
Dim I As Integer
Dim K As Long
Dim Indice As Long
Dim Tablo
Dim Nb As Integer

Dim J As Long
Dim I As Integer
Dim K As Long
Dim Indice As Long
Dim Tablo
Dim Nb As Integer

Application.ScreenUpdating = False
ReDim Tablo(1 To Range("A" & Rows.Count).End(xlUp).Row - 2, 1 To 2)
Tablo(1, 1) = Range("A2")
Tablo(1, 2) = Range("B2")
Nb = 1
For J = 3 To Range("A" & Rows.Count).End(xlUp).Row
For K = 1 To UBound(Tablo)
If Range("A" & J) = Tablo(K, 1) Then
For I = 1 To UBound(Tablo, 2)
If Tablo(K, I) = "" Then
Tablo(K, I) = Range("B" & J)
Exit For
End If
Next I
If I > UBound(Tablo, 2) Then
ReDim Preserve Tablo(1 To UBound(Tablo), 1 To UBound(Tablo, 2) + 1)
Tablo(K, UBound(Tablo, 2)) = Range("B" & J)
End If
Exit For
ElseIf Tablo(K, 1) = "" Then
Nb = Nb + 1
Tablo(K, 1) = Range("A" & J)
Tablo(K, 2) = Range("B" & J)
Exit For
End If
Next K
Next J
With Sheets("Résultat")
.Cells.ClearContents
.Range("A2").Resize(Nb, UBound(Tablo, 2)) = Tablo
.Range("A1") = "ID client"
.Range("B1") = "Contrat N°1"
.Range("B1").AutoFill .Range("B1").Resize(, UBound(Tablo, 2) - 1), xlFillSeries
.Select
Rows(1).Font.Bold = True
End With
End Sub

voila je bute déjà sur le ReDim Tablo(1 To Range("A" & Rows.Count).End(xlUp).Row - 2, (pourquoi -2)

Encore merci pour votre aide

Bonjour et

Déjà, quand tu colles un code ici utilise l'outil </> et colle le code dans la fenêtre qui s'ouvre.
Il reste formaté en vba avec les indentations et est beaucoup plus lisible.

Ensuite j'ai eu une erreur inédite pour moi en lançant ton code :

image

C'est dû au nom de ta Sub GO(). Il n'aime pas vraiment ce nom réservé, à changer.

Ta question maintenant :
Range("A" & Rows.Count).End(xlUp).Row cherche la dernière ligne utilisée en A, en comptant le nombre de saisies.
Il ne faut donc pas qu'il y ait de cellules vides qui fausserait le compte.
Comme c'est pour n'avoir que les données, il faut en soustraire les ligne de titre.
Tu n'en as qu'une, il faut donc faire -1 et non -2

Sûrement que le fichier d'origine de ce code devait avoir 2 lignes de titres.
Du coup tu dois aussi revoir le For J = 3 qui ne semble plus adapté.

eric

PS : pour progresser tu devrais prendre un peu de temps pour te trouver un site te présentant le débogage.
Tu dois savoir poser des Breaks et des STOP, faire en pas à pas avec F8, lire la valeur d'une variable ou d'une expression en la sélectionnant et mettant le curseur dessus, et/ou utiliser la fenêtre Espions (menu Affichage) en faisant glisser ta sélection dedans.
Tu as aussi la 'Fenêtre Variables locales' qui te liste toutes celles en cours

Bonjour à tous les 2,

Merci eriiic pour les précisions.

Est-ce que le -1 est dû au fait que la première ligne du tableau Tablo est déjà occupée par les valeurs A1 et B1 et donc pas besoin de charger avec en plus des données de sa feuille ? Par contre je ne comprend pas le J=3, 2 j'aurai compris mais là je sèche ..

Merci !

bonjour

edit : en retard ...

ReDim Tablo(1 To Range("A" & Rows.Count).End(xlUp).Row - 2, (pourquoi -2)

Cette instruction va dimensionner un tableau VBA pour recevoir une copie des données qui se trouvent en colonne A et B.

Range("A" & Rows.Count).end(xlup).row indique le numéro de la dernière ligne utilisée

Tes données commencent en ligne 3 (je suppose) donc le nombre de lignes contenant tes données est donné par la formule dernière ligne utilisée - (première ligne utilisée par tes données -1)

Hep là, camarade !

Le fichier que tu nous proposes maintenant n'est pas le même. Dans le premier les titres occupaient les lignes 1 et 2. Ceci explique le -2.

Dans ton nouveau fichier il faut utiliser -1

Désolé H2SO4 on s'est tamponné

Tiens, je te propose une soluce à partir d'un tableau que j'avais mis à la poubelle

8proposition6.xlsm (28.16 Ko)

Ah ben y'a eu du monde...
Pendant ce temps je complétais mon post après avoir lu la suite du code

Merci à tous pour vos réponses !

J'avais oublié de supprimer la feuille "resultat".

8proposition6.xlsm (26.61 Ko)
Rechercher des sujets similaires à "comprehension code vba"