Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

p'tit bout de code

  • Initiateur de la discussion Initiateur de la discussion Maëlle
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

M

Maëlle

Guest
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
 
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
 
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 ?
@+
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
5
Affichages
899
  • Question Question
XL 2021 VBA excel
Réponses
4
Affichages
447
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…