Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Amélioré le code

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

creolia

XLDnaute Impliqué
Bonjour a tous je reviens vers vous car j'essaie d'amélioré mon programme de gestion et faire en sorte qu'il soit évolutif je me débrouille un peut mais bon je reste un bleu.

j'utilise donc ce code

Code:
With Worksheets("FORMATION2")
DernLig = .Cells(.Columns(1).Cells.Count, 1).End(xlUp).Row + 1
  TextBoxNoOrdre = Application.WorksheetFunction.Max(.Range("A5:A" & DernLig)) + 1
  .Cells(DernLig, 1) = CLng(TextBoxNoOrdre)
  .Cells(DernLig, 2) = TextBoxNom
  .Cells(DernLig, 3) = TextBoxPrenom
  .Cells(DernLig, 4) = TextBoxService
  
End With

pour une de mes pages sauf que j'en ai 79 donc pour que cela fonctionne j'ai fais dans une macro le meme code mais en 79 fois changeant à chaque fois
With Worksheets("FORMATION2") par With Worksheets("FORMATION3")......ect


cela fonctionne bien sauf que à chaque fois j'ajoute une page à mon projet je doit ajouter ce code pour les différentes formation.


Ma première question est comment faire pour raccourcir ce code une serais de For i =.... je ne sais pas trop en vrais.


ma seconde question
comment pourrais je faire en sorte pour ne plus avoir besoin à chaque fois rajouter cette partis de code c'est a dire de rechercher le nombre de page avec FORMATION


j'ai mis le fichier d'origine c'est une version très légère

merci a tous pour votre aide
 

Pièces jointes

Re : Amélioré le code

Bonjour,

Si je me souviens bien, tu dois pouvoir faire une boucle de ce genre là :

Code:
Sub BoucleSurFeuille()

For i = 2 To 79
    
    NomFeuille = "FORMATION" & i
    
    With Worksheets(NomFeuille)
        DernLig = .Cells(.Columns(1).Cells.Count, 1).End(xlUp).Row + 1
        TextBoxNoOrdre = Application.WorksheetFunction.Max(.Range("A5:A" & DernLig)) + 1
        .Cells(DernLig, 1) = CLng(TextBoxNoOrdre)
        .Cells(DernLig, 2) = TextBoxNom
        .Cells(DernLig, 3) = TextBoxPrenom
        .Cells(DernLig, 4) = TextBoxService
    End With

Next

End Sub
 
Re : Amélioré le code

Bonjour GeoTrouvePas et un grand merci à toi en revanche sa m'oblige de changer 79 par 80 si j'ajoute une page supplémentaire aurais tu une astuce pour que je n'ai plus à changer a chaque fois que j'ajoute une nouvelle formation merci d'avance.
 
Re : Amélioré le code

Bonjour tout le monde

essayer avec

for each toto in worksheets
if left(toto,len("FORMATION"))="FORMATION" then
with toto
'traitement
end with
endif
next toto

comme ca sur le vive sans essayer...désolé
 
Re : Amélioré le code

Bonjour et merci à toi tbft

mais je comprend pas trop ton code ou puis je le placer et résous t'elle mes deux question je sais ont va me dire ta qu'a essayer pour voir mais j'aimerais savoir ou dois je le mettre svp merci
 
Re : Amélioré le code

bonjour
Code:
for each toto in worksheets
  if left(toto,len("FORMATION"))="FORMATION" then
    with toto

    'traitement
        DernLig = .Cells(.Columns(1).Cells.Count, 1).End(xlUp).Row + 1
        TextBoxNoOrdre = Application.WorksheetFunction.Max(.Range("A5:A" & DernLig)) + 1
        .Cells(DernLig, 1) = CLng(TextBoxNoOrdre)
        .Cells(DernLig, 2) = TextBoxNom
        .Cells(DernLig, 3) = TextBoxPrenom
        .Cells(DernLig, 4) = TextBoxService
    end with
  endif
next toto

la boucle for each permet de parcourir toute les feuilles
mais le if de dessous filtre les feuilles dont le nom commence par "FORMATION" (si je ne me suis pas trompé😛)
 
Re : Amélioré le code

Bonjour à tous,

perso m'étonnerait que cela fonctionne sans utilisation de la propriété "name" de la feuille

Code:
for each toto in worksheets
  if left(toto[COLOR="Red"][B].Name[/B][/COLOR],len("FORMATION"))="FORMATION" then

sinon on peut également coder ainsi :
Code:
Dim ws As Worksheet
For Each ws In Worksheets
  If ws.Name Like "FORMATION*" Then
  
  End If
Next


bonne soirée
@+
 
Re : Amélioré le code

Bonjour pierrot j'ai tenter ta proposition comme ceci



Code:
Dim ws As Worksheet
For Each ws In Worksheets
  If ws.Name Like "FORMATION*" Then
  

DernLig = .Cells(.[COLOR="RoyalBlue"]Columns[/COLOR](1).Cells.Count, 1).End(xlUp).Row + 1
        TextBoxNoOrdre = Application.WorksheetFunction.Max(.Range("A5:A" & DernLig)) + 1
        .Cells(DernLig, 1) = CLng(TextBoxNoOrdre)
        .Cells(DernLig, 2) = TextBoxNom
        .Cells(DernLig, 3) = TextBoxPrenom
        .Cells(DernLig, 4) = TextBoxService
    End With
  End If
Next


malheureusement j'ai une erreur

reference incorrect ou non qualifier avec colummss surlignée en bleu

je continue mes recherche merci a tous
 
Re : Amélioré le code

Re,

il semble qu'il manque un "with", et pour déterminer la première cellule vide de la colonne A je ferais ainsi :
Code:
For Each ws In Worksheets
  If ws.Name Like "FORMATION*" Then  
with ws
DernLig = .Range("A65536").End(xlUp).Row + 1
        TextBoxNoOrdre = Application.WorksheetFunction.Max(.Range("A5:A" & DernLig)) + 1
        .Cells(DernLig, 1) = CLng(TextBoxNoOrdre)
        .Cells(DernLig, 2) = TextBoxNom
        .Cells(DernLig, 3) = TextBoxPrenom
        .Cells(DernLig, 4) = TextBoxService
    End With
  End If
Next
 
- 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
35
Affichages
2 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…