Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Pb code VBA

7 réponses
Avatar
Philou36
Bonjour les amis !
Voila j'ai le code suivant :
Sub Créer_Onglet()
For Each c In Range([b4], [b65000].End(xlUp))
On Error Resume Next
temp = Sheets(c.Value).Range("A1").Value
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = c
ActiveSheet.Hyperlinks.Add Anchor:=c, Address:="", _
SubAddress:="'" & c & "'" & "!A1", TextToDisplay:=c.Value
Worksheets(c.Value).Cells(1, 3) = c

End If
Next
End Sub


Ca marche impeccable mais je voudrais le modifier de la façon suivante :
plutot que d'avoir For Each c In Range([b4], [b65000].End(xlUp))
j'aimerie qu'il boucle à partir de B4 mais avec une variable sur le 4 (avec
cells(..,..) ce qui me permettrait de lire les colonne 3, 4 et 5 pour
pouvoir continuer mon traitement.

Est ce jouable ?

Un grand merci par avance de votre aide

Bonne soirée

Philippe

7 réponses

Avatar
michdenis
Bonjour,

Si tu veux lire les colonnes 3, 4 et 5
utilise "Offset(ligne,Colone)"

On peut ainsi transformer ta procédure comme suit :

Sub Créer_Onglet()
Dim C As Range
For Each c In Range([b4], [b65000].End(xlUp))
On Error Resume Next
with C
temp = Sheets(.Value).Range("A1").Value
A = .offset(,1).value 'Colonne C
B = c.offset(,2).value 'Colonne D
C = .offset(,3).value 'Colonne E
end with
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = c
ActiveSheet.Hyperlinks.Add Anchor:=c, Address:="", _
SubAddress:="'" & c & "'" & "!A1", TextToDisplay:=c.Value
Worksheets(c.Value).Cells(1, 3) = c
End If
Next
End Sub
Avatar
Philou36
Bonjour michdenis

Je viens de faire un test, c'est extra.
Grace a toi, je vais pouvoir continuer mon projet.

Un grand merci pour ton aide.

Bonne journée.

Philippe
"michdenis" a écrit dans le message de news:
ujAwTZG%
Bonjour,

Si tu veux lire les colonnes 3, 4 et 5
utilise "Offset(ligne,Colone)"

On peut ainsi transformer ta procédure comme suit :

Sub Créer_Onglet()
Dim C As Range
For Each c In Range([b4], [b65000].End(xlUp))
On Error Resume Next
with C
temp = Sheets(.Value).Range("A1").Value
A = .offset(,1).value 'Colonne C
B = c.offset(,2).value 'Colonne D
C = .offset(,3).value 'Colonne E
end with
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = c
ActiveSheet.Hyperlinks.Add Anchor:=c, Address:="", _
SubAddress:="'" & c & "'" & "!A1", TextToDisplay:=c.Value
Worksheets(c.Value).Cells(1, 3) = c
End If
Next
End Sub








Avatar
Philou36
Rebonjour les amis,

Je pensais m'en sortir tout seul, mais je suis encore bloqué. Mes
connaissances en VBA etant limité, je me tourne vers vous !

Ce matin MichDenis m'a bien dépanné pour ma macro VBA :
Sub Créer_Onglet()
Dim C As Range
For Each C In Range([b4], [b65000].End(xlUp))
On Error Resume Next
With C
temp = Sheets(.Value).Range("A1").Value
DateDebut = .Offset(, 1).Value 'Colonne C
DateFin = .Offset(, 2).Value 'Colonne D
Montant = .Offset(, 3).Value 'Colonne E
End With
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = C
ActiveSheet.Hyperlinks.Add Anchor:=C, Address:="", _
SubAddress:="'" & C & "'" & "!A1", TextToDisplay:=C.Value
Worksheets(C.Value).Cells(1, 3) = C
' Ligne = 5
' Worksheets(C.Value).Cells(Ligne, 2) = DateDebut
' Worksheets(C.Value).Cells(Ligne, 3) = DateFin
' Worksheets(C.Value).Cells(Ligne, 4) = Montant
End If
Next
End Sub


Cette macro lit le nom qui se trouve dans la colonne B et duplique le
tableau Modele en le nommant par le nom de la personne !

Maintenant les lignes que j'ai mis en commentaire sont le debut de ce que je
veux faire. Apres le nom, il y a une date de début, une date fin et un
montant.
Une fois que l'onglet est créee, je voudrais dans mon onglet obtenir autant
de mois que la période l'indique.
ex : 23/01/2010 =>15/03/2010
avoir les periodes suivantes :
23/01/2010 => 31/01/2010
01/02/2010=>28/02/2010
01/03/2010=>15/03/2010
et recopier le montant sur chacune des periode.
http://cjoint.com/?fvxVPP8Snj
Un grand grand merci pour votre aide.

Bonne soirée

Philippe







"Philou36" a écrit dans le message de news:
un1SNkJ%
Bonjour michdenis

Je viens de faire un test, c'est extra.
Grace a toi, je vais pouvoir continuer mon projet.

Un grand merci pour ton aide.

Bonne journée.

Philippe
"michdenis" a écrit dans le message de news:
ujAwTZG%
Bonjour,

Si tu veux lire les colonnes 3, 4 et 5
utilise "Offset(ligne,Colone)"

On peut ainsi transformer ta procédure comme suit :

Sub Créer_Onglet()
Dim C As Range
For Each c In Range([b4], [b65000].End(xlUp))
On Error Resume Next
with C
temp = Sheets(.Value).Range("A1").Value
A = .offset(,1).value 'Colonne C
B = c.offset(,2).value 'Colonne D
C = .offset(,3).value 'Colonne E
end with
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = c
ActiveSheet.Hyperlinks.Add Anchor:=c, Address:="", _
SubAddress:="'" & c & "'" & "!A1", TextToDisplay:=c.Value
Worksheets(c.Value).Cells(1, 3) = c
End If
Next
End Sub













Avatar
michdenis
A ) un code qui n'est pas fonctionnel n'est d'aucune utilité pour comprendre
une question.
et je suppose que si cela fonctionnait, tu n'aurais pas de question à
soulever!
Si je te donne un itinéraire sans te donner la destination et que je te
demande
de corriger l'itinéraire, tu t'y prends comment ?

