Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Faire remonter les données d'une ligne a celle supérieur si celle-ci est vide

julien741

XLDnaute Nouveau
Bonjour,

Je sollicite votre aide car sur le fichier ci-joint, j'ai un problème sur le code VBA.
Lorsque j'appuie sur le bouton transfère dans l'onglet FPE1, les données se transfère dans l'onglet BDD.
Lors de se transfère les données des 3 lignes de chaque presse (colonne A) se fais en ligne dans l'onglet BDD.
Le problème est que si la première ligne n'est pas rempli celle-ci ne se transfère pas pour les ligne 2 et 3.
L'idée est donc de dire aprés le code "'Effacer les données que si le BT est soldé (colonne V)" de remonter les valeurs des lignes 2 en 1 et des lignes 3 en 2 sur chaque presse.
Mais j'ai du mal à le faire car je part sur dire collé les valeurs si la ligne 1 est vide.

Merci par avance de votre aide.

Cdt.
Julien.
 

Pièces jointes

  • Fiche à remplir entier pour 1jrs V7 essai1.xlsb
    987.8 KB · Affichages: 6
Solution
Bonjour @julien741

Si j'ai compris :

Cela remonte tes lignes par "groupe de 3"

VB:
Sub Decaler()
Dim i&
For i = 12 To 70 Step 3
    If Cells(i, 2) <> "" And Cells(i - 1, 2) = "" Then
        Range(Cells(i - 1, 2), Cells(i - 1, 24)) = Range(Cells(i, 2), Cells(i, 24)).Value
        Range(Cells(i, 2), Cells(i, 24)) = ""
    End If
    If Cells(i + 1, 2) <> "" And Cells(i, 2) = "" Then
        Range(Cells(i, 2), Cells(i, 24)) = Range(Cells(i + 1, 2), Cells(i + 1, 24)).Value
        Range(Cells(i + 1, 2), Cells(i + 1, 24)) = ""
    End If
Next i
TransfertBDD   'Appel de la procedure de transfert
End Sub

Il suffit de l'appeler et après faire le transfert

*Merci de ton retour

@Phil69970

julien741

XLDnaute Nouveau
Bonjour,

J'ai réussi a codé ca :
Set range1 = Range("B12:G12")
If Range("B11").Value = "" Then
range1.Copy
Range("B11:11").Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("B12:G12").ClearContents
End If

Set range1 = Range("B13:G13")
If Range("B12").Value = "" Then
range1.Copy
Range("B2:G2").Select
ActiveCell.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Range("B13:G13").ClearContents
End If

Le probléme c'est que je n'arrive pas à faire une boucle.
Seriez-vous m'aider?

Merci.

Julien.
 

Phil69970

XLDnaute Barbatruc
Bonjour @julien741

Si j'ai compris :

Cela remonte tes lignes par "groupe de 3"

VB:
Sub Decaler()
Dim i&
For i = 12 To 70 Step 3
    If Cells(i, 2) <> "" And Cells(i - 1, 2) = "" Then
        Range(Cells(i - 1, 2), Cells(i - 1, 24)) = Range(Cells(i, 2), Cells(i, 24)).Value
        Range(Cells(i, 2), Cells(i, 24)) = ""
    End If
    If Cells(i + 1, 2) <> "" And Cells(i, 2) = "" Then
        Range(Cells(i, 2), Cells(i, 24)) = Range(Cells(i + 1, 2), Cells(i + 1, 24)).Value
        Range(Cells(i + 1, 2), Cells(i + 1, 24)) = ""
    End If
Next i
TransfertBDD   'Appel de la procedure de transfert
End Sub

Il suffit de l'appeler et après faire le transfert

*Merci de ton retour

@Phil69970
 

julien741

XLDnaute Nouveau
Bonsoir Phil,

Merci pour le code, je viens d'essayer sur un fichier et cela fonctionne, mais j'ai pas mon fichier réel sur moi, je vais l'essayer la semaine prochaine et te redit mais je pense que cela devrait aller.
L'idée est de faire remonter la ligne 2 en ligne 1 si vide et la ligne 3 en ligne 2 si vide.
J'ai pensé a cela car en transférant les données avec la macro, j'ai vu que si je ne rempli pas la ligne 1 le remplissage ne se fait pas dans la BDD.

Je te redit la semaine pro, merci et bon weekend.
Julien.
 

julien741

XLDnaute Nouveau
Bonjour Phil,

J'ai tester le code, elle marche bien, mais le problème c'est que la dernière ligne disparait. le macro doit être effectuer que si la colonne U (solde le BT) on a un "OUI" dans une ligne.

exemple : sur la presse 10, les 3 lignes sont rempli, on appuie sur la macro est elle transfère les données dans l'onglet BDD et garde les données met le compteur de fin en début, si on met dans la colonne U un oui sur la ligne 2 alors la macro fait remonter la ligne 3 en 2, ou si le oui est sur la ligne 1 on fait remonter la ligne 2 et 3.

J'espère que je suis claire, car c'est pas simple.
Merci par avance de ton aide.
 

Phil69970

XLDnaute Barbatruc
Bonjour @julien741

J'ai pas tout compris :

sur la presse 10, les 3 lignes sont rempli, on appuie sur la macro est elle transfère les données dans l'onglet BDD

Remarques:
1)Dans le fichier que tu as fourni pour la presse 10 il n'y a que 2 lignes remplis et pas 3 (Voir image)
2)Je n'ai RIEN MODIFIER dans la macro de transfert donc si elle fonctionnait avant elle doit fonctionner après.

Si elle ne fonctionnait pas avant elle ne fonctionnera toujours pas, ouvre un post spécifique pour ce problème.

3)Il n'y a aucun "oui" dans la colonne U (solde BT) dans le fichier que tu as fourni et RIEN dans ta demande initial qui en parle !
Changer la règle du jeu en cours de partie c'est pas top.

4)Ce que fait ma macro :
Elle teste si la ligne 12 est vide ET si la ligne 11 est vide (si la ligne 11 est pleine on passe à la ligne 13)
Si ces 2 condition sont remplis (11 vide et 12 rempli) alors on copie la ligne 12 sur la ligne 11 et on efface la ligne 12.
On passe à la ligne 13 donc on teste si la ligne 12 est vide et la ligne 13 est rempli si ok alors on copie la ligne 13 sur la ligne 12 et on efface la ligne 13

On a fini de traiter la 1ere presse on passe au groupe de ligne 14/15/16 et on recommence les tests et déplacement si besoin
Elle remonte les lignes par groupes de 3 en fonction de la place qu'elle occupe
Et il me semble correspond à ta demande initial
*Si tu veux rajouter une condition cela ne doit pas être bien dur genre :

If Range("Uxx") = "oui" then .....

@Phil69970


 

julien741

XLDnaute Nouveau
Merci de ton retour Phil,
Tu as fais un très bon boulot, c'est moi qui me suis mal exprimer, ta formule fonctionne, merci.
J'ai vue une erreur de ma part dans la macro, je viens de corriger et cela fonctionne.
Effectivement si je fais des modif je dois ouvrir un autre post, désolé. car on est plus sur le même problème.
Je vais refaire mes essaies, mais pour ce que tu as fais c'est OK.
Au plaisir et merci du coups de main.
Cdt.
Julien.
 

Discussions similaires

Réponses
3
Affichages
203
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…