Supprimer contenue de la case du dessous.
Résolu
Florian
-
Florian -
Florian -
Bonjour,
Je me tourne vers vous car j'ai un tableau excel à nettoyer.
J'ai un tableau d'environ 20.000 lignes, dans ce tableau j'ai une colonne (F) contenant des quantités, toute sont sous une case dont le contenue est le mot : "QTE:"
J'aimerais supprimer toute ces quantités (donc le contenue des cases, sous les cases "QTE:" de cette dite colonne.)
Je suis un peu larguer, mes bases en VBA sont très très loin.
Merci par avance pour votre aide !
Cordialement !
Florian
Je me tourne vers vous car j'ai un tableau excel à nettoyer.
J'ai un tableau d'environ 20.000 lignes, dans ce tableau j'ai une colonne (F) contenant des quantités, toute sont sous une case dont le contenue est le mot : "QTE:"
J'aimerais supprimer toute ces quantités (donc le contenue des cases, sous les cases "QTE:" de cette dite colonne.)
Je suis un peu larguer, mes bases en VBA sont très très loin.
Merci par avance pour votre aide !
Cordialement !
Florian
4 réponses
-
-
En version "tout cuit tombée du camion", ça donne :
Sub SupprLignes() Dim Num_Lignes(), DL As Long, i As Long, Flag As Boolean, Wsh As Worksheet, PlageDeRecherche As String '--------------------A ADAPTER Const Col As Byte = 3 'numéro de la colonne concernée (ici C) Const LignDeb As Byte = 2 'numéro de la première ligne colonne C Const Texte As String = "Commencé le" Set Wsh = Sheets("Feuil1") ' A ADAPTER le nom de la feuille concernée '----------------------------------------------------------------- With Wsh DL = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row PlageDeRecherche = .Range(.Cells(LignDeb, Col), .Cells(DL, Col)).Address Flag = FindAll(Texte, Wsh, PlageDeRecherche, Num_Lignes()) If Flag Then For i = 1 To UBound(Num_Lignes) .Cells(Num_Lignes(i) + 1, Col) = "" Next i End If End With End Sub Function FindAll(ByVal sText As String, ByRef oSht As Worksheet, ByRef sRange As String, ByRef arMatches()) As Boolean On Error GoTo Err_Trap Dim rFnd As Range, iArr As Integer, rFirstAddress Erase arMatches Set rFnd = oSht.Range(sRange).Find(what:=sText, LookIn:=xlValues, lookAt:=xlPart) If Not rFnd Is Nothing Then rFirstAddress = rFnd.Address Do Until rFnd Is Nothing iArr = iArr + 1 ReDim Preserve arMatches(iArr) arMatches(iArr) = rFnd.Row Set rFnd = oSht.Range(sRange).FindNext(rFnd) If rFnd.Address = rFirstAddress Then Exit Do Loop FindAll = True Else FindAll = False End If Err_Trap: If Err <> 0 Then MsgBox Err.Number & " " & Err.Description, vbInformation, "Find All" Err.Clear FindAll = False Exit Function End If End Function
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je -
Bonjour,
[ ANCIENNE REPONSE SUPPRIMEE ]
Oupss..
EDIT : Je viens de relire ta question....
En fait il va falloir trouver à quelle ligne se trouve le mot "QTE:"
Puis déterminer à quelle ligne s'arrête cette liste de quantité
Et enfin.. sélectionner cette plage de cellule et en faire un clear.
Cordialement,
Jordane-
Dans l'idéal.. il serait bien de fournir un fichier d'exemple pour que nous puissions regarder.
Tu peux utiliser ceci : https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
-
-
Bonjour Florian,
Mes salutations Jordane45,
Voici un exemple commentés pour adapter...Sub Suppr_Qttes() Dim Tabl(), DL As Long, i As Long '--------------------A ADAPTER Const Col As Byte = 6 'numéro de la colonne concernée (ici F) Const LignDeb As Byte = 2 'numéro de la première ligne colonne F With Sheets("Feuil1") ' A ADAPTER le nom de la feuille concernée '----------------------------------------------------------------- DL = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row Tabl = .Range(.Cells(LignDeb, Col), .Cells(DL, Col)).Value For i = 1 To UBound(Tabl) If Tabl(i, 1) <> "Qté:" Then Tabl(i, 1) = "" 'variante si erreur de saisie (exemple Qté : au lieu de Qté:) 'If Not Tabl(i, 1) Like "*Qté*" Then Tabl(i, 1) = "" Next i .Cells(LignDeb, Col).Resize(UBound(Tabl), 1) = Tabl End With End Sub
-
Super !
Ca marche !
Peut tu me décrire un peu ce que fais la partie :
DL = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row
Tabl = .Range(.Cells(LignDeb, Col), .Cells(DL, Col)).Value
For i = 1 To UBound(Tabl)
If Tabl(i, 1) <> "Qté:" Then Tabl(i, 1) = ""
'variante si erreur de saisie (exemple Qté : au lieu de Qté:)
'If Not Tabl(i, 1) Like "*Qté*" Then Tabl(i, 1) = ""
Next i
.Cells(LignDeb, Col).Resize(UBound(Tabl), 1) = Tabl
Merci en tous cas !DL = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row
Stocke le numéro de la dernière ligne non vide de la colonne numéro Col
------------------------------------------------Tabl = .Range(.Cells(LignDeb, Col), .Cells(DL, Col)).Value
Stocke le contenu du Range (1ere cellule, dernière cellule) de la colonne numéro Col dans une variable tableau
------------------------------------------------For i = 1 To UBound(Tabl)
boucle sur toute la variable tableau
------------------------------------------------If Tabl(i, 1) <> "Qté:" Then Tabl(i, 1) = ""
Si le contenu de la variable tableau à l'indice i est différent Qté: alors on en suprime le contenu
------------------------------------------------.Cells(LignDeb, Col).Resize(UBound(Tabl), 1) = Tabl
Restitue dans la feuille le contenu de la variable tableau
-
Ok et si je veut adapter cette formule à la colonne C , pour les cases en dessous des cases "Commencé le:"
Comment je peu faire, car la si je comprend bien ça supprimera tous les contenus différent de "Commencé le" (si j'adapte)
EDIT :
La modif suivante, fonctionne à peu près:
Sub Suppr_date()
Dim Tabl(), DL As Long, i As Long
Const Col As Byte = 3 'numéro de la colonne concernée (ici C)
Const LignDeb As Byte = 2 'numéro de la première ligne colonne C
With Sheets("Feuil1")
DL = .Columns(Col).Find("*", , , , xlByColumns, xlPrevious).Row
Tabl = .Range(.Cells(LignDeb, Col), .Cells(DL, Col)).Value
For i = 1 To UBound(Tabl)
If Tabl(i, 1) = "Commencé le:" Then Tabl(i + 1, 1) = ""
Next i
.Cells(LignDeb, Col).Resize(UBound(Tabl), 1) = Tabl
End With
End Sub
Le problème c'est que du coup dans les cases en dessous de "Taux horaire:" et "Total Matière Unitaire", j'ai des formules et ces formules disparaissent quand je fais tourner ma macro.
Les valeurs ne bouge pas mais les formules se font supprimer.....- Les valeurs ne bouge pas mais les formules se font suppr
Oui, car lorsque tu stockes le contenu de la colonne dans la variable tableau , tu n'en stockes que les valeurs :Tabl = .Range(.Cells(LignDeb, Col), .Cells(DL, Col)).Value
Si tu as des formules à conserver, il te faut procéder de manière tout à fait différente.
Regarde du côté de la méthode find, et particulièrement de la fonction personnalisée FindAll disponible ICI
-
-