B ) Tu veux copier quoi ? Plage de cellules sur quelle feuille ?
Où veux-tu copier ces données ? Nom de la feuille + adresse de la
plage de cellules.

C ) Est-ce que la copie doit se faire selon un ou plusieurs critères ? Si
oui, lesquels ?
Avatar
Calou
On 22 mai, 00:19, "michdenis" wrote:
A ) un code qui n'est pas fonctionnel n'est d'aucune utilité pour compr endre
une question.
    et je suppose que si cela fonctionnait, tu n'aurais pas de questi on à
soulever!
    Si je te donne un itinéraire sans te donner la destination et q ue je te
demande
    de corriger l'itinéraire, tu t'y prends comment ?

B ) Tu veux copier quoi ? Plage de cellules sur quelle feuille ?
      Où veux-tu copier ces données ? Nom de la feuille + adres se de la
plage de cellules.

C ) Est-ce que la copie doit se faire selon un ou plusieurs critères ? Si
oui, lesquels ?



Bonjour MichDenis,

Je suis vraiment désolé de ne pas avoir été suffisamment clair dans
mes
explications.
Sur ma feuille générale (MENU GENERAL), pour créer une fiche agent, i l
me
suffit de renseigner le nom, date de début et de fin du stage et le
montant
mensuel.

Apres avoir renseigné ces 4 champs, je clique sur le bouton 'Création
Fiche
Stagiaire',
la macro va me dupliquer la feuille 'Modele' en donnant le nom de
l'agent.

Jusque la ca marche !

Maintenant apres la création de l'onglet, j'aurai souhaité renseigner
le
tableau en fonction des informations de la feuille principale.

Si le stage va du 23/01/2010 au 15/03/2010 pour un montant de 400,00
Euros
par
mois
il faudrait que sur l'onglet qui porte le nom de l'agent, je retrouve
les
période suivant :
23/01/2010 => 31/01/2010 au titre du mois de janvier
01/02/2010=>28/02/2010 au titre du mois de février
01/03/2010=>15/03/2010 au titre du mois de mars
avec le montant de 400 Euros sur chacune des 3 périodes.

Je joins le fichier avec la fiche agent telle que je souhaiterai
qu'elle
soit.

http://cjoint.com/?fwwBeSOolP


Un grand merci de votre aide.

A bientot

Philippe
Avatar
Lolote
Salut Philou36,
peut être un élément de réponse ici:
http://cjoint.com/?fxkjfPUrQ2

En fait, je me suis servi de ton onglet Modele pour y inclure des
formules et ceci te permet d'avoir tes données en fonction des noms de
ton onglet MenuPrincipal.
En espérant que cela corresponde a tes attentes.
@+ Lolote




Philou36 a écrit :
Rebonjour les amis,

Je pensais m'en sortir tout seul, mais je suis encore bloqué. Mes
connaissances en VBA etant limité, je me tourne vers vous !

Ce matin MichDenis m'a bien dépanné pour ma macro VBA :
Sub Créer_Onglet()
Dim C As Range
For Each C In Range([b4], [b65000].End(xlUp))
On Error Resume Next
With C
temp = Sheets(.Value).Range("A1").Value
DateDebut = .Offset(, 1).Value 'Colonne C
DateFin = .Offset(, 2).Value 'Colonne D
Montant = .Offset(, 3).Value 'Colonne E
End With
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = C
ActiveSheet.Hyperlinks.Add Anchor:=C, Address:="", _
SubAddress:="'" & C & "'" & "!A1", TextToDisplay:=C.Value
Worksheets(C.Value).Cells(1, 3) = C
' Ligne = 5
' Worksheets(C.Value).Cells(Ligne, 2) = DateDebut
' Worksheets(C.Value).Cells(Ligne, 3) = DateFin
' Worksheets(C.Value).Cells(Ligne, 4) = Montant
End If
Next
End Sub


Cette macro lit le nom qui se trouve dans la colonne B et duplique le
tableau Modele en le nommant par le nom de la personne !

Maintenant les lignes que j'ai mis en commentaire sont le debut de ce que je
veux faire. Apres le nom, il y a une date de début, une date fin et un
montant.
Une fois que l'onglet est créee, je voudrais dans mon onglet obtenir autant
de mois que la période l'indique.
ex : 23/01/2010 =>15/03/2010
avoir les periodes suivantes :
23/01/2010 => 31/01/2010
01/02/2010=>28/02/2010
01/03/2010=>15/03/2010
et recopier le montant sur chacune des periode.
http://cjoint.com/?fvxVPP8Snj
Un grand grand merci pour votre aide.

Bonne soirée

Philippe







"Philou36" a écrit dans le message de news:
un1SNkJ%
Bonjour michdenis

Je viens de faire un test, c'est extra.
Grace a toi, je vais pouvoir continuer mon projet.

Un grand merci pour ton aide.

Bonne journée.

Philippe
"michdenis" a écrit dans le message de news:
ujAwTZG%
Bonjour,

Si tu veux lire les colonnes 3, 4 et 5
utilise "Offset(ligne,Colone)"

On peut ainsi transformer ta procédure comme suit :

Sub Créer_Onglet()
Dim C As Range
For Each c In Range([b4], [b65000].End(xlUp))
On Error Resume Next
with C
temp = Sheets(.Value).Range("A1").Value
A = .offset(,1).value 'Colonne C
B = c.offset(,2).value 'Colonne D
C = .offset(,3).value 'Colonne E
end with
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = c
ActiveSheet.Hyperlinks.Add Anchor:=c, Address:="", _
SubAddress:="'" & c & "'" & "!A1", TextToDisplay:=c.Value
Worksheets(c.Value).Cells(1, 3) = c
End If
Next
End Sub
















