p'tit bout de code

Maëlle

XLDnaute Nouveau
Salut à tous,
j'ai chopé dans les archives ce ptit bout de code

Code:
Private Sub CommandButton5_Click()

Dim j, K As Integer

Dim firstAddress, C
j = 1
K = 1
Do
j = j + 1
Loop Until Application.CountA(Cells(j, 1).EntireRow) = 0
If Recherche1.Value = '' Then Exit Sub

Application.ScreenUpdating = False

Set C = Feuil2.Columns('B:B').Find(What:=(Recherche1.Value), LookAt:=xlWhole)
    If Not C Is Nothing Then
        firstAddress = C.Address
        Do
        K = K + 1
        C.EntireRow.Copy Feuil1.Range('A' & K, 'G' & K)
        j = j + 1
        Set C = Feuil2.Columns('B:B').FindNext(C)
        Loop While Not C Is Nothing And C.Address <> firstAddress
    End If
Feuil1.Range('A1').Activate
Application.ScreenUpdating = True
End Sub
il fonctionne bien mais si quelqu'un pouvait m'expliquer un peu son fonctionnement ? Ca serait vraiment sympas
merci d'avance
 

Hellboy

XLDnaute Accro
Bonjour Ma&euml;lle

Cette macro s'effectue lorsque l'on click sur un bouton qui s'appel CommandButton5

Private Sub CommandButton5_Click()

Dim j, K As Integer ' Création de variable de type INteger(c-a-d associé a des valeur comprisent entre -32 768 et 32 767

Dim firstAddress, C ' Les variables déclarées avec le type de données Variant peuvent contenir une chaîne, une date, une heure, une valeur booléenne ou numérique et peuvent convertir automatiquement les valeurs qu'ils contiennent. Les valeurs numériques de type Variant nécessitent 16 octets de mémoire (caractéristique à prendre en compte dans les grandes procédures ou les modules complexes) et offrent un accès plus lent que les variables déclarées explicitement avec un autre type. Le type de données Variant est rarement employé pour une constante. Les valeurs de chaîne de type Variant nécessitent 22 octets de mémoire.

j = 1
K = 1
Do ' boucle avec un conteur visant a trouver la première ligne qui contien rien
j = j + 1
Loop Until Application.CountA(Cells(j, 1).EntireRow) = 0
If Recherche1.Value = '' Then Exit Sub ' dans le contexte cette ligne ne sert à rien parce que Recherche1 n'est pas définit et n'as pas de référence. En plus, le reste du code ne s'effectuera pas puisque Recherche1 = ''. Il y aura donc sortie immédiate de la macro.

Application.ScreenUpdating = False

Set C = Feuil2.Columns('B:B').Find(What:=(Recherche1.Value), LookAt:=xlWhole) ' On attribue ici une recherche a un objet qu'on appel C. En faisant cette attribution, C a déjà fait une première recherche de 'Recherche1.Value' (qui contien rien)sur la feuille2 dans la colonne B
If Not C Is Nothing Then ' Ici si C = rien ne va pas continuer dans le if
firstAddress = C.Address ' Si C contien quelque chose, attribue l'adresse (ex: range(b2))
Do
K = K + 1
C.EntireRow.Copy Feuil1.Range('A' & K, 'G' & K)
j = j + 1
Set C = Feuil2.Columns('B:B').FindNext(C)
Loop While Not C Is Nothing And C.Address <> firstAddress
End If
Feuil1.Range('A1').Activate
Application.ScreenUpdating = True
End Sub


Philippe
 

Maëlle

XLDnaute Nouveau
Salut philippe,
je te remercie de m'avoir éclairer
Loop Until Application.CountA(Cells(j, 1).EntireRow) = 0 ne sert a rien alors ? (Je n'ai rien trouvé dans l'aide sur CountA)
Pourquoi chercher la premiere ligne qui ne contient rien ?
@+
 

Hellboy

XLDnaute Accro
Ma&euml;lle écrit:
Salut philippe,
je te remercie de m'avoir éclairer
Loop Until Application.CountA(Cells(j, 1).EntireRow) = 0 ne sert a rien alors ? (Je n'ai rien trouvé dans l'aide sur CountA)
Pourquoi chercher la premiere ligne qui ne contient rien ?
@+

Bonjour Ma&euml;lle

De un, bienvenu de deux, je n'ai pas décris jusqu'au bout parce que je ne sais pas si tu en avais besoin du reste...

Pour répondre à CountA, c'est vrai qu'il n'y a pas vraiment d'aide directe sur cette fonction. En fait je ne suis pas sure que ça fonctionne comme ça. Pour t'aider voici comment on l'utilise en VBA: application.WorksheetFunction.CountA. Cette fonction a pour but de faire la meme chose que =NBVAL() dans Excel.

Pour répondre à ta deuxième question, il faudrait peut être demander à l'auteur ! :whistle: :) Il y tellement de façon pour chercher la première instance de ligne vide, et beaucoup plus directe que ça. Mais en autre, on peut vouloir connître la dernières ligne qui contient de l'information dans une feuille. &Ccedil;a peut servir pour connaître la grosseur de la plage de donnée.

Si tu as des besoins particulier sur quelque chose que tu voudrait acomplir pour toi, décrit le en détail et le forum se fera un plaisir de t'aider.

Philippe
 

Statistiques des forums

Discussions
312 610
Messages
2 090 204
Membres
104 451
dernier inscrit
scp9990