Déclaration variables pour un contrôle Active X

Bonjour

Grâce à l'aide de bernard22 ce petit code marche pour un bouton du formulaire que je met le code dans un module ou dans thisworkbook

Par contre si je veux mettre un bouton ActiveX le code ne marche plus c'est à dire qu'il me dit que les variable ne sont pas déclarer

Sub CBMasquerLignes()

 Derl = Range("I" & Rows.Count).End(xlUp).Row
    For i = 5 To Derl
         Set c = Range("i" & i)
         contenu = Range("i" & i).Value
       If ((Not (c.MergeCells)) And (IsEmpty(contenu))) Then
                     Rows(i).EntireRow.Hidden = True

       End If
     Next i

End Sub

donc comment avoir le code pour un bouton ActiveX qui déclarer mes variables sachant si je ne met pas Option Explicite le code marche mais je souhaite avoir Option explicite qui m'oblige de déclarer les variable

Merci pour votre aide

Hello, voilà ce qui suffit de mettre dans ton code:

Dim i as Integer, Derl as Integer, c as Range
Dim contenu as Variant

ce qui donnera

Sub CBMasquerLignes()
Dim i as Integer, Derl as Integer, c as Range
Dim contenu as Variant
 Derl = Range("I" & Rows.Count).End(xlUp).Row
    For i = 5 To Derl
         Set c = Range("i" & i)
         contenu = Range("i" & i).Value
       If ((Not (c.MergeCells)) And (IsEmpty(contenu))) Then
                     Rows(i).EntireRow.Hidden = True

       End If
     Next i

End Sub

Merci d3d9x encore une fois mais avant que tu me poster ta solution j'ai trouve en mettant cela en débout du code de ma feuil juste après option explicite ceci

option explicite

Dim Derl

Dim c

Dim contenu

Dim i As Integer

Donc qu'elle est la différence entre déclaration dans private sub et à l’extérieur ?

Puis comment je puisse adapter ce code afin de demander pour quelle feuille vous vouliez appliquer ceci

Exemple : quand je clique sur bouton on me demande veuillez mettre l'année (nom de feuille) puis le code s’exécuter ensuite. ceci pour ne pas mettre le bouton sur chaque feuille mais juste sur une feuille ACCUEIL

C'est "dangereux" de déclarer tes variables hors procédure et fonction car cela les rend globales.

En gros si tu les mets à l'intérieur d'une procédure ou fonction (qu'elle soit public ou private), tu les rends locales. Lorsque la fonction ou la procédure est terminée, ces variables n'existent plus et n'ont plus de valeur.

Lorsque tu les déclare en dehors d'une procédure et d'une fonction (en le mettant tout en haut de ton code), tu rends tes variables globales pour ton module, voire pour tout ton projet si tu les déclare public. Elles ne "communes" aux différentes procédures et fonctions.

Je te laisse faire tourner le code suivant et comprendre à quel point c'est critique:

Vu comment le code est écrit, l'idée initiale est de faire appel 5 fois à la procédure 2. Exécute le code en pas à pas et tu comprendras ce qui se passe.

Dim i As Integer

Sub procedure1()
Dim nbFois As Integer
For i = 1 To 5
    Debug.Print "Appel n°" & i & " de la procédure procedure2"
    nbFois = nbFois + 1
    procedure2
Next i
Debug.Print "Fin de la procédure 1, la procédure 2 a été appelée " & nbFois & " fois"
End Sub

Sub procedure2()
For i = 1 To 5
    Debug.Print i
Next i
End Sub

Merci encore une fois et oui je vient de comprendre avec ton exemple comment c'est critique et dangereux

PS : Le code marche impec quand je le met sur la feuille en question, mon future projet sera de le mettre sur une feuille uniquement puis demande sur quelle feuille on veux appliquer ce code.

Mais ce sera un autre sujet

ça c'est relativement simple ^^

Dim feuilleTravail as Worksheet
Set feuilleTravail = ActiveWorkbook.Sheets("nom de la feuille")

Où "nom de la feuille" peut être stocké dans une variable de type String.

Avant les Range et Cells, il suffira de préciser feuilleTravail

ex:

feuilleTravail.Range("A1")

Bonne continuation

d3d9x a écrit :

ça c'est relativement simple ^^

Dim feuilleTravail as Worksheet
Set feuilleTravail = ActiveWorkbook.Sheets("nom de la feuille")

Où "nom de la feuille" peut être stocké dans une variable de type String.

Avant les Range et Cells, il suffira de préciser feuilleTravail

ex:

feuilleTravail.Range("A1")

Bonne continuation

Oui simple pour quelqu'un qui s'y connait mais pour quelqu'un qui apprend c'est du Mont Blanc

Bref mon projet sera d'avoir un inputbox où on demande : Sur qu'elle année(nom de la feuille) vous veuillez appliquer, puis si on met 2019 alors c'est sur la feuille 2019 que ce sera appliquer et pas sur les autres

Mais tu m'a donnée la piste à suivre , merci

Rechercher des sujets similaires à "declaration variables controle active"