utiliser un(e) "n" box

RVL

XLDnaute Occasionnel
Bonjour le forum,

J'aimerai avoir un coup de main pour configurer un "inputbox" (je pense).
R: mais connaissances sur la famille des "n" box sont limités (si il existe un tuto qui résume l'utilisation des divers "box", je suis preneur).

Dans une macro, je voudrais remplacer une valeur par une variable, laquelle serait modifiable via un "inputbox" (la valeur variant de 1 à 30)

Code:
Sub Gr_CP()
'extraire 1 groupe de CP
Sheets("Plan").Unprotect "toto"
 Dim plage As Range, c As Range, cSource As Range
 Set plage = Feuil1.Range("B1:O55") 'zones selection pour transfert macro
Application.ScreenUpdating = False
[COLOR="Red"]'GrCp = InputBox("Entrez le groupe de CP")'[/COLOR]For Each c In plage
    If Not IsEmpty(c) Then  'And Not c.Locked
        Set cSource = Sheets("BD").UsedRange.Find(what:=c, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not cSource Is Nothing Then
            If cSource.Offset(0, 4).Value[COLOR="red"] '= GrCp' [/COLOR]Then
                c.Copy Destination:=Sheets("Plan N").Range("U" & _
                    Application.Rows.Count).End(xlUp)(2)
                 c.Clear 'Nettoie la cellule, contenu et format.
                c.Locked = False
            End If
        End If
    End If
Next c
'plage.Locked = False
Application.ScreenUpdating = True
Sheets("Plan N").Protect "toto", AllowFormattingCells:=True
End Sub

Merci d'avance,

PS: Mon dernier post n'avait pas fait fureur ,pourtant j'essaie de respecter la charte, donc si il manque qql chose ne pas hésiter a me le faire savoir.
Je préfère me prendre une remarque, que de rester invisible.
 

Excel-lent

XLDnaute Barbatruc
Re : utiliser un(e) "n" box

Bonjour RVL,

RVL à dit:
Mon dernier post n'avait pas fait fureur ,pourtant j'essaie de respecter la charte, donc si il manque qql chose ne pas hésiter a me le faire savoir.
Je préfère me prendre une remarque, que de rester invisible.

L'idéal dans ce cas, c'est de mettre un lien vers ton précédent post. Et d'écrire dans l'ancien post que tu le clôture et que la suite se trouve ici (mettre un lien vers ton nouveau post).

GrCp = InputBox("l'invite : question que tu pose à l'utilisateur", "Titre qui s'écrit dans le bandeau bleu de l'InputBox", "valeur par défaut écrite dans la zone de saisie")

Par exemple dans ton cas :
GrCp = InputBox("Entrez le groupe de CP","Congés Payés","saisir un nombre entier entre 1 et 30")

Conseil :
Si tu veux que l'utilisateur saisisse absolument un nombre entier et que celui-ci soit inclus entre 1 et 30, il serait bien de rajouter un petit test de ta variable GrCp, pour vérifier que l'utilisateur n'a pas fait d'erreur de saisie (les polios du clavier sont plus nombreux qu'on le croit, sans oublier ceux qui comprennent rien à rien ;)).

N'ayant pas ton fichier et ne pouvant donc tester ma solution sur ce dernier, n'as-tu pas essayé de mettre cette ligne de code :
Code:
GrCp = InputBox("Entrez le groupe de CP")

non pas au dessus de la ligne "For Each...", mais en dessous? A l'intérieur de ta boucle, permettant ainsi que ton InputBox se déclenche pour chaque cellule "c", c'est bien ce que tu veux???

A te lire,

Cordialement
 

RVL

XLDnaute Occasionnel
Re : utiliser un(e) "n" box

Bonjour Exel-lent,

D'abord merci pour ta réponse.

J'ai fait un essai en deplacant

Code:
GrCp = InputBox("Entrez le groupe de CP")

aprés
Code:
For Each c In plage

je plante le fichier ?

Voici la macro initiale

Code:
Sub Gr_CP()
'extraire 1 groupe de CP
Sheets("Plan N").Unprotect "toto"
 Dim plage As Range, c As Range, cSource As Range
 Set plage = Feuil1.Range("B1:O55") 'zones selection pour transfert macro
Application.ScreenUpdating = False
For Each c In plage
    If Not IsEmpty(c) Then
        Set cSource = Sheets("BD").UsedRange.Find(what:=c, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not cSource Is Nothing Then
            If cSource.Offset(0, 4).Value = [COLOR="Red"]13[/COLOR] Then
                c.Copy Destination:=Sheets("Plan N").Range("U" & _
                    Application.Rows.Count).End(xlUp)(2)
                 c.Clear 'Nettoie la cellule, contenu et format.
                c.Locked = False
            End If
        End If
    End If
Next c
'plage.Locked = False
Application.ScreenUpdating = True
Sheets("Plan N").Protect "toto", AllowFormattingCells:=True
End Sub

dans cet exemple j'aimerai faire varier la la valeur "13" de 1 à 30 via un inputbox ou autre.

A savoir que je débute avec les macros et que cette macro a été réalisée avec le forum (j'interprète ce que je peux, dur dur ...).

Désolé de pas mettre le fichier en PJ ,il est trop volumineux et je n'arrive plus à le simplifier.
 

Excel-lent

XLDnaute Barbatruc
Re : utiliser un(e) "n" box

RVL à dit:
dans cet exemple j'aimerai faire varier la la valeur "13" de 1 à 30 via un inputbox ou autre

Si je comprend bien, tu veux que ta variable "13" prennent la valeur 1 lorsque ta boucle "For Each" s'exécute, puis la valeur 2 la seconde fois, puis 3 ... 30

(Espérant que ta boucle s'exécute 30 fois, ni plus, ni moins - or j'ai pas du tout l'impression en lisant ta macro :confused: suis perdu, je n'arrive pas à comprendre ta demande)

A+
 
Dernière édition:

RVL

XLDnaute Occasionnel
Re : utiliser un(e) "n" box

Re,

Lorsque je change manuellement dans la macro la valeur "13" en 1 ou 2 ou .... jusque x

cette macro fonctionne trés bien ,elle me deplace les cellules (personnes qui correspondent) en "U".

Ce que j'aimerai, c'est faire varier cette valeur (N° du groupe de CP) de 1 à 30 ou peu importe.

via une "fenêtre" (inputbox, ou autre) pour ne pas modifier systématiquement cette macro.

Désolé j'ai qql difficulté à me faire comprendre,:(
 

Excel-lent

XLDnaute Barbatruc
Re : utiliser un(e) "n" box

Hello,

Si tu veux que ta variable prenne la valeur 1, puis 2, puis 3, puis ... pas besoin d'embêter l'utilisateur pour cela (via un InputBox), tu peux le faire de façon automatique.

Ci-dessous ton code complété :
Code:
Sub Gr_CP()
'extraire 1 groupe de CP
Sheets("Plan N").Unprotect "toto"
 Dim plage As Range, c As Range, cSource As Range
[COLOR="Blue"] Dim Variable As Byte[/COLOR]
 Set plage = Feuil1.Range("B1:O55") 'zones selection pour transfert macro
Application.ScreenUpdating = False

[COLOR="Blue"]Variable = 1[/COLOR]

For Each c In plage
    If Not IsEmpty(c) Then
        Set cSource = Sheets("BD").UsedRange.Find(what:=c, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not cSource Is Nothing Then
            If cSource.Offset(0, 4).Value = [COLOR="Blue"]Variable[/COLOR] Then
                c.Copy Destination:=Sheets("Plan N").Range("U" & _
                    Application.Rows.Count).End(xlUp)(2)
                 c.Clear 'Nettoie la cellule, contenu et format.
                c.Locked = False
            End If
        End If
    End If
[COLOR="Blue"]    If Variable < 30 Then Variable = Variable + 1[/COLOR]
Next c
'plage.Locked = False
Application.ScreenUpdating = True
Sheets("Plan N").Protect "toto", AllowFormattingCells:=True
End Sub

Avec le code ci-dessus, ta Variable prendra la valeur 1 la première fois, puis 2, puis 3, ... puis 30, puis si ta boucle est exécuté plus de 30 fois, ta Variable restera à 30 (si tu veux que la variable prennent une autre valeur dans ce cas de figure, détail ce que tu veux).

A te lire

Cordialement
 

RVL

XLDnaute Occasionnel
Re : utiliser un(e) "n" box

Re,

Je veux "simplement" que lorque j'execute cette macro,
elle me demande de faire un choix pour la variable en question, et que j'entre via un "n"box la valeur 1 ou, 2 ou 3 ou .....==> 30.
Et non pas lui faire prendre l'ensemble des valeurs (N° de groupe de CP):confused:

En Résumé sur le fichier: j'ai des macros qui transférent des cellules de la feuil1 (Plan N) en colonne "u" et ce, si les cellules (personnes) correspondent aux infos mise dans la feuil "BD" (base de donnée).

Désolé ....:(
 

Papou-net

XLDnaute Barbatruc
Re : utiliser un(e) "n" box

Bonjour RVL, Excel-lent,

Si j'ai bien compris la demande de RVL, voici comment je ferais :

Code:
Sub Gr_CP()
'extraire 1 groupe de CP
[COLOR="Red"][B]GrCp = InputBox("Entrez le groupe de CP")
If Not Isnumeric(GrCp) Then
[INDENT]MsgBox "Veuillez saisir une valeur numérique, SVP", vbOkOnly + vbExclamation, "Erreur"
Exit Sub[/INDENT]
End If[/B][/COLOR]
Sheets("Plan N").Unprotect "toto"
 Dim plage As Range, c As Range, cSource As Range
 Set plage = Feuil1.Range("B1:O55") 'zones selection pour transfert macro
Application.ScreenUpdating = False
For Each c In plage
    If Not IsEmpty(c) Then
        Set cSource = Sheets("BD").UsedRange.Find(what:=c, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not cSource Is Nothing Then
            If cSource.Offset(0, 4).Value = [COLOR="Red"][B]GrCp[/B][/COLOR] Then
                c.Copy Destination:=Sheets("Plan N").Range("U" & _
                    Application.Rows.Count).End(xlUp)(2)
                 c.Clear 'Nettoie la cellule, contenu et format.
                c.Locked = False
            End If
        End If
    End If
Next c
'plage.Locked = False
Application.ScreenUpdating = True
Sheets("Plan N").Protect "toto", AllowFormattingCells:=True
End Sub

Espérant avoir répondu.

Cordialement.
 

Excel-lent

XLDnaute Barbatruc
Re : utiliser un(e) "n" box

Bonjour tout le monde,

Je pensais quasiment à la même chose que toi Papou-net

Code:
Sub Gr_CP()
'extraire 1 groupe de CP
[COLOR="Red"][B]GrCp = InputBox([/B][COLOR="Blue"]"Entrez le groupe de CP","Congés Payés","saisir un nombre entier entre 1 et 30"[/COLOR][B])[/B]

[COLOR="Green"]' Test s'il s'agit d'un nombre[/COLOR]
[B]If Not Isnumeric(GrCp) Then
    MsgBox "Veuillez saisir une valeur numérique, SVP", vbOkOnly + vbExclamation, "Erreur"
    Exit Sub
End If[/B][/COLOR]

[COLOR="Green"]' Test s'il s'agit d'un nombre entier[/COLOR]
[COLOR="Blue"]If CLng(Grcp) <> CDbl(Grcp) Then
    MsgBox "Veuillez saisir un nombre entier, SVP", vbOKOnly + vbExclamation, "Erreur"
    Exit Sub
End If[/COLOR]

[COLOR="Green"]' Test s'il s'agit d'un nombre compris entre 1 et 30[/COLOR]
[COLOR="Blue"]If Grcp < 1 Or Grcp > 30 Then
    MsgBox "Veuillez saisir un nombre entier compris entre 1 et 30, SVP", vbOKOnly + vbExclamation, "Erreur"
    Exit Sub
End If[/COLOR]

Sheets("Plan N").Unprotect "toto"
 Dim plage As Range, c As Range, cSource As Range
 Set plage = Feuil1.Range("B1:O55") 'zones selection pour transfert macro
Application.ScreenUpdating = False
For Each c In plage
    If Not IsEmpty(c) Then
        Set cSource = Sheets("BD").UsedRange.Find(what:=c, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
        If Not cSource Is Nothing Then
            If cSource.Offset(0, 4).Value = [COLOR="Red"][B]GrCp[/B][/COLOR] Then
                c.Copy Destination:=Sheets("Plan N").Range("U" & _
                    Application.Rows.Count).End(xlUp)(2)
                 c.Clear 'Nettoie la cellule, contenu et format.
                c.Locked = False
            End If
        End If
    End If
Next c
'plage.Locked = False
Application.ScreenUpdating = True
Sheets("Plan N").Protect "toto", AllowFormattingCells:=True
End Sub

Bonne après midi à tous

PS. : en bleu et vert mes rajouts
 

RVL

XLDnaute Occasionnel
Re : utiliser un(e) "n" box

Re, Excel-lent Papou-Net

J’ai essayé vos solutions, mais apparemment ça ne fonctionne pas.

Merci pour votre patience.

Je vais donc contourner ce pb et essayer un autre "truc".

PS: l’ennui c'est de ne pas pouvoir "traduire" ce que j'aimerai réaliser (j'en suis conscient et sincèrement désolé).

Encore merci pour votre aide,
 

RVL

XLDnaute Occasionnel
Re : utiliser un(e) "n" box avec variable

Bonjour le forum,

Je reviens vers vous avec mon probléme pour modifier une macro:

avoir une variable au lieu d'une constante dans une macro.

J'ai mis un exemple (simplification d'un fichier bcp trop important), avec 2 cas:
avec la variable "var1" çà fonctionne
mais avec "var2" <0 ?

Si quelqu'un peut m'expliquer pourquoi, je le remercie à l'avance.
 

Pièces jointes

  • Exemple2.xls
    45.5 KB · Affichages: 44
  • Exemple2.xls
    45.5 KB · Affichages: 46
  • Exemple2.xls
    45.5 KB · Affichages: 48

Discussions similaires

Réponses
8
Affichages
478

Statistiques des forums

Discussions
312 196
Messages
2 086 097
Membres
103 116
dernier inscrit
kutobi87