OVH Cloud OVH Cloud

erreur macro

6 réponses
Avatar
MarcT
Bonjour,
j'avais obtenu sur je ne sais plus quel site une macro que j'avais fait
adapté ici pour un gentil contibuteur. Il me reste un pb que mes
compétences ne me permettent pas de résoudre seul: je ne veux plus avoir
le message d'erreur "la feuille existe déjà" mais qu'il remplace tt
simplement le nom. j'espère avoir été assez clair
merci d'avance
voici la macro en question:

Sub renommer()
Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count
Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error GoTo mon_message
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
Exit Sub
mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention")
End Sub

6 réponses

Avatar
anomymousA
bonjour,

je ne comprends déjà pas à quoi sert Onglet = Format(texte, "") puisque
d'une part
Onglet ne te sert à rien dans ta procédure et d 'autre texte n'est pas défini.
Par ailleurs, comment est traitée pour nommer un onglet la barre " /"
sépratrice de dates.
Enfin, c'est logique de traiter par un message d'erreur la possibilité qu'il
y ait une même valeur de noms pour 2 feuilles .

M'enfin, si tu veux invalider le gestionnaire d'erreurs, tu enlèves les
instructions On Error GoTo mon_message et Exit Sub mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention").
Après , à tes risques et périls.

A+




Bonjour,
j'avais obtenu sur je ne sais plus quel site une macro que j'avais fait
adapté ici pour un gentil contibuteur. Il me reste un pb que mes
compétences ne me permettent pas de résoudre seul: je ne veux plus avoir
le message d'erreur "la feuille existe déjà" mais qu'il remplace tt
simplement le nom. j'espère avoir été assez clair
merci d'avance
voici la macro en question:

Sub renommer()
Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count
Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error GoTo mon_message
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
Exit Sub
mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention")
End Sub



Avatar
MarcT
bonjour,

je ne comprends déjà pas à quoi sert Onglet = Format(texte, "") puisque
d'une part
Onglet ne te sert à rien dans ta procédure et d 'autre texte n'est pas défini.
Par ailleurs, comment est traitée pour nommer un onglet la barre " /"
sépratrice de dates.
Enfin, c'est logique de traiter par un message d'erreur la possibilité qu'il
y ait une même valeur de noms pour 2 feuilles .

M'enfin, si tu veux invalider le gestionnaire d'erreurs, tu enlèves les
instructions On Error GoTo mon_message et Exit Sub mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention").
Après , à tes risques et périls.

A+





Bonjour,
j'avais obtenu sur je ne sais plus quel site une macro que j'avais fait
adapté ici pour un gentil contibuteur. Il me reste un pb que mes
compétences ne me permettent pas de résoudre seul: je ne veux plus avoir
le message d'erreur "la feuille existe déjà" mais qu'il remplace tt
simplement le nom. j'espère avoir été assez clair
merci d'avance
voici la macro en question:

Sub renommer()
Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count
Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error GoTo mon_message
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
Exit Sub
mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention")
End Sub

Bonjour anonymousA et merci de ta réponse.


Je ne suis pas assez pointu pour comprendre à quoi serve les points dont
tu me parle ... Par contre la macro fonctionne et me permet de renommer
les onglets en fonction du résultat d'une formule dans une cellule. Pour
améliorer tt ça je voudrai qu'au lieu d'un message d'erruer il renomme
quand m^me cet onglet en rajoutant : "nom d'onglet(1)" par exemple. ça
me simplifirait sacrément les choses.
en tt cas merci pour ta contribution
cordialement
Marc


Avatar
anomymousA
re,

En cas d'erreur, à quoi sert-il de renommer un onglet qui a déjà un nom de
toute façon ? Autant laisser le nom prédéterminé par Excel.
Dans ces qui suit, ta même procédure, mais quand Excel rencontre un problème
de dénomination d'un onglet, il laisse l'ancien nom.
Si tu veux absolument qu'Excel le renomme nomonglet(1), il faut gérer la
table des noms d'onglets et faire un test sur les onglest pour savoir où en
est la numérotation. C'est un peu plus compliqué mais faisable.
Je veux bien t'aider, mais je ne vais pas investir du temps si ce n'est pas
absolument nécessaire . A toi de voir. Me répondre si c'est essentiel.

Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count


Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error Resume Next
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
End Sub

A+


bonjour,

je ne comprends déjà pas à quoi sert Onglet = Format(texte, "") puisque
d'une part
Onglet ne te sert à rien dans ta procédure et d 'autre texte n'est pas défini.
Par ailleurs, comment est traitée pour nommer un onglet la barre " /"
sépratrice de dates.
Enfin, c'est logique de traiter par un message d'erreur la possibilité qu'il
y ait une même valeur de noms pour 2 feuilles .

M'enfin, si tu veux invalider le gestionnaire d'erreurs, tu enlèves les
instructions On Error GoTo mon_message et Exit Sub mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention").
Après , à tes risques et périls.

A+





Bonjour,
j'avais obtenu sur je ne sais plus quel site une macro que j'avais fait
adapté ici pour un gentil contibuteur. Il me reste un pb que mes
compétences ne me permettent pas de résoudre seul: je ne veux plus avoir
le message d'erreur "la feuille existe déjà" mais qu'il remplace tt
simplement le nom. j'espère avoir été assez clair
merci d'avance
voici la macro en question:

Sub renommer()
Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count
Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error GoTo mon_message
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
Exit Sub
mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention")
End Sub

Bonjour anonymousA et merci de ta réponse.


Je ne suis pas assez pointu pour comprendre à quoi serve les points dont
tu me parle ... Par contre la macro fonctionne et me permet de renommer
les onglets en fonction du résultat d'une formule dans une cellule. Pour
améliorer tt ça je voudrai qu'au lieu d'un message d'erruer il renomme
quand m^me cet onglet en rajoutant : "nom d'onglet(1)" par exemple. ça
me simplifirait sacrément les choses.
en tt cas merci pour ta contribution
cordialement
Marc





Avatar
MarcT
re,

En cas d'erreur, à quoi sert-il de renommer un onglet qui a déjà un nom de
toute façon ? Autant laisser le nom prédéterminé par Excel.
Dans ces qui suit, ta même procédure, mais quand Excel rencontre un problème
de dénomination d'un onglet, il laisse l'ancien nom.
Si tu veux absolument qu'Excel le renomme nomonglet(1), il faut gérer la
table des noms d'onglets et faire un test sur les onglest pour savoir où en
est la numérotation. C'est un peu plus compliqué mais faisable.
Je veux bien t'aider, mais je ne vais pas investir du temps si ce n'est pas
absolument nécessaire . A toi de voir. Me répondre si c'est essentiel.

Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count


Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error Resume Next
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
End Sub

A+




bonjour,

je ne comprends déjà pas à quoi sert Onglet = Format(texte, "") puisque
d'une part
Onglet ne te sert à rien dans ta procédure et d 'autre texte n'est pas défini.
Par ailleurs, comment est traitée pour nommer un onglet la barre " /"
sépratrice de dates.
Enfin, c'est logique de traiter par un message d'erreur la possibilité qu'il
y ait une même valeur de noms pour 2 feuilles .

M'enfin, si tu veux invalider le gestionnaire d'erreurs, tu enlèves les
instructions On Error GoTo mon_message et Exit Sub mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention").
Après , à tes risques et périls.

A+






Bonjour,
j'avais obtenu sur je ne sais plus quel site une macro que j'avais fait
adapté ici pour un gentil contibuteur. Il me reste un pb que mes
compétences ne me permettent pas de résoudre seul: je ne veux plus avoir
le message d'erreur "la feuille existe déjà" mais qu'il remplace tt
simplement le nom. j'espère avoir été assez clair
merci d'avance
voici la macro en question:

Sub renommer()
Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count
Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error GoTo mon_message
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
Exit Sub
mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention")
End Sub




Bonjour anonymousA et merci de ta réponse.
Je ne suis pas assez pointu pour comprendre à quoi serve les points dont
tu me parle ... Par contre la macro fonctionne et me permet de renommer
les onglets en fonction du résultat d'une formule dans une cellule. Pour
améliorer tt ça je voudrai qu'au lieu d'un message d'erruer il renomme
quand m^me cet onglet en rajoutant : "nom d'onglet(1)" par exemple. ça
me simplifirait sacrément les choses.
en tt cas merci pour ta contribution
cordialement
Marc

Re-bonjour,


je ne veux pas abuser de ton temps... et si ce que je demande est trop
long laisse tomber, mais je tiens quand m^me à mieux expliciter mon pb:
J'ai dans un classeur une colonne dans laquelle je rentre les noms des
salariés. Chaque nom de cette liste est reprise dans un autre classeur
dans la cellule B1, un onglet par nom. Je laisse quelques noms vides et
donc aussi des onglets pour d'éventuel remplaçants. Losque je lance ma
macro si je n'ai pas rempli du nb excact de feuilles la liste j'ai
plusieurs onglets qui ont en B1 la valeur 0 ce qui me génère le message
d'erreur dont j'ai déjà causé. Je compense aujourdh'hui en nommant la
liste vide (salarié 1, salarié 2, ect..)mais c pas génial
merci d'avoir pris la peine de me lire
cordialement
Marc
PS: si en plus on pouvait masquer automatiquement les onglets qui n'ont
pas de noms ce serait géant
merci encore




Avatar
anomymousA
re,

on est bien d'accord qu'il y a au moins autant d'onglets dans le classeur
destination que de noms dans l'onglet du classeur source. Je crois comprendre
( mais peut-être c'est pas sur) que tu as fait des liens entre le classeur
source et le classeur destination (du style dans l'onglet1 dans la cellule B1
du classeur destination, il y a la formule ='[classeur
source.xls]Feuil1'!$A$1 si on suppose que les noms des salariés sont inscrits
dans l'onglet Feuil dans la colonne A dansle fichier source).

Dans ces conditions

On Error Resume Next
For i = 1 To Sheets.Count
If Sheets(i).Range("A1").Value <> 0 Then
Sheets(i).Name = Sheets(i).Range("A1").Value
Sheets(i).Visible = True
Else
Sheets(i).Visible = False
End If
Next

If Err.Number <> 0 Then MsgBox "la dénomination d'au moins 1 feuille a posé
problème ou vous avez voulu nommer 2 feuilles par le même nom"

La procédure précédente scrute chacun des onglets du classeur destination,
vérifie si la celulle B1 de chque onglet est différente de 0.
Dans ce cas, elle inscrit ce qui est contenu dans B1 comme nom d'onglet,
sinon elle laisse l'ancien nom d'onglet mais masque la feuille. Si la valeur
de la cellule B1 a changé entre deux envois de la macro, la même détection
est faite et les onglets qui étaient cachés (car cellule B1=0) ne le seront
plus si tu as rentré un nom de salarié dans une cellule qui était vide dans
le classeur source.

si dans la cellule B1 , il y a un nom incompatible avec les règles de
dénomination d'un onglet ou bien si 2 salariés ont le même nom et donc qu'on
essaye de renommer une feuille avec un nom qui existe déjà, une erreur sera
générée et signalée en fin de programme.

A+


re,

En cas d'erreur, à quoi sert-il de renommer un onglet qui a déjà un nom de
toute façon ? Autant laisser le nom prédéterminé par Excel.
Dans ces qui suit, ta même procédure, mais quand Excel rencontre un problème
de dénomination d'un onglet, il laisse l'ancien nom.
Si tu veux absolument qu'Excel le renomme nomonglet(1), il faut gérer la
table des noms d'onglets et faire un test sur les onglest pour savoir où en
est la numérotation. C'est un peu plus compliqué mais faisable.
Je veux bien t'aider, mais je ne vais pas investir du temps si ce n'est pas
absolument nécessaire . A toi de voir. Me répondre si c'est essentiel.

Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count


Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error Resume Next
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
End Sub

A+




bonjour,

je ne comprends déjà pas à quoi sert Onglet = Format(texte, "") puisque
d'une part
Onglet ne te sert à rien dans ta procédure et d 'autre texte n'est pas défini.
Par ailleurs, comment est traitée pour nommer un onglet la barre " /"
sépratrice de dates.
Enfin, c'est logique de traiter par un message d'erreur la possibilité qu'il
y ait une même valeur de noms pour 2 feuilles .

M'enfin, si tu veux invalider le gestionnaire d'erreurs, tu enlèves les
instructions On Error GoTo mon_message et Exit Sub mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention").
Après , à tes risques et périls.

A+






Bonjour,
j'avais obtenu sur je ne sais plus quel site une macro que j'avais fait
adapté ici pour un gentil contibuteur. Il me reste un pb que mes
compétences ne me permettent pas de résoudre seul: je ne veux plus avoir
le message d'erreur "la feuille existe déjà" mais qu'il remplace tt
simplement le nom. j'espère avoir été assez clair
merci d'avance
voici la macro en question:

Sub renommer()
Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count
Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error GoTo mon_message
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
Exit Sub
mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention")
End Sub




Bonjour anonymousA et merci de ta réponse.
Je ne suis pas assez pointu pour comprendre à quoi serve les points dont
tu me parle ... Par contre la macro fonctionne et me permet de renommer
les onglets en fonction du résultat d'une formule dans une cellule. Pour
améliorer tt ça je voudrai qu'au lieu d'un message d'erruer il renomme
quand m^me cet onglet en rajoutant : "nom d'onglet(1)" par exemple. ça
me simplifirait sacrément les choses.
en tt cas merci pour ta contribution
cordialement
Marc

Re-bonjour,


je ne veux pas abuser de ton temps... et si ce que je demande est trop
long laisse tomber, mais je tiens quand m^me à mieux expliciter mon pb:
J'ai dans un classeur une colonne dans laquelle je rentre les noms des
salariés. Chaque nom de cette liste est reprise dans un autre classeur
dans la cellule B1, un onglet par nom. Je laisse quelques noms vides et
donc aussi des onglets pour d'éventuel remplaçants. Losque je lance ma
macro si je n'ai pas rempli du nb excact de feuilles la liste j'ai
plusieurs onglets qui ont en B1 la valeur 0 ce qui me génère le message
d'erreur dont j'ai déjà causé. Je compense aujourdh'hui en nommant la
liste vide (salarié 1, salarié 2, ect..)mais c pas génial
merci d'avoir pris la peine de me lire
cordialement
Marc
PS: si en plus on pouvait masquer automatiquement les onglets qui n'ont
pas de noms ce serait géant
merci encore







Avatar
MarcT
re,

on est bien d'accord qu'il y a au moins autant d'onglets dans le classeur
destination que de noms dans l'onglet du classeur source. Je crois comprendre
( mais peut-être c'est pas sur) que tu as fait des liens entre le classeur
source et le classeur destination (du style dans l'onglet1 dans la cellule B1
du classeur destination, il y a la formule ='[classeur
source.xls]Feuil1'!$A$1 si on suppose que les noms des salariés sont inscrits
dans l'onglet Feuil dans la colonne A dansle fichier source).

Dans ces conditions

On Error Resume Next
For i = 1 To Sheets.Count
If Sheets(i).Range("A1").Value <> 0 Then
Sheets(i).Name = Sheets(i).Range("A1").Value
Sheets(i).Visible = True
Else
Sheets(i).Visible = False
End If
Next

If Err.Number <> 0 Then MsgBox "la dénomination d'au moins 1 feuille a posé
problème ou vous avez voulu nommer 2 feuilles par le même nom"

La procédure précédente scrute chacun des onglets du classeur destination,
vérifie si la celulle B1 de chque onglet est différente de 0.
Dans ce cas, elle inscrit ce qui est contenu dans B1 comme nom d'onglet,
sinon elle laisse l'ancien nom d'onglet mais masque la feuille. Si la valeur
de la cellule B1 a changé entre deux envois de la macro, la même détection
est faite et les onglets qui étaient cachés (car cellule B1=0) ne le seront
plus si tu as rentré un nom de salarié dans une cellule qui était vide dans
le classeur source.

si dans la cellule B1 , il y a un nom incompatible avec les règles de
dénomination d'un onglet ou bien si 2 salariés ont le même nom et donc qu'on
essaye de renommer une feuille avec un nom qui existe déjà, une erreur sera
générée et signalée en fin de programme.

A+




re,

En cas d'erreur, à quoi sert-il de renommer un onglet qui a déjà un nom de
toute façon ? Autant laisser le nom prédéterminé par Excel.
Dans ces qui suit, ta même procédure, mais quand Excel rencontre un problème
de dénomination d'un onglet, il laisse l'ancien nom.
Si tu veux absolument qu'Excel le renomme nomonglet(1), il faut gérer la
table des noms d'onglets et faire un test sur les onglest pour savoir où en
est la numérotation. C'est un peu plus compliqué mais faisable.
Je veux bien t'aider, mais je ne vais pas investir du temps si ce n'est pas
absolument nécessaire . A toi de voir. Me répondre si c'est essentiel.

Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count


Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error Resume Next
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
End Sub

A+






bonjour,

je ne comprends déjà pas à quoi sert Onglet = Format(texte, "") puisque
d'une part
Onglet ne te sert à rien dans ta procédure et d 'autre texte n'est pas défini.
Par ailleurs, comment est traitée pour nommer un onglet la barre " /"
sépratrice de dates.
Enfin, c'est logique de traiter par un message d'erreur la possibilité qu'il
y ait une même valeur de noms pour 2 feuilles .

M'enfin, si tu veux invalider le gestionnaire d'erreurs, tu enlèves les
instructions On Error GoTo mon_message et Exit Sub mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention").
Après , à tes risques et périls.

A+







Bonjour,
j'avais obtenu sur je ne sais plus quel site une macro que j'avais fait
adapté ici pour un gentil contibuteur. Il me reste un pb que mes
compétences ne me permettent pas de résoudre seul: je ne veux plus avoir
le message d'erreur "la feuille existe déjà" mais qu'il remplace tt
simplement le nom. j'espère avoir été assez clair
merci d'avance
voici la macro en question:

Sub renommer()
Dim Dates, Onglet As String, i As Integer
For i = 1 To Sheets.Count
Sheets(i).Activate
Dates = ActiveSheet.Range("A1").Value
Onglet = Format(texte, "")
If Not IsEmpty(Dates) Then
On Error GoTo mon_message
ActiveSheet.Name = [A1]
End If
Next i
Sheets(1).Activate
Exit Sub
mon_message:
attention = MsgBox("La feuille existe déjà", vbOKOnly, "Attention")
End Sub




Bonjour anonymousA et merci de ta réponse.
Je ne suis pas assez pointu pour comprendre à quoi serve les points dont
tu me parle ... Par contre la macro fonctionne et me permet de renommer
les onglets en fonction du résultat d'une formule dans une cellule. Pour
améliorer tt ça je voudrai qu'au lieu d'un message d'erruer il renomme
quand m^me cet onglet en rajoutant : "nom d'onglet(1)" par exemple. ça
me simplifirait sacrément les choses.
en tt cas merci pour ta contribution
cordialement
Marc




Re-bonjour,
je ne veux pas abuser de ton temps... et si ce que je demande est trop
long laisse tomber, mais je tiens quand m^me à mieux expliciter mon pb:
J'ai dans un classeur une colonne dans laquelle je rentre les noms des
salariés. Chaque nom de cette liste est reprise dans un autre classeur
dans la cellule B1, un onglet par nom. Je laisse quelques noms vides et
donc aussi des onglets pour d'éventuel remplaçants. Losque je lance ma
macro si je n'ai pas rempli du nb excact de feuilles la liste j'ai
plusieurs onglets qui ont en B1 la valeur 0 ce qui me génère le message
d'erreur dont j'ai déjà causé. Je compense aujourdh'hui en nommant la
liste vide (salarié 1, salarié 2, ect..)mais c pas génial
merci d'avoir pris la peine de me lire
cordialement
Marc
PS: si en plus on pouvait masquer automatiquement les onglets qui n'ont
pas de noms ce serait géant
merci encore

C génial merci bcp et j'espère que je n'ai pas trop consomé de ton temps


cordialement
marc
bon week-end