Moidification d'une varaible

  • Initiateur de la discussion Initiateur de la discussion br44
  • 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 !

br44

XLDnaute Impliqué
Bonjour à tout le forum ,

Voilà j'espère que vous pourrez résoudre se petit problème de variable .

j'ai voulue modifier cette variable:
Code:
'Declare la Variable Mois
  Dim Mois As String

'Définit la varible Mois
  Mois = ActiveSheet.Range("C3").Value

Pour écrire la variable suivante :
Code:
Set MaPlage =[COLOR="Red"] Sheets(Mois)[/COLOR].Range("A4:A" & Range("A65536").End(xlUp).Row)
Seulement la variable Mois fonctionne sur une cellule qui change de valeur .

Je voudrais savoir si il est possible de modifier la variable Mois en fonction d'une plage de cellule fixe correspondant aux entêtes des colonnes de mon tableau ?

Voici la plage concernée :

1) Sheets("Saisie1").range("P9") = "Sheets("JANVIER")
2) " " "" " ("Y9")= "Sheets("FEVRIER")
3) " " "" " ("AH9)= "Sheets("MARS")

Comme vous pouvez le voir mes entêtes de colonnes reprennent le noms des feuilles mensuelles.

J'ai écris cette macro pour pouvoir renvoyer les informations de la feuilles ("SAISIE1")vers les autres feuilles du classeur .

Voici ma macro:
Code:
Private Sub CommandButton2_Click() 'Bouton "ENREGISTRER"
'Déclare la variable Mois
  Dim Mois As String
'Déclare la variable P et B
  Dim P As Range
  Dim B As String
  Dim C As Range
'Définit la variable B
   B = NomClient.Value
'Définit la variable Mois
   Mois = ActiveSheet.Range("P9,Y9,AH9").Value[COLOR="Magenta"] ***** ça bloc ici[/COLOR]
'Définit la variable P
  Set P = Sheets(Mois).Range("B8:B" & Range("B65536").End(xlUp).Row)

'Je sèlectionne la feuille de départ
For Each C In P
'Définit la condition de la plage C
If C.Value = B Then
   
    With Sheets("SAISIE1")
         .Range("B" & Lig).Copy
        C.Offset(0, 20).PasteSpecial
    End With

 End If
Next
End Sub

je joint en plus mon fichier pour que se soit plus claire .

Vous remerciant tous par avances je vous dis à plus sur se fil .Amicalement BR44
 

Pièces jointes

Re : Moidification d'une varaible

Bonsoir

