[RESOLU] VBA - Erreur 1004 - définition du RANGE (fonction perso)

leakim

XLDnaute Occasionnel
Bonjour,
Avec le concours de jpb388 sur le fil https://www.excel-downloads.com/threads/resolu-msgbox-dans-une-boucle-selon-countif.20000471/, j'ai réussi à définir la plage de recherche.
Hors aujourd'hui, j'aimerai agrandir cette plage et j'ai le message "d'erreur 1004 définition de range"
Jpb38 m'a proposé une fonction perso qui fonctionne bien, sauf que j'arrive à la limite de cellule au delà de 200 colonnes... J'aurai besoin d'aller jusqu'à 262 colonnes.
Je pense qu'il faut modifier la fonction perso plutôt que de modifier le code qui utilise cette fonction?
Comment adapter la fonction perso pour ne plus être limité en nombre de cellule ?


Merci à vous,
Leakim

EDIT: J'ai retiré le code depuis l'envoi du fichier #5
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

Bonjour.

Vous ne semblez pas connaître l'opérateur Mod on dirait. Il donne le reste de la division du terme avant par celui après.
VB:
Private Function PremiereColonne%(Cel As Range)
PremiereColonne = (Cel.Column - 3) Mod 10 + 3
End Function
(pour renvoyer la même chose que votre fonction, ce qui parait curieux, surtout en voyant la PremièreLigne. j'aurais mieux compris (Cel.Column - 3) \ 10 + 3. L'opérateur \ effectue une division entière)
 
Dernière édition:

leakim

XLDnaute Occasionnel
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

Bonjour, Merci Dranreb pour votre expertise. J'avoue que je m'en suis remis à jpb38 et que je n’avais pas prévue d'agrandir le fichier et sa réponse convenait exactement à ma demande initiale.
Il s'avère que ma demande change donc le code aussi (j'en suis pas surpris).
J'ai remis votre code dans mon fichier et il est tout à fait opérant. Il subsiste toujours un bug dans la fonction plage lorsque je dépasse 200 colonnes.
Comment adapter la fonction plage ?

Leakim
 

Dranreb

XLDnaute Barbatruc
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

En essayant de rendre la plage plutôt que son adresse, ça irait mieux ?
VB:
Private Function Plage(ByVal Cel As Range) As Range
Dim Lg&, Col&, N&
Lg = PremiereLigne(Cel)
Col = PremiereColonne(Cel)
Set Plage = Range(Cells(Lg, Col), Cells(Lg + 17, Col))
For N = 10 To 250 Step 10
   Set Plage = Application.Union(Plage, Range(Cells(Lg, Col + N), Cells(Lg + 15, Col + N)))
   Next N
End Function
 

leakim

XLDnaute Occasionnel
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

Re, Merci Dranreb pour votre accompagnement.
Comme préconisé dans votre signature je joins le fichier.
L'idée c'est que lorsque l'on clique sur une cellule un userform s'ouvre et on a le choix de sélectionner les participants. Le code qui sollicite la fonction plage permet de tester dans la plage les doublons. Par exemple le test se fait sur tous les lundis de chaque atelier proposé.Cela fonctionne très bien avec le code précédent jusqu'à 180 colonnes avec le votre cela ne fonctionne plus, mais les lectures que j'ai faites indique bien un test en boucle comme dans votre code ???
Le bug n'est plus dans la fonction maintenant mais dans le code lorsqu'il y a "Set pl = Range(Plage(ActiveCell))" peut-être faut-il indiquer la feuille?

Merci encore,

Leakim

EDIT: A l'issu de la résolution j'ai retiré le fichier (j'avais laissé des noms...)
 
Dernière édition:

Dranreb

XLDnaute Barbatruc
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

Non, vous devriez maintenant pouvoir faire simplement Set pl = Plage(ActiveCell) puisque lorsqu'elle est utilisée, la fonction forme désormais directement une expression Range et non plus String.
 

leakim

XLDnaute Occasionnel
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

Re,
Ok pour la déclaration des variables mais là j'ai depuis le debut
Private Sub CommandButton_done_Click()
Dim y, d As String
Dim Col, lg0, col0 As Integer, NB As Integer
Dim pl As Range, c As Range

Alors je suis vraiment perdu !?!

Leakim
 

leakim

XLDnaute Occasionnel
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

Re,
Oui, j'ai ôté la déclaration et c'est la même chose. Avec ou sans cela ne fonctionne pas...
Je sais pas quoi penser? Faut-il que je reprenne le code? la fonction?

Leakim
 

Dranreb

XLDnaute Barbatruc
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

Pourquoi vous ôtez une déclaration qui est bonne ?
Le résultat de la fonction Plage que je propose au poste #4 ne peut pas être le résultat que vous me montrez car elle ne renvoie plus un String mais un objet Range. En revanche quelque chose d'analogue pourrait être rendu par Plage(ActiveCell).Address tant que ça ne coince pas à cause de la longueur.
 

jpb388

XLDnaute Accro
Re : VBA - Erreur 1004 - définition du RANGE (fonction perso)

bonjour Leakim ,Danreb et tous

comme le dit Danreb a la place de Set pl = Range(Plage(ActiveCell)) met Set pl = Plage(ActiveCell)

le mod et l'union pas bête, cela simplifie drôlement la macro
cordialement
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 084
Messages
2 085 194
Membres
102 814
dernier inscrit
JLGalley