retirer valeur 78 et 12 du tableau temporaire

carlos

XLDnaute Impliqué
Supporter XLD
Bonsoir le forum

J'aimerais savoir comment faire pour retirer d'un tableau temporaire certaines valeurs précises? .

voir piece jointe

Dim i As Integer
Dim TabTemp(1 To 100) As Variant
Columns(1).ClearContents
For i = 1 To 100
TabTemp(i) = i
Next
MsgBox 'Maintenant,comment retirer la valeur 78 et 12 du TabTemp sans passer par les cellules'

merci carlos
 

Hervé

XLDnaute Barbatruc
re carlos

pour pouvoir modifier les dimensions d'un tableau, il te faut d'abord comprendre qu'il y a deux facon de fixer ses dimensions.

soit lors de la déclaration : dim tabtemp (1 to 100) as variant (ton exemple)

soit dynamiquement à travers le code.

si tu la défini dans ta déclaration, tu ne peux plus modifié ses dimensions.

sinon, tu peux le faire à travers l'instruction redim : redim tabtemp (1 to 200), ici je redimenssionne à la hausse le tableau.

le problème du redim, c'est que non seulement il redimensionne mais en plus il efface les données existantes.

pour conserver les données on rajoute preserve, qui veut bien dire sa fonction :

redim preserve tabtemp(1 to 200)

ici, on a redimensionné et garder les valeurs.

pour ton souci (si j'ai bien compris) tu ne peux pas directement retirer une valeur d'un tableau.

il te faut faire une boucle pour 'ecraser' la valeur inutile.

puis redimensionné celui-ci :


Dim i As Integer
Dim TabTemp() As Variant

Columns(1).ClearContents
For i = 1 To 100
ReDim Preserve TabTemp(1 To i)
TabTemp(i) = i
Next

'retire la valeur 12
For i = 13 To 100
       
TabTemp(i - 1) = TabTemp(i)
Next i

'retire la valeur 78
For i = 78 To 100
       
TabTemp(i - 1) = TabTemp(i)
Next i

'on redimensionne le tableau
ReDim Preserve TabTemp(1 To 98)

MsgBox
UBound(TabTemp) 'pour test


tu vois qu'ici, je n'ai pas dimensionné le tableau lors de sa déclaration, mais dynamiquement dans le code grace à redim preserve.

si tu veux manipuler des données facilement : retirer ou ajouter des valeurs, il existe un autre type de tableau : les collections.

mais ca, c'est une autre histoire.

salut

ps : j'espère ne pas avoir dit trop de c......ies :unsure:
 

pat1545.

XLDnaute Accro
Salut,

suis pas top en tableau mais ceci fait une boucle de et n'y mets les valeurs 12 et 78 mais il y a certainement mieux

Sub moinss()
Columns(1).ClearContents
Dim i As Integer
Dim TabTemp(1 To 100, 1 To 1) As Variant
Dim Plg As Range
Set Plg = Range('A1:A100')
For i = 1 To 100
If i = 12 Or i = 78 Then
GoTo suivant
End If
TabTemp(i, 1) = i
suivant:
Next
Plg = TabTemp
End Sub

Bye
 

carlos

XLDnaute Impliqué
Supporter XLD
Bonsoir Hervé , bonsoir Pat1545bonsoir le forum

D'abord merci pour ta présnce sur ce forum.
Tu été là ce matin pour me donner un sacré coup de main et me faire avancé et tu es encore ici ce soir à m'expliquer les dimensions d'un tableau.

Je peux te rassuré , tu ne raconte pas de C ......
Bref ....

En faite les deux sujets (ce matin et ce soir) se rejoignent un peu.
donc suite à ta réponse de ce matin , j'ai réussi à intégrer ta proposition dans mon projet SAUF QUE j'ai plusieurs périodes de vacances (Eh oui).Aie !!!!!
j'en avais proposé qu'une pour simplifier les choses en pensant regler le probleme plus tard mais ....J'ai pas réussi à gerer .
C'est pour cela que j'ai choisi une autre formule,celle que je proposée dans ce post mais à priori c'est pas aussi facile que ca .

En résumé le fichier joint est plus parlant:

Je souhaite remplir un tableau temporaire de tous les 'lundis' entre 2 dates.Puis lui retirer tous les lundis des multiples vacances .(Voir onglet 'vacances')

Je crois que c'est moi qui dit des C.........s


Si quelqu'un me comprends , voici exactement ce que je veux au final .Voir Pj [file name=TabTemp_20060326193438.zip size=13018]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TabTemp_20060326193438.zip[/file]
 

Pièces jointes

  • TabTemp_20060326193438.zip
    12.7 KB · Affichages: 18

pierrejean

XLDnaute Barbatruc
bonjour carlos

bonjour Hervé


Hervé a parfaitement répondu à la question posée avec en prime toutes les explications souhaitables

pour ma part je vais faire ce que j'essaie de ne pas faire habituellement à savoir répondre à une autre question:

comment ne pas enregistrer 12 et 78 dans le TableTemp (ce qui evite d'avoir à les retirer) [file name=RetirerUneValeur.zip size=7587]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/RetirerUneValeur.zip[/file]

mes excuses à tous je n'avais pas rafraichi

Message édité par: pierrejean, à: 26/03/2006 20:06

Message édité par: pierrejean, à: 26/03/2006 20:07
 

Pièces jointes

  • RetirerUneValeur.zip
    7.4 KB · Affichages: 16

Hervé

XLDnaute Barbatruc
re carlos, bonsoir pat, pierrejean

essayes comme ceci :


Private Sub CommandButton2_Click()
Dim jour As Date
Dim tablo() As Date
Dim x    As Integer, i As Integer, j As Integer
Dim derligne As Byte
Dim present As Boolean
Dim tabvacances() As Date

Columns(1).ClearContents

'on crée un tableau avec tous les jours des vacances
With Sheets('vacances')
        derligne = .Range('a65536').End(xlUp).Row
       
For i = 5 To derligne
               
For jour = .Cells(i, 1) To CDate(.Cells(i, 2))
                        x = x + 1
                       
ReDim Preserve tabvacances(1 To x)
                        tabvacances(x) = jour
               
Next jour
       
Next i
End With

x = 0

For jour = CDate(TextBox1) To CDate(TextBox2)
        present =
False
       
If Weekday(jour) = Val(TextBox3.Value) Then
       
'puis on compare les jours avec le taleau des vacances
               
For j = 1 To UBound(tabvacances)
               
'si le jour est présent alors on passe le boolean present à vrai
                       
If jour = tabvacances(j) Then present = True: Exit For
               
Next j
               
               
'si le jour n'est pas présent, on alimente le tablo
               
If Not present Then
                        x = x + 1
                       
ReDim Preserve tablo(x)
                        tablo(x) = jour
               
End If
       
End If
Next jour

If Not x = 0 Then
       
For i = 1 To UBound(tablo)
                Cells(i, 1) = tablo(i)
       
Next i
End If
End Sub


si tu ne comprend pas un point, n'hésites pas à revenir.

tu n'aurais pas un souci d'année dans tes texbox ? tu commences en 2004 ?

j'ai pas trop testé

salut
 

Hervé

XLDnaute Barbatruc
re tout le monde

tout à l'heure je parlais d'utiliser des collections.

voici appliquer à ton soucis, ce que ca pourrait donner.

il me semble que le code est plus lisible.


Private Sub CommandButton2_Click()
Dim jour As Date
Dim data As Collection
Dim i As Integer, j As Integer, x As Integer
Dim derligne As Byte
Dim tabvacances() As Date

Columns(1).ClearContents
Set data = New Collection

'on crée un tableau avec tous les jours des vacances
With Sheets('vacances')
        derligne = .Range('a65536').End(xlUp).Row
       
For i = 5 To derligne
               
For jour = .Cells(i, 1) To CDate(.Cells(i, 2))
                        x = x + 1
                       
ReDim Preserve tabvacances(1 To x)
                        tabvacances(x) = jour
               
Next jour
       
Next i
End With

'on alimente la collection avec seulement les lundi
For jour = CDate(TextBox1) To CDate(TextBox2)
       
If Weekday(jour) = Val(TextBox3.Value) Then
                data.Add jour,
CStr(jour)
       
End If
Next jour

'on compare le tableau vacances avec la collection jour
'si le jour est présent on le retire de la collection
For i = data.Count To 1 Step -1
       
For j = 1 To UBound(tabvacances)
               
If data(i) = tabvacances(j) Then
                        data.Remove
CStr(data(i))
               
End If
       
Next j
Next i

For i = 1 To data.Count
        Cells(i, 1) = data(i)
Next i
End Sub


salut :)
 

carlos

XLDnaute Impliqué
Supporter XLD
Tout ce que je vais dire est sincére .

Il est 21h21 et je découvre plusieurs réponses de Hervé à mes demandes , un suivi depuis ce matin de MichelXld, un conseil de Robert....
Je suis impréssionné par les membres de ce site et de leurs qualités , de leurs rapidités.
En plus j'ai fait tourné en rond un peu Hervé depuis ce matin (moi meme à la recherche d'une solution)par 2 posts....
Et sa réponse est toujours aussi courtoise et orientée sur une aide pédagogique et respectueuse.
Apres mon dernier post je me suis dit que j'abusais et que finallement je ne méritais aucune réponse.Eh bien , NON j'en ai eu 2,et 2 orientations différentes qui me laissent le choix en dernier recours .Que demander de mieux ? Rien........
Alors là ,Bravo à tous et merci encore pour ce merveilleux site .
On a presque envie d'inventer des questions pour vous entendre nous aider .

Carlos

Sur ce , j'ai du boulot ce soir .....
 

pierrejean

XLDnaute Barbatruc
bonsoir carlos

j'ai amplement profité des explications de Hervé

je te laisse le plus difficile:

controler que je ne me suis pas planté (ça ne m'arrive pas plus d'1 fois sur 2)

Bonne nuit [file name=TabTemp_20060326213800.zip size=17295]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TabTemp_20060326213800.zip[/file]
 

Pièces jointes

  • TabTemp_20060326213800.zip
    16.9 KB · Affichages: 17

pierrejean

XLDnaute Barbatruc
bonjour carlos

effectivement
en faisant le tableau des jours de vacances j'avais rentré le lundi(2) en dur

version corrigée

mais je t'engage à repartir sur les propositions d'Hervé que je vais potasserau niveau des tableaux (le Redim n'est pas evident) [file name=TabTemp_20060327082413.zip size=17384]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/TabTemp_20060327082413.zip[/file]
 

Pièces jointes

  • TabTemp_20060327082413.zip
    17 KB · Affichages: 21

Discussions similaires

Réponses
23
Affichages
1 K

Statistiques des forums

Discussions
311 725
Messages
2 081 941
Membres
101 848
dernier inscrit
Djigbenou