code à incrémenter +1 aisement

cocro

XLDnaute Junior
Bonjour,

je gère les réservations d'occupation de salles en différents points adresses sur ma zone : la salle a son identifiant que j'incremente de +1 à chaque nouvelle demande. (10 zones différentes et un patrimoine de 65 salles)
Cela pouvait se faire tranquillement à la main quand les réservations étaient rares mais maintenant, il me faut changer de méthode : j'atteints presque 500 lignes !
je rajoute la demande au fil de l'eau mais bien sûr, les adresses des salles ne se suivent plus... donc je galère un peu pour créer mon code "résa" unique et continu.

aussi, ma question est la suivante :
comment savoir "rapidement" le dernier incrément donné à une adresse ?
afin de ne pas créer de doublon et y rajouter immédiatement +1 ?

j'imaginais pouvoir créer une nouvelle feuille avec un tableau reprenant le nom de ma salle et le dernier numéro affecté. mais est-ce là la bonne méthode ?
je ne vois pas quelle fonction me permet de faire cela, quand au vba je ne me manie pas assez pour créer une macro de a à z.

pouvez-vous m'apporter votre aide ? et ainsi utiliser beaucoup plus intelligement xls.

Cordialement
Cocro
 
C

Compte Supprimé 979

Guest
Re : code à incrémenter +1 aisement

Salut Cocro,

Un petit fichier serait le bien venu, car même avec ton explication il n'est pas facile de comprendre ce que tu veux :confused:

A+
 

cocro

XLDnaute Junior
Re : code à incrémenter +1 aisement

ok pour pour de clarté
voici une copie très partielle de ce que je traite
j'espère que cela plus compréhensible

a+
Corinne
 

Pièces jointes

  • codeSalle.xls
    17 KB · Affichages: 109
C

Compte Supprimé 979

Guest
Re : code à incrémenter +1 aisement

Salut cocro,

Si tes numéro d'incrément se suivent (ce qui n'est pas le cas pour la salle 1 !?)

Tu peux mettre dans ta feuille "listesalle" en cellule B2 : =NB.SI(resa!A:A;listeSalle!A2)

Cela te donnera le nombre de réservation pour la salle 1 et donc le prochain incrément !

A+
 

cocro

XLDnaute Junior
Re : code à incrémenter +1 aisement

Merci, c'était si simple que j'en ai un peu honte.
toutefois, la remarque de non "suite" sur la salle 1 est réelle.
j'ai dû faire des suppresions de lignes pour des raisons diverses,

deux solutions devant moi :
1- refaire la série sur ma salle 1 et appliquer dorénavant la fonction nb.si
2- trouver une astuce pour générer la "suite"
et là j'ai de nouveau beoin de vos lumières

si vous savez comment contourner cela

a+
Corinne
 

cocro

XLDnaute Junior
Re : code à incrémenter +1 aisement

Bonjour,

en ce jour férié, je me suis lancée dans le grand bain vba pour trouver une solution à une "non continuité" dans mes saisies de réservations.
Avec ce bout de code, j'arrive à me localiser sur la dernière occurence dans ma liste mais, je ne sais pas comment copier cette info dans une feuille de suivie
et encore moins comment faire une boucle sur toutes les modalités de ma variable "maChaine".

Pouvez-vous m'aider à poursuivre mes efforts ?
Merci
Cocro

Code:
comptEqpt Macro
' Macro enregistrée le 08/05/2007 par cocro
' se positionne sur la dernière ligne de l"occurence d"une chaine
  
  Dim maChaine As String
  Dim CodEqpt As Range
  Dim R1 As Long, R2 As Long

  maChaine = "SALL001"
  
  Set CodEqpt = Range("D:D").Find(What:=maChaine, After:=Range("D1"), _
    LookIn:=xlValues, LookAt:=xlPart, Searchdirection:=xlPrevious)

  If CodEqpt Is Nothing Then
    MsgBox maChaine & " not found!"
    Exit Sub
  End If

  R2 = CodEqpt.Row
  For R1 = R2 - 1 To 1 Step -1
    If Cells(R1, 2).Value <> maChaine Then Exit For
  Next R1
  R1 = R1 + 1
  Range(Cells(R1, 2), Cells(R2, 2)).Select

  
End Sub
' comment continuer pour 
' recopier contenu cellule dans feuille nbequip
' continuer boucle avec toutes les autres valeurs possibles
 

Pierrot93

XLDnaute Barbatruc
Re : code à incrémenter +1 aisement

Bonjour Cocro

pour copier ta cellule dans la feuille "nbequip" en A1, essaye peut être le code ci dessous :

Code:
Range(Cells(R1, 2), Cells(R2, 2)).Copy Sheets("nbequip").Range("A1")

bon après midi
@+
 

cocro

XLDnaute Junior
Re : code à incrémenter +1 aisement

Merci, j'ai bloqué un peu trop vite sur cet aspect de recopie
car je bute d'avantage sur la création de ma liste des modalités

je peux pour faire simple taper la liste en dure dans la macro
mais si je crée d'autre "salle" j'oublierai certainement de les remonter dans cette liste
je pense qu'il faut pointer vers une zone donnée nommée dans ma feuille mais je ne sais faire.

merci de votre aide
Cocro
 
C

Compte Supprimé 979

Guest
Re : code à incrémenter +1 aisement

Salut Cocro,

J'ai apporté quelques substentielles :D modifications à ton fichier d'origine

1) pas de cellules donnée validation (risque d'être trop lourd)
2) Un Combobox à la place qui ce déplace en fonction de la cellule sélectionnée (sur une idée de Catrice)
3) Après sélection de la salle, l'incrément est calculé automatiquement (même si les réservations ne sont pas dans l'ordre)
4) La suppression d'une salle dans la colonne A, efface les données de la ligne

A voir si cela te plait, comme ça ;)
 

Pièces jointes

  • Cocro_codeSalle V2.xls
    40 KB · Affichages: 69

cocro

XLDnaute Junior
Re : code à incrémenter +1 aisement

Bonjour Bruno,

:) génial cette comobox !
je ne connaissais pas son fonctionnement donc je n'ai pas tenté cette hypothèse !
à y regarder de prêt dans le fichier que tu me retournes, cela reste encore mystérieux car je ne vois pas comment cela marche. :confused:
tu peux m'en dire plus pour le reproduire dans mon fichier source

pour parfaire mon vba, je cherche toujours à finir ma boucle et c'est quelque peu galère.

merci
cocro
 
C

Compte Supprimé 979

Guest
Re : code à incrémenter +1 aisement

Re Cocro,

Pour ce qui est de mon code, il faut :

1) recopier le code ci-dessous dans ta feuille de réservations
Code:
Option Explicit
Private Sub ComboBox1_Change()
  If ComboBox1.Value <> "" Then
    ' si le choix de la combobox est différend de vide
    Selection.Value = ComboBox1.Value
    ComboBox1.Visible = False
    Call SearchIncrement(Selection.Value)
    Range("C" & Selection.Row).Select
  End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
  ' Si l'utilisateur à supprimer le code salle
  If Target.Column = 1 And Target.Value = "" Then
    ' On efface toutes les informations de la ligne
    Range("B" & Target.Row).ClearContents
    Range("C" & Target.Row).ClearContents
  End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Column > 1 Then Exit Sub
  ' Si une réservation n'a pas déjà été effectuée
  If Range("B" & Target.Row) = "" Then
    With ComboBox1
      .Left = Selection.Left + Selection.Width
      .Top = Selection.Top
      .Value = ""
      .Visible = True
    End With
  Else
    ComboBox1.Visible = False
  End If
End Sub

2) Créer un nouveau module et y recopier celui là :
Code:
Sub SearchIncrement(ByVal MaSalle As String)
  Dim Cel As Range, DerLig As Integer
  Dim DernierInc As String, MemInc As String, NouveauInc As String, VInc As Integer
  ' Sort de la procédure si la salle est vide
  If MaSalle = "" Then Exit Sub
  ' Dernière ligne = dernière - 1
  DerLig = ActiveSheet.Range("A65536").End(xlUp).Row - 1
  DernierInc = ""
  For Each Cel In ActiveSheet.Range("A1:A" & DerLig)
    If Cel.Value = MaSalle Then
      MemInc = Range("B" & Cel.Row).Value
      If MemInc > DernierInc Then
        DernierInc = MemInc
      End If
    End If
  Next
  ' Si l'incrément à été trouvé
  If DernierInc <> "" Then
    VInc = Val(Right(DernierInc, 4))
    NouveauInc = Left(DernierInc, 8) & Format(VInc + 1, "0000")
  Else
    NouveauInc = MaSalle & "EQ0001"
  End If
  Range("B" & Selection.Row).Value = NouveauInc
End Sub

3) Dans ta feuille de réservations, avec la barre d'outils "Boîtes à outils controles" tu crées une zone de liste déroulante (ComboBox), qui devrait s'appeler "ComboBox1".
Si ce n'est pas le cas, tu peux changer le nom dans la "Zone de nom" de la barre de formule.
Un clique droit sur ta ComboBox, tu cliques ensuite sur propriété, et dans la propriété : ListFillRange tu mets le nom défini pour ta liste de salles.

Tu refermes ton fichier, tu l'ouvres de nouveau pour que le combobox puisse être utilisé.

Normalement si tout est correcte, en sélectionnant une cellule de la colonne A qui n'a pas de réservation, le comobo

J'espère avoir été assez clair ;)
 

cocro

XLDnaute Junior
Re : code à incrémenter +1 aisement

Bonsoir,

je découvre tardivement votre message
d'un 1er abord cela me semble assez "facile" à transposer dans mon contexte de travail (même si le vba et les macros ne sont pas encore un jeu d'enfant pour moi).
toutefois question :
où faut-il mettre la combobox dans ma feuille de calcul ?
en colonne B qui près un clic sur A -codsalle-, l'a fait apparaitre,
et une fois sélectionné le code incrémente la valeur en B -code resa- et le curseur se place en C -date-

si tel est le cas,
plus qu'à repérer les colonnes dans mon projet et l'incrémentation sera "aisée".
demain est un autre jour,
et je m'y attelerais les yeux reposés.

merci pour cette aide précieuse :)
je vous avise du bon (ou mauvais) déroulement au plus tôt

cordialement
cocro
 
C

Compte Supprimé 979

Guest
Re : code à incrémenter +1 aisement

cocro à dit:
Bonsoir,
je découvre tardivement votre message
Tu peux tutoyer sur le forum, tout le monde se connait :D

d'un 1er abord cela me semble assez "facile" à transposer dans mon contexte de travail (même si le vba et les macros ne sont pas encore un jeu d'enfant pour moi).
J'ai mis un nouveau fichier avec pleins d'explications dans le code, tu devrais t'en sortir.

toutefois question :
où faut-il mettre la combobox dans ma feuille de calcul ?

Oui, dans la feuille des réservations, regarde dans le fichier joint (c'est plus explicite)

en colonne B qui près un clic sur A -codsalle-, l'a fait apparaitre,
et une fois sélectionné le code incrémente la valeur en B -code resa- et le curseur se place en C -date-
Oui c'est ça, mais le combobox peut être placé n'importe ou dans la feuille, il est automatiquement placé ou il faut :
Code:
With ComboBox1
      [COLOR=blue][B].Left = Selection.Left + Selection.Width
      .Top = Selection.Top[/B][/COLOR]

si tel est le cas,
plus qu'à repérer les colonnes dans mon projet et l'incrémentation sera "aisée".
No problemo, tu devrais y arriver, sinon il y'a le forum ;)

J'ai mis en annotation le code qui faisait disparaitre la combobox
Code:
'ComboBox1.Visible = False
Comme ça tu va voir tout de suite ou elle est située, même la copier.

A+
 

Pièces jointes

  • Cocro_codeSalle V2.1.xls
    40.5 KB · Affichages: 51

cocro

XLDnaute Junior
Re : code à incrémenter +1 aisement

Bonjour Bruno,

merci beaucoup pour toute cette littérature si claire.
non seulement j'arrive à mes fins et en plus, je comprends pas à pas comment il faut faire pour le mettre dans mon contexte de travail et éventuellement letransposer dans un autre projet.:)

et dire que je partais en vrille dans mon code vba,
que je n'arrive pas à finir d'ailleurs (je ne dois pas savoir déclarer la liste de salle et finir ma boucle for next)

Merci à nouveau de partager le savoir et d'être si pédagoque
le vouvoiement ne peut être ici que le marque de respect :eek:

très cordialement
cocro
 

Statistiques des forums

Discussions
312 859
Messages
2 092 891
Membres
105 552
dernier inscrit
youcef.aksoum