Si j'ai bien compris
Le plus simple serait de faire une boucle sur les mois de l'année car les noms ne changent pas
dim i as byte
For i = 1 to 12
mois = ucase(monthname(i)
Set MaPlage = Sheets(Mois).Range("A4:A" & Range("A65536").End(xlUp).Row)


Next i

JP
 
Dernière édition:
Re : Moidification d'une varaible

Bonsoir jp14 et br44,
J'ai pas testé mais dans ma tête je le fait comme ceci...
Code:
Private Sub CommandButton2_Click() 'Bouton "ENREGISTRER"
'Déclare la variable mois
  Dim mois As Integer
'Déclare la variable B
  Dim B As String
  Dim C As Range
'Définit la variable B
   B = NomClient.Value
'Je sèlectionne la feuille de départ JANVIER est la 2ème page
For mois = 2 To Sheets.Count
For Each C In Sheets(mois).Range("B8:B" & Range("B65536").End(xlUp).Row)
'Définit la condition de la plage C
    If C.Value = B Then
    Sheets("SAISIE1").Range("B" & Lig).Copy
        C.Offset(0, 20).PasteSpecial
    End If
Next
Next
End Sub
 
Re : Moidification d'une varaible

Bonjour,JP14,youky(BJ),le forum

Un grand merci à vous deux pour vos réponses . je teste vos proposition vous je vous tiens au courant .

Vous remerciant de votre intérêt je vous dis à plus.Amicalement BR44
 
Re : Moidification d'une varaible

Rebonjour à tous

Je viens de tester vos propositions , dont voici le bilan .

Jp14 : il me manque le type de déclaration pour la variable I ,car j'ai un beug :

Erreur 13 :incompatibilité de type .

Youki(bj):

Ta macro fonctionne sur la principe est cela va me permettre de régler une option . ,mais est-il possible que ta macro ne sélectionne qu'un seul mois ?

J'ai essayé en ajoutant la condition suivante :

IF NFacture = "" then excit Sub

Mais le résultat est le même, la copie se fais sur toutes les feuilles .

Si tu pouvait voir cela et si tu as du temps se serait génial 😛😛😛.

En Attendant je vous remercie par avance et vous dis à plus .Amicalement BR44
 
Re : Moidification d'une varaible

Re bonjour.
En relisant la macro verifie la variable Lig (non déclarée) et non renseignée.
if NFacture = "" si ceci est une cellule nommée dans toutes les pages sheets(mois)
alors..ligne en rouge à rajouter
.
Code:
For mois = 2 To Sheets.Count
[B][COLOR="Red"]If Sheets(mois).NFacture="" Then exit sub[/COLOR][/B]
For Each C In Sheets(mois).Range("B8:B" & Range("B65536").End(xlUp).Row)

A+
 
Re : Moidification d'une varaible

Bonjour à tous


Si Mois est en String, alors j'aurai saisi mon code ainsi non ?
Code:
Private Sub CommandButton2_Click() 'Bouton "ENREGISTRER"
'Déclare la variable Mois
  Dim Mois As String

'Définit la variable Mois
   Mois = ActiveSheet.Range("P9").[COLOR=Red]Text[/COLOR]
 
Re : Moidification d'une varaible

Une autre variante qui se rapproche + de la 1ere
Code:
Private Sub CommandButton2_Click() 'Bouton "ENREGISTRER"
'Déclare la variable Mois
  Dim Mois As String
  Dim k As Integer
'Déclare la variable P et B
  Dim P As Range
  Dim B As String
  Dim C As Range
'Définit la variable B
   B = NomClient.Value
'Définit la variable Mois
For k = 16 To 43 Step 9
Mois = Cells(k, 9)
   'Mois = ActiveSheet.Range("P9,Y9,AH9").Value ***** ça bloc ici
'Définit la variable P
  Set P = Sheets(Mois).Range("B8:B" & Range("B65536").End(xlUp).Row)

'Je sèlectionne la feuille de départ
For Each C In P
'Définit la condition de la plage C
If C.Value = B Then
   Sheets("SAISIE1").Range("B" & Lig).Copy
        C.Offset(0, 20).PasteSpecial
 End If
Next
Next k
End Sub
 
Re : Moidification d'une varaible

Bonjour à tous,

Je vous remercie tout les deux de vos réponses .

Youki(BJ): je test ta première proposition je reviens pour te données le résultat.
Pour ta deuxième macro je n'est pas compris ta boucle:
Code:
'Définit la variable Mois
For k = 16 To 43 Step 9
Mois = Cells(k, 9)
Si tu peut me donner quelques explications cela m'aiderait .
En te remerciant par avances pour tout je te dis à plus


Staple1600: Merci pour ta macro ,mais je crois que tu à mal compris ma macro de départ ,Oui le problème est de traduire les cellules ("P9,Y9,AH9")en variable.
Ici il n'y a que trois mois pour l'exemple, mais mon tableau couvre l'ensemble de l'année se qui correspond à une douzaine de cellules .

Espérant que cela soit plus claire pour toi et en te remerciant pour ta participation à ce fil je te dis à plus . SI tu à une autre option à ta macro n'hésite pas si cela peut alléger ma macro je suis preneur . Amicalement br44
 
Re : Moidification d'une varaible

bonjour Youki(BJ),le forum

Comme prévue je t'envoie ces quelques lignes pour te dire que t'as macro ne change rien au résultat.

J'ai essayer toute une partie de la journée de la modifié mais sans résultat je n'arrive toujours pas à sélectionner qu'une seule feuille pour afficher dans la cellule .


Si tu as une autres idée je suis preneur . je crois que le problème et que le programme trouve pas de correspondance entre la feuille ("SAISIE1")et les autres feuilles du classeur .
Te remerciant par avance du coup de main je te dis à plus sur se fil .Amicalement BR44
 
Re : Moidification d'une varaible

Bonsoir,
J'ai quand même testé avec ton fichier que je n'avais vu.
Voici qui fonctionne pour autant de mois qu'il y a sur ta page.
J'avais repéré que le 1er mois était en col P et ensuite toutes les 9 colonnes
Pour ne pas le faire aller en error je test si mois=""
Bon test
Code:
Private Sub CommandButton2_Click() 'Bouton "ENREGISTRER"
'Déclare la variable Mois
  Dim Mois As String
  Dim k As Integer
'Déclare la variable P et B
  Dim B As String
  Dim C As Range
'Définit la variable B
   B = NomClient.Value
'Définit la variable Mois
For k = 16 To 124 Step 9    'compte de 9 en 9 soit col P-Y-AH....
' tant qu'il y a un nom en ligne 9
Mois = Feuil1.Cells(9, k)
If Mois = "" Then Exit Sub
MsgBox Mois 'tu peux supprimer cette ligne
For Each C In Sheets(Mois).Range("B8:B" & Range("B65536").End(xlUp).Row)
If C.Value = B Then
   Sheets("SAISIE1").Range("B" & Lig).Copy
        C.Offset(0, 20).PasteSpecial
 End If
Next
Next k
End Sub
 
Re : Moidification d'une varaible

Bonsoir,Youki(bj),le forum

Un grand merci à toi pour ta macro modifiée . je viens de la tester est elle fonctionne bien .

Maintenant il faut que je la complète pour quelle copie les informations que pour le où les mois désiré et cela en fonction du n° de facture .

Je m'explique: pour le moment la macro copie les infos sur toutes les feuilles qu'elle que soit le mois où se trouve la facture ,or il faudrait que les infos se copie que pour le mois concerné ,d'où une sélection par le N°de facture .

Exemple :Si on prend le premier nom dans la liste "TITI" il à une facture de 99,22€ qui à pour N° 150 cette facture à été payer en janvier(le montant est passé en bleu dans l'usf) , ce qui donne la première ligne du tableau de la feuille "SAISIE1".Ce qui correspond à la première facture de la Feuille "Janvier" donc il n'est pas nécessaire que les infos soient renvoyer dans les feuilles "février et " mars" puisqu'il n'y a pas encore de facture. Où si on prend le mois de février en exemple la facture de janvier étant réglée il n'est pas nécessaire de renvoyer des infos en janvier et en mars.

En faite pour essayer d'être claire les informations sont à envoyer suivant la situation de chaque clients ,mais en règles générales il n'y a une facture par mois .

Je vais donc essayer de rajouter une variable "Trouve" dans ta macro . Si de ton côté du à une piste et que tu as un peut de temps n'hésite pas .

Te remerciant par avances et pour ton aide que tu ma donnée je te dis à plus et à bientôt sur se fil .Amicalement BR44
 
Re : Moidification d'une varaible

Salut,
le plus dur est de comprendre ce que tu veux et comment ça marche....!
Bref si j'ai compris voici..
Désolé du retard j'ai été pris souvent.
A+

Code:
Private Sub CommandButton2_Click() 'Bouton "ENREGISTRER"
'Déclare la variable Mois
  Dim Mois As String
  Dim k As Integer
'Déclare la variable P et B
  Dim B As String
  Dim C As Range
'Définit la variable B
   B = NomClient.Value
'Définit la variable Mois
For k = 16 To 124 Step 9    'compte de 9 en 9 soit col P-Y-AH....
' tant qu'il y a un nom en ligne 9
Mois = Feuil1.Cells(9, k)
If Mois = "" Then Exit Sub
MsgBox Mois 'tu peux supprimer cette ligne
For Each C In Sheets(Mois).Range("B8:B" & Range("B65536").End(xlUp).Row)
If C.Value = B Then
  If Sheets(Mois).Cells(C.Row, "F") = Me.NFacture.Text Then Exit Sub
  If Sheets(Mois).Cells(C.Row, "F") = "" Then
   Sheets("SAISIE1").Range("B" & Lig).Copy
        C.Offset(0, 20).PasteSpecial
  End If
End If
Next
Next k
End Sub
 
Re : Moidification d'une varaible

Bonsoir YOUKI(BJ), le forum ,

Je te pris de m'excuser du retard mis à te répondre mais je testais ta dernière proposition ,pour la quelle je te remercie d'ailleurs.

Je crois que le plus simple est que je reprenne le fichier fichier que j'ai déposer au début de post est que je le modifie avec les infos obtenu jusqu'à maintenant et que je rajoute ce que je veux obtenir .

Ce sera plus claire pour tous les deux (et plus si affinité 😛😛😛😛😛) ,je blague bien sure .

Pour ta dernière proposition que j'ai tester on n'est pas loin .

Cela donne que la première sélection s'affiche bien en "JANVIER" ,mais dès que je veux passer en deuxième mois cela affiche partout est si je passe aux troisième mois rien ne s'affiche .

Si cela te convient sur le principe fais le mois savoir en rèponse .

Le temps pour mois de faire les modifications je te dis à plus . Amicalement BR44
 
Re : Moidification d'une varaible

Bonsoir
Plus tu donnes de renseignements
plus se sera facile et rapide.
A savoir j'ai passé plus d'une demi-heure pour comprendre et n'ai pas compris le system du fichier, la macro m'a pris que quelques minutes.
Bon j'ai vu aprés coup aussi que je copiai pas sur la bonne colonne
Essaye de remplacer le "F" par "U"
If Sheets(Mois).Cells(C.Row, "U") = "" Then
A+
 
- 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

Discussions similaires

Réponses
7
Affichages
178
Réponses
5
Affichages
915
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour