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
A voir également:
- Supprimer contenue de la case du dessous.
- Supprimer rond bleu whatsapp - Guide
- Impossible de supprimer une page word - Guide
- Impossible de supprimer un fichier - Guide
- Supprimer pub youtube - Accueil - Streaming
- Supprimer compte instagram - Guide
4 réponses
En version "tout cuit tombée du camion", ça donne :
Avant, j'arrivais jamais à finir mes phrases... mais maintenant je
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
[ 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
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...
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 !
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.....
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 :
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
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