Avatar
Philou36
Bonjour Lolote,

c'est extra ! tu as trouve une solution sans passer par le VBA !
j'ai juste modifie car excel ne connaissait pas la fonction FIN.MOIS !
Mille mercis !
Philippe

"Lolote" a écrit dans le message de news:
ew$9y%23k%
Salut Philou36,
peut être un élément de réponse ici:
http://cjoint.com/?fxkjfPUrQ2

En fait, je me suis servi de ton onglet Modele pour y inclure des formules
et ceci te permet d'avoir tes données en fonction des noms de ton onglet
MenuPrincipal.
En espérant que cela corresponde a tes attentes.
@+ Lolote




Philou36 a écrit :
Rebonjour les amis,

Je pensais m'en sortir tout seul, mais je suis encore bloqué. Mes
connaissances en VBA etant limité, je me tourne vers vous !

Ce matin MichDenis m'a bien dépanné pour ma macro VBA :
Sub Créer_Onglet()
Dim C As Range
For Each C In Range([b4], [b65000].End(xlUp))
On Error Resume Next
With C
temp = Sheets(.Value).Range("A1").Value
DateDebut = .Offset(, 1).Value 'Colonne C
DateFin = .Offset(, 2).Value 'Colonne D
Montant = .Offset(, 3).Value 'Colonne E
End With
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = C
ActiveSheet.Hyperlinks.Add Anchor:=C, Address:="", _
SubAddress:="'" & C & "'" & "!A1", TextToDisplay:=C.Value
Worksheets(C.Value).Cells(1, 3) = C
' Ligne = 5
' Worksheets(C.Value).Cells(Ligne, 2) = DateDebut
' Worksheets(C.Value).Cells(Ligne, 3) = DateFin
' Worksheets(C.Value).Cells(Ligne, 4) = Montant
End If
Next
End Sub


Cette macro lit le nom qui se trouve dans la colonne B et duplique le
tableau Modele en le nommant par le nom de la personne !

Maintenant les lignes que j'ai mis en commentaire sont le debut de ce que
je veux faire. Apres le nom, il y a une date de début, une date fin et un
montant.
Une fois que l'onglet est créee, je voudrais dans mon onglet obtenir
autant de mois que la période l'indique.
ex : 23/01/2010 =>15/03/2010
avoir les periodes suivantes :
23/01/2010 => 31/01/2010
01/02/2010=>28/02/2010
01/03/2010=>15/03/2010
et recopier le montant sur chacune des periode.
http://cjoint.com/?fvxVPP8Snj
Un grand grand merci pour votre aide.

Bonne soirée

Philippe







"Philou36" a écrit dans le message de news:
un1SNkJ%
Bonjour michdenis

Je viens de faire un test, c'est extra.
Grace a toi, je vais pouvoir continuer mon projet.

Un grand merci pour ton aide.

Bonne journée.

Philippe
"michdenis" a écrit dans le message de news:
ujAwTZG%
Bonjour,

Si tu veux lire les colonnes 3, 4 et 5
utilise "Offset(ligne,Colone)"

On peut ainsi transformer ta procédure comme suit :

Sub Créer_Onglet()
Dim C As Range
For Each c In Range([b4], [b65000].End(xlUp))
On Error Resume Next
with C
temp = Sheets(.Value).Range("A1").Value
A = .offset(,1).value 'Colonne C
B = c.offset(,2).value 'Colonne D
C = .offset(,3).value 'Colonne E
end with
If Err > 0 Then
Sheets("Modele").Copy After:=Sheets(Sheets.Count)
ActiveSheet.Name = c
ActiveSheet.Hyperlinks.Add Anchor:=c, Address:="", _
SubAddress:="'" & c & "'" & "!A1", TextToDisplay:=c.Value
Worksheets(c.Value).Cells(1, 3) = c
End If
Next
End Sub