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

laplayast

XLDnaute Occasionnel
Bonsoir,
Aucune reponse,ai-je omis un code de conduite sur le forum,je ne sais point.
Mais une réponse,m'aurait permis d'avancer.
Voici ma question:

Je viens de créer,une macro qui efface les cellules bleues après la création de la feuille modèle avec un bouton.Je l'ai ajouté à la fin du code suivant;pour quelle s'exécute en automatique;mais cela ne le fait pas.
Pourriez-vous,m'aider à le mettre en place.Ci-joint le code de la macro"effacebleues" à la fin du code.
Merci à tous.laplayast@+





Option Explicit
Sub affiche1()
UserForm1.Show

End Sub

Sub creation()
Dim Sh As Worksheet
Dim i As Integer
Dim j As Integer
Dim nu() As String
Sheets("modéle").Select
With Sheets("modéle")
If .Range("D14").Value = "" Then
Call MsgBox("Vous dever indiquer le LOT ", vbInformation, Application.Name)
.Range("D14").Select
Exit Sub
End If
If .Range("H14").Value = "" Then
Call MsgBox("Vous devez indiquez le N° de PV", vbInformation, Application.Name)
.Range("H14").Select
Exit Sub
End If
If .Range("C28").Value = "" Then
Call MsgBox("Vous devez indiquez L'EPAISSEUR", vbInformation, Application.Name)
.Range("C28").Select
Exit Sub
End If
If .Range("H28").Value = "" Then
Call MsgBox("Vous devez indiquez LA FORCE", vbInformation, Application.Name)
.Range("H28").Select
Exit Sub
End If
End With
For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
If j > i Then i = j
End If
End If
Next Sh
With Sheets("modéle")
.Copy after:=Sheets(Sheets.Count)
' On Error GoTo PbNomFeuille
ActiveSheet.Name = "modéle" & i + 1 '' référence"
End With
'
' on met les noms dans un tableau
ReDim nu(Sheets.Count)
For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
nu(j) = Sh.Name
End If
End If
Next Sh
' on recopie les données de l'avant dernier dans le dernier
For j = UBound(nu) To LBound(nu) Step -1
If nu(j) <> "" Then
i = 1
If j > 1 Then
Do
If nu(j - i) <> "" Then Exit Do
i = i + 1
If i > Sheets.Count Then Exit Do ' sortie si problème
Loop

i = j - i
Call recopie(nu(i), nu(j))
Else
Call recopie("modéle", nu(j))
End If
End If
Next j
End Sub

Private Sub recopie(nomforig As String, nomfdest As String)
Dim £j As Integer
With Sheets(nomfdest)
'copier les cellules"H28 à H34 et I28 à I34,de la feuille modèle _
vers la feuille modèle1, vers les cellules "C28 à D34
For £j = 28 To 34
.Range("C" & £j).Value = Sheets(nomforig).Range("h" & £j).Value
.Range("D" & £j).Value = Sheets(nomforig).Range("i" & £j).Value
Next £j
' compléter pour les cellules roses
.Range("C11").Value = Sheets(nomforig).Range("C11").Value
If .Range("k14").Value = "" Then .Range("D14").Value = Sheets(nomforig).Range("D14").Value
If .Range("l14").Value = "" Then .Range("H14").Value = Sheets(nomforig).Range("H14").Value
.Range("I11").Value = Sheets(nomforig).Range("I11").Value
.Range("H36").Value = Sheets(nomforig).Range("D36").Value
End With
End Sub
Sub effacebleues()
'
' effacebleues Macro
' Macro enregistrée le 06/04/2009 par toto
'

'
Range("H28:I32,H25").Select
Range("H25").Activate
Selection.ClearContents
End Sub
 
Re : Sans reponse

Bonsoir,

Aucune reponse,ai-je omis un code de conduite sur le forum,je ne sais point.
Personnellement, je n'ai pas compris les questions dans le precedent Post.
Quand on arrive sur ton fichier, on ne connait pas ton appli comme toi tu la connais. Il faut decrire un step by step, un "j'ai ça, je fais ça, je voudrais ça", etc ...

Le code que tu as rajouté fontionne, il faut qu'il soit invoqué par la macro qui le precede.
Soit tu mets : effacebleues avant le End Sub du code precedent.
Soit tu mets le code directement dans l'autre.

Sinon, je pense que ce n'est pas la peine de creer un nouveau Fil.
Et de mettre le code dans un Post. Le fichier comme tu l'avais fait la derniere fois c'etait mieux.

A te lire pour les precisions de l'autre probleme (dans l'autre Post)
 
Dernière édition:
Re : Sans reponse

Bonsoir,
Tout d'abord,merci de vos différentes réponses.Je vais essayer d'être un peu plus clair dans la procédure;et passer cela étape par étape.
Dans le fichier joint voici comment je l'utilise:

1/ il y a une feuille modéle;avec 3 boutons.

A partir du bouton "création feuille modèle" il s'ajoute "le modele1"et pour comprendre ce qui ce passe,pendant l'ajout de la feuille:les valeurs des cellules bleues,passent du côté des cellules jaunes,dans la feuille "modéle1"et cela à chaque ajout de feuille.
J'ai ajouté un bouton,"effacesbleues"pour avoir de nouveau les cellules bleues vides;je voudrais que cette action soit automatique,aussitôt après la création de la nouvelle feuille.
Merci de votre aide;j'espère avoir été assez simple.
laplayast@+
 

Pièces jointes

Re : Sans reponse

Bonjour,
Excellent,cela me va nickel chrome;merci de ton attention🙂.Mais reprenons la suite,de la seconde étape:
Sur la feuille "modèle" à la cellule 11,il y a un nombre: je voudrais que ce nombre devienne le nom de l'onglet.
Puis à la création de la feuille suivante,que cela passe au numero2,et ainsi de suite.
Numéro,de la cellule C11=nom de l'onglet.
Peux-tu,me construire quelque chose?et encore bravo à tous, car sans vous,je serai resté au macro classique qui sont limitées.
A bientôt laplayast@+
PS:se référer au fichier au dessus.
 
Re : Sans reponse

Bonsoir Laplayast, Catrice,

Je croyais qu'on avait convenu de ne plus écrire sur ce post, car il faisait doublon avec l'autre!!!!!

Mais bon, Laplayast, tu es nouveau sur le forum, cela ne fait que 49 messages que tu es là, c'est donc normal que tu comprenne pas notre façon de nous exprimer 😀

Mais bon... le but de ce forum étant d'être convivial et pédagogique, je répondrais donc à ta question ici

Laplayast à dit:
Sur la feuille "modèle" à la cellule 11,il y a un nombre: je voudrais que ce nombre devienne le nom de l'onglet

Code:
ActiveSheet.Name = Range("A11")

Ce qui signifie : donner le nom (ou chiffre) se trouvant dans la cellule A11 de la feuille où l'on est actuellement à la feuille sur laquelle on se trouve.

---------------------
Code:
Sheets("Coucou").Name = Range("A11")

Ce qui signifie : donner le nom (ou chiffre) se trouvant dans la cellule A11 de la feuille où l'on est actuellement à la feuille nommé "Coucou"

---------------------
Code:
Sheets("Coucou").Name = Sheets("Bravo").Range("A11")

Ce qui signifie : donner le nom (ou chiffre) se trouvant dans la cellule A11 de la feuille nommé "Bravo" à la feuille nommé "Coucou"

(tu peux faire cela même si tu te trouve sur une troisième feuille! - pas d'importance - de plus à la fin de ta macro, puisque je n'ai pas utiliser "Select", tu sera toujours sur la troisième feuille et pourra continuer à faire ce que tu faisais!)

---------------------
Code:
Sheets(1).Name = Range("A11")

Ce qui signifie : donner le nom (ou chiffre) se trouvant dans la cellule A11 de la feuille où l'on se trouve à la première feuille de ton fichier.
et cela quelque soit son nom! Pratique quand tu ne peux pas savoir à l'avance le nom que l'onglet aura

---------------------
Autre solution :
Code:
Sheets(1).Name = Sheets(2).Range("A11")

Je suppose que tu as compris ce que faisais ce code ci-dessus?

Laplayast à dit:
Puis à la création de la feuille suivante,que cela passe au numero2,et ainsi de suite

Déjà répondu sur ton autre fil.

Bonne soirée à toi

Cordialement
 
Dernière édition:
Re : Sans reponse

Bonjour,
Je comprend bien,ton code pour nommer l'onglet;mais peut-être n'ai je pas été assez explicite, dans mon résumé.
Le problème,c'est que la cellule"B11",à le numéro:222;comme point de départ.
A la prochaine création de feuille+1, la même cellule doit passer en 223 et la feuille se doit se nommer 223;et ainsi de suite.
En clair,la feuille et la cellule changent de valeur +1,à chaque ajout de feuille au travers du "bouton création feuille",le nom et identique à la cellule.
J'espère avoir été assez court.
MERCI de ton aide,à la mise en place du code,dans la feuille de la macro.
A bientôt ,à tous.🙂laplayast@+
 
Re : Sans reponse

Bonsoir Laplayast,

laplayast à dit:
Le problème,c'est que la cellule"B11",à le numéro:222;comme point de départ.
A la prochaine création de feuille+1, la même cellule doit passer en 223 et la feuille se doit se nommer 223;et ainsi de suite.
En clair,la feuille et la cellule changent de valeur +1,à chaque ajout de feuille au travers du "bouton création feuille",le nom et identique à la cellule

??? Ben le plus dur est fait! Il te suffit juste de rajouter à la fin de ta macro "création feuille" le code ci-dessous!

Code:
Sheets("Nom de ta feuille").Range("B11") = Sheets("Nom de ta feuille").Range("B11") + 1

Ainsi ta cellule [B11] prendra la valeur 223 et ainsi lorsque tu utilisera à nouveau le bouton "Création feuille", il donnera à la nouvelle feuille le chiffre 223, c'est à dire la nouvelle valeur contenu dans [B11], c-a-d la valeur souhaité!!!

Désolé de ne pas t'avoir donné la réponse dès mon premier post, cela me semblait si évident!

Joyeuse Pâque.
 
Re : Sans reponse

Bonsoir,
Je viens,de lire ton post et ton code je l'ajoute à la fin de mon code;mais cela ne me parait pas aussi simple;au vu de nombre de lignes.Il m'apparait des erreurs,quand je lance la "création de la feuille".
Peux-tu,m'aider et y regarder de plus près.Je suis quand même un débutant en VBA.
Qui,va piano va lontano😀.
merci de ton aide.laplayast
 
Re : Sans reponse

Bonsoir Laplayast,

C'était pour me tester? Ton numéro à incrémenter, sauf erreur n'est pas en B11 comme tu nous l'a dit, mais en B1! Non?

Si tu débute en VBA, il est d'autant plus important de bien organiser ton code, il sera ainsi plus clair et plus facile à comprendre 😉

Codes :
-> saut de ligne pour bien distinguer les différentes parties
-> les retraits de lignes plus ou moins grand pour mettre en évidence les boucles.
-> ne pas hésiter à mettre des commentaires soit en bout de ligne, soit au dessus de ta partie de code, pour expliquer ce que tu fais.

Tout cela te permettra de mieux t'y retrouver lors d'une prochaine modification! Car a chaud, tu baigne dedans, ça va à peu prés, mais dans 2-3 semaines?

Voici un exemple : (extrait de ton code ré-organisé)


Code:
Sub creation()
Dim Sh As Worksheet
Dim i As Integer
Dim j As Integer
Dim nu() As String

[COLOR="Red"][B]Sheets("modéle").Select[/B][/COLOR]

With Sheets("modéle")
  If .Range("C11").Value = "" Then
     Call MsgBox("Vous dever indiquer le Rang ", vbInformation, Application.Name)
[COLOR="Red"][B]     .Range("C11").Select[/B][/COLOR]
     Exit Sub
  End If

  If .Range("D14").Value = "" Then
     Call MsgBox("Vous devez indiquez le N° de Lot", vbInformation, Application.Name)
[COLOR="Red"][B]     .Range("D14").Select[/B][/COLOR]
     Exit Sub
   End If
   
  If .Range("H14").Value = "" Then
     Call MsgBox("Vous devez indiquez le N° de PV", vbInformation, Application.Name)
[COLOR="Red"][B]     .Range("H14").Select[/B][/COLOR]
     Exit Sub
   End If
   
End With

For Each Sh In Worksheets
  If Sh.Name <> "modéle" Then
      If InStr(Sh.Name, "modéle") > 0 Then
         j = CInt(Replace(Sh.Name, "modéle", ""))
         If j > i Then i = j
      End If
  End If
Next Sh

With Sheets("modéle")
   .Copy after:=Sheets(Sheets.Count)
   ' On Error GoTo PbNomFeuille[COLOR="Navy"]
   Range("B1") = Sheets(Sheets.Count - 1).Range("B1") + 1
   ActiveSheet.Name = "modéle" & ActiveSheet.Range("B1") [/COLOR]'référence
End With

Partie modifié répondant à ta question ci-dessous

Laplayast à dit:
Le problème,c'est que la cellule"B11",à le numéro:222;comme point de départ.
A la prochaine création de feuille+1, la même cellule doit passer en 223 et la feuille se doit se nommer 223;et ainsi de suite.
En clair,la feuille et la cellule changent de valeur +1,à chaque ajout de feuille au travers du "bouton création feuille",le nom et identique à la cellule

Partie vraiment nécessaire au bon fonctionnement de ta macro et utile?

Bonne soirée

PS. : je connaissais le dicton : "qui va piano va solo", mais pas "Qui,va piano va lontano". Mais pour ma défense, je ne parle pas le slovaque 🙂
 
Re : Sans reponse

Bonsoir,
Une partie,du code:La suite du commentaire,à la fin.

Sub creation()
Dim Sh As Worksheet
Dim i As Integer
Dim j As Integer
Dim nu() As String

Sheets("modéle").Select

With Sheets("modéle")
If .Range("C11").Value = "" Then
Call MsgBox("Vous dever indiquer le Rang ", vbInformation, Application.Name)
.Range("C11").Select
Exit Sub
End If

If .Range("D14").Value = "" Then
Call MsgBox("Vous devez indiquez le N° de Lot", vbInformation, Application.Name)
.Range("D14").Select
Exit Sub
End If

If .Range("H14").Value = "" Then
Call MsgBox("Vous devez indiquez le N° de PV", vbInformation, Application.Name)
.Range("H14").Select
Exit Sub
End If

End With

For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
If j > i Then i = j
End If
End If
Next Sh

With Sheets("modéle")
.Copy after:=Sheets(Sheets.Count)
' On Error GoTo PbNomFeuille
Range("C11") = Sheets(Sheets.Count - 1).Range("C11") + 1
ActiveSheet.Name = "modéle" & ActiveSheet.Range("C11") 'référence
End With

'
' on met les noms dans un tableau
ReDim nu(Sheets.Count)
For Each Sh In Worksheets
If Sh.Name <> "modéle" Then
If InStr(Sh.Name, "modéle") > 0 Then
j = CInt(Replace(Sh.Name, "modéle", ""))
nu(j) = Sh.Name
End If
End If
Next Sh
' on recopie les données de l'avant dernier dans le dernier
For j = UBound(nu) To LBound(nu) Step -1
If nu(j) <> "" Then
i = 1
If j > 1 Then
Do
If nu(j - i) <> "" Then Exit Do****BLOCAGE DE LA MACRO****
i = i + 1
If i > Sheets.Count Then Exit Do ' sortie si problème
Loop

i = j - i
Call recopie(nu(i), nu(j))
Else
Call recopie("modéle", nu(j))
End If
End If
Next j
effacebleues
End Sub
-------------------------------------------------------
merci de ton aide,la cellule "C11"passe à la valeur 2,avec la feuille modele2;mais le "nom" de celle-ci ne devient pas 2=à la cellule"C11"
Lors de l'exécution de la macro elle bloque voir zone en rouge.
Et,loin de moi de tester si tu suis; je me suis trompé.
peux-tu y regarder?
MERCI.LAPLAYAST@🙂
 
- 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
4
Affichages
179
Réponses
8
Affichages
233
Réponses
5
Affichages
241
Réponses
10
Affichages
281
Réponses
9
Affichages
201
Réponses
2
Affichages
154
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
481
Réponses
2
Affichages
202
Retour