Supprimer une ligne d'un Array [Résolu]

lima08 10 Messages postés mercredi 19 février 2003Date d'inscription 23 mars 2015 Dernière intervention - 17 juin 2013 à 16:35 - Dernière réponse : ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention
- 19 juin 2013 à 13:15
Bonjour à vous tous

Débutant en vba.
Ma question je voudrais supprimer une ligne d'un tabeau.
J'ai bien regardé les exemples mais je ne vois aucune instrucruin "Delete" rows ou quelque chose approchant

merçi à vous


lima08javascript:void(0);
javascript:void(0);
Afficher la suite 

14 réponses

Répondre au sujet
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 juin 2013 à 16:38
+3
Utile
Bonjour,
il te faut pour cela nécessairement reconstruire ton array.
Ou encore (mais uniquement si l'ordre des données n'est pas important) :
donner à la ligne à supprimer la valeur de la dernière ligne de l'array, puis faire un redim preserve avec son Ubound - 1


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
lima08 10 Messages postés mercredi 19 février 2003Date d'inscription 23 mars 2015 Dernière intervention - 17 juin 2013 à 16:58
+3
Utile
Je vous remercie pour cette réponse rapide
Je vais essayer



lima08javascript:void(0);
javascript:void(0);
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lima08
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 juin 2013 à 17:23
+3
Utile
regarde (les 2 méthodes) ===>>

toto = Array("a", "b", "c", "d", "e")
'on veut supprimer "c", de rang 3
'méthode 1 (si l'on veut garder le même ordre"
ReDim titi(UBound(toto) - 1)
ou = 0
For i = 0 To UBound(toto)
  If i <> 2 Then
    titi(ou) = toto(i)
    ou = ou + 1
  End If
Next
'preuve:
For i = 0 To UBound(titi)
  MsgBox titi(i)
Next


Dim tata() '=====>>> important ici (ppour cette méthode)
tata = Array("a", "b", "c", "d", "e")
'on veut supprimer "c", de rang 3
'méthode 2 (si l'ordre n'est pas important)
tata(2) = tata(UBound(tata))
ReDim Preserve tata(UBound(tata) - 1)
'preuve:
For i = 0 To UBound(tata)
  MsgBox tata(i)
Next




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 17 juin 2013 à 23:07
+3
Utile
Et maintenant : histoire de rigoler un peu à la barre fixe, mais à la seule condition qu'aucune des valeurs ne contienne un espace ===>>>

toto = Array("bonjour", "salut", "ciao", "voilà", "bye")
'on va supprimer ciao
toto(2) = Chr(0)
titi = Join(toto)
tata = Replace(Replace(StrConv(titi, vbUnicode), Chr(0), ""), "  ", " ")
toto = Split(tata)
'preuve
For i =  0 To UBound(toto)
  MsgBox toto(i)
Next


Juste pour la beauté de l'art et juste dans ce cas-là (pas d'espaces dans les valeurs).
Bonne nuit.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 juin 2013 à 14:34
+3
Utile
lima08 me laisse seul ....
Bon. quelqu'un d'autre (quelques-uns d'autre) pour "gratter" mon code ?
C'est loin d'être un jeu. Je compte sur tous et vais dire pourquoi :
J'en suis déjà, pour le coup, à tenter (sans la moindre boucle), à insérer où l'on veut dans l'array un élément supplémentaire dans un array.
Le tout : sans même utiliser le redimensionnement par Ubound.
Il va de soi que je mettrais un terme à mes acrobaties si l'un de vos "grattages" du code de suppression conduisait à découvrir un bug.
L'importance d'un tel exercice ne vous échappera pas.
Je compte donc sur tous ceux qui voudront bien "gratter" mon code de suppression.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
lima08 10 Messages postés mercredi 19 février 2003Date d'inscription 23 mars 2015 Dernière intervention - 18 juin 2013 à 17:24
+3
Utile
Bonjour Ucfoutu
Non en règle général je cherche par moi meme.
Je suis un ancien de l'Info mais sur "grand system Z-Os."
Donc rien à voir avec ce style de code mais je trouve ca tres interressant.
En tout les cas pour virer une ligne en double dans un Array je n'y parviens pas.
Si vous avez le temps de regarder pas de probleme sinon encore merci
Bonne journée
lima08javascript:void(0);
javascript:void(0);
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lima08
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 juin 2013 à 17:37
+3
Utile
En tout les cas pour virer une ligne en double dans un Array je n'y parviens pas.

Mais cela, ce n'est plus le même problème !
Ta question était : comment supprimer une ligne.
Ta nouvelle question est comment déterminer un doublon (avant de le supprimer, donc, et tu sais maintenant comment supprimer)
Ouvre une autre discussion relative à ce seul point : comment déterminer l'index d'un doublon dans un array.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
lima08 10 Messages postés mercredi 19 février 2003Date d'inscription 23 mars 2015 Dernière intervention - 18 juin 2013 à 17:48
+3
Utile
Oui désolé de n'avoir pas posé la bonne question.
Je vais regarder de plus près
Encore merci
Bonne soirée

lima08javascript:void(0);
javascript:void(0);
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de lima08
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 19 juin 2013 à 13:15
+3
Utile
Tu mets du "vert" partout ...
Peu importe ! Question mal posée ou pas, voilà ce qu'elle a quand-même fini par provoquer ===>>> traitement de la question, telle que posée


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ucfoutu
NHenry 14134 Messages postés vendredi 14 mars 2003Date d'inscription 23 avril 2018 Dernière intervention - 17 juin 2013 à 18:45
0
Utile
Bonjour,

Essayes peut être d'instancier la classe Collection.
Dim MaCol as New Collection

v----Signature--------v----------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Commenter la réponse de NHenry
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 juin 2013 à 07:47
0
Utile
Bon...
Un ami m'a fait remarquer qu'il était dommage que mon acrobatie ne puisse traiter que si (comme je l'ai dit) valeurs sans espaces !
Je me retrousse donc les manches et les méninges et reviens vers vous dans un instant .
A +

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 juin 2013 à 08:09
0
Utile
Alors voilà le résultat de mes acrobaties matinales ===>>

A mettre dans un module standard

Option Explicit
Public Sub supprime_index(ByRef A, ind As Long)
  Dim A1 As String
  bascule A, True
  A(ind) = Chr(0)
  A1 = Join(A)
  A = Split(Replace(Replace(StrConv(A1, vbUnicode), Chr(0), ""), "  ", " "))
  bascule A, False
End Sub

Private Sub bascule(ByRef A, B As Boolean)
  Dim I As Long
  For I = 0 To UBound(A)
    A(I) = IIf(B, Replace(A(I), " ", Chr(1)), Replace(A(I), Chr(1), " "))
  Next
End Sub


Exemple d'utilisation :

toto = Array("bonjour les amis", "comment cela va ?", "bien", "tant mieux", "au revoir, donc")
 supprime_index toto, 1 '=====>>>>> on  supprime l'élément de rang 1 ("comment cela va ?")

Dim i As Long '_________________________
For i = 0 To UBound(toto) '             |
   MsgBox toto(i) '                     |====>> preuve
Next '__________________________________|


Fonctionne y compris si espaces dans les valeurs
Conserve l'ordre des éléments
(je me demande s'il ne convient pas d'en faire un snippet)...


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 juin 2013 à 11:09
0
Utile
Ouille !
Une plie m'a donné ce matin à la pêche une leçon de sagesse ! trop de tremplins me l'ont fait perdre !
Je suis donc revenu sur ma dernière méthode, estimant que deux boucles faisaient perdre du temps et qu'il ne serait pas idiot de s'en passer ===>> et voilà comment !
Dans un module standard :
Option Explicit
Public Sub supprime_index(ByRef A, ind As Long)
  A(ind) = ""
  A = Split(Replace(Join(A, Chr(0)), Chr(0) & Chr(0), Chr(0)), Chr(0))
End Sub

beaucoup plus court et rapide, non ? (Ne pas perdre le nord avec les caractères nulls. Ul "fleurissent toujours à la fin du printemps)
Exemple d'utilisation (ne change pas, lui) ===>>> :
toto = Array("bonjour les amis", "comment cela va ?", "bien", "tant mieux", "au revoir, donc")
 supprime_index toto, 1 '=====>>>>> on  supprime l'élément de rang 1 ("comment cela va ?")

Dim i As Long '_________________________
For i = 0 To UBound(toto) '             |
   MsgBox toto(i) '                     |====>> preuve
Next '__________________________________|




________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 18 juin 2013 à 11:23
0
Utile
A lima08,
J'ai besoin de toi ===>>>
teste autant que tu peux (à la recherche d'un éventuel bug) mon dernier code.
Si, comme je le pense, il est sans faille, je déposerai un snippet car il mpe parait valoir le coup, ce code n'existant nulle part ailleurs.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Commenter la réponse de ucfoutu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.