Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

alex53

XLDnaute Junior
Bonjour le forum,
je viens avec une demande bien precise pour une aide en VBA. Pour l'instant ce forum m'a toujours beaucoup aide, j'espere que cela va continuer.

Je m'explique sur ce que je souhaite (toutes les informations sont cependant dans le fichier avec l'exemple simplifie ci-joint):
j ai une serie de lignes d'informations. Je souhaite tout d'abord intercaler une ligne vide entre chaque ligne (ca, ca marche dans mon exemple).
Ensuite, je souhaite remplir la ligne vide avec l'information qui se trouve juste au dessus (avoir donc 2 fois l'information), sauf pour une information qui provient de la cellule d'a cote.

Le plus simple est de regarder mon exemple, tout est tres clair je pense.

Merci pour votre aide.
J'attends avec impatience vos propositions.

Alex53
 

Pièces jointes

  • Exemple pour VBA.xlsm
    21.4 KB · Affichages: 114

ROGER2327

XLDnaute Barbatruc
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Bonjour alex53


Essayez cela :​
VB:
Sub Intercaler()
Dim Lg&, i%
    Application.ScreenUpdating = False
    Lg = Range("d" & Rows.Count).End(xlUp).Row
    
    For i = Lg + 1 To 3 Step -1
        If Not IsEmpty(Cells(i - 1, "d")) Then
            Cells(i, "d").EntireRow.Insert
            Rows(i).Resize(1, 2).Value = Rows(i - 1).Resize(1, 2).Value
            Cells(i, 3).Value = Cells(i - 1, 4).Value
            Cells(i - 1, 4) = Empty
        Else
            i = i - 1
        End If
    Next i
End Sub



ROGER2327
#5897


Samedi 7 Merdre 139 (Nativité de Monsieur Plume, propriétaire - fête Suprême Quarte)
5 Prairial An CCXX, 5,1972h - canard
2012-W21-4T12:28:24Z
 

alex53

XLDnaute Junior
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Magnifique!
Exactement ce que je souhaite!

Comme j'ai l'impression que c'etait un peu facile, je me permet de remettre un autre exemple (suite du premier en un peu plus complexe) que je n'arrive pas a resoudre entierement malgre votre premiere aide. (j'avais un peu simplifie mon vrai probleme dans le premier exemple).

Tout est explique dans le fichier

En tout cas merci beaucoup pour le coup de main.
Alex53
 

Pièces jointes

  • Exemple pour VBA 3.xlsm
    23.5 KB · Affichages: 108

ROGER2327

XLDnaute Barbatruc
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Re...


Pour déterminer le nombre de lignes à traiter, il ne faut pas prendre la colonne G comme référence : elle est pleine de trous...

Essayez cela :​
VB:
Sub Intercaler()
Dim Lg&, i%
    Application.ScreenUpdating = False
    Lg = Range("A" & Rows.Count).End(xlUp).Row
    
    For i = Lg + 1 To 3 Step -1
        If Not IsEmpty(Cells(i - 1, "A")) Then
            Cells(i, "A").EntireRow.Insert
            Rows(i).Resize(1, 2).Value = Rows(i - 1).Resize(1, 2).Value
            
            Cells(i, 3).Value = Cells(i - 1, 4).Value
            Cells(i - 1, 4) = Empty
            
            Cells(i, 6).Value = Cells(i - 1, 7).Value
            Cells(i - 1, 7) = Empty
            
            Cells(i, 5) = "CN"
        Else
            i = i - 1
        End If
    Next i
End Sub



ROGER2327
#5900


Samedi 7 Merdre 139 (Nativité de Monsieur Plume, propriétaire - fête Suprême Quarte)
5 Prairial An CCXX, 6,1651h - canard
2012-W21-4T14:47:46Z
 

alex53

XLDnaute Junior
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Re-

En fait j'avais pris la colonne G comme référence, car je ne souhaite intercaler une ligne que lorsque les cellules de la colonne G ou C sont remplies.

Si je prends la colonne A comme référence, alors toutes les lignes sont dédoubler. Il faut alors en plus le code suivant:
Si dans une même ligne la cellule C et la cellule G sont vides, alors il faut supprimer toute la ligne (et ce pour toutes les lignes)
Malheureusement je suis nul en VBA. Pourriez-vous m'aider pour ce petit bout de code ?

Merci beaucoup

Alex53
 

ROGER2327

XLDnaute Barbatruc
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Bonjour alex53


(...) Si dans une même ligne la cellule C et la cellule G sont vides, alors il faut supprimer toute la ligne (et ce pour toutes les lignes) (...)
Ce détail m'avait échappé. Essayez cela :​
VB:
Sub Intercaler()
Dim Lg&, i%
    Application.ScreenUpdating = False
    Lg = Range("A" & Rows.Count).End(xlUp).Row
   
    For i = Lg + 1 To 3 Step -1
        If IsEmpty(Cells(i - 1, "D")) And IsEmpty(Cells(i - 1, "G")) Then
            i = i - 1
        Else
            Cells(i, "A").EntireRow.Insert
            Rows(i).Resize(1, 2).Value = Rows(i - 1).Resize(1, 2).Value
           
            Cells(i, 3).Value = Cells(i - 1, 4).Value
            Cells(i - 1, 4) = Empty
           
            Cells(i, 6).Value = Cells(i - 1, 7).Value
            Cells(i - 1, 7) = Empty
           
            Cells(i, 5) = "CN"
        End If
    Next i
End Sub



ROGER2327
#5905


Dimanche 8 Merdre 139 (Cocuage de Monsieur le Père Ubu - fête Suprême Seconde)
6 Prairial An CCXX, 0,0328h - mélisse
2012-W21-5T00:04:44Z
 

alex53

XLDnaute Junior
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Bonjour le forum
Bonjour Roger et encore merci pour votre aide.

Tout marche comme je le souhaite.
Il reste cependant un petit "couac" que j'arrive pas a resoudre:
J'ai applique le code a mon fichier. Cela fonctionne mais pas pour toute les lignes.... et je n'arrive pas a comprendre pourquoi cela marche seulement dans 90% des cas. Je ne comprends pas quel est le point commun entre les 10% ne fonctionnant pas.

En FJ, vous trouverez mon exemple. par exemple la cellule Q11 ne marche pas. Par contre j'ai remarque que si je rajoute un montant dans la cellule Q12, alors cela fonctionne pour Q11 et pour Q12.
Etrange, non?
 

Pièces jointes

  • Exemple pour VBA avec vrai exemple OK 2.xlsm
    89.2 KB · Affichages: 71

ROGER2327

XLDnaute Barbatruc
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Bonjour alex53



Bonjour le forum
Bonjour Roger et encore merci pour votre aide.

Tout marche comme je le souhaite.
Il reste cependant un petit "couac" que j'arrive pas a resoudre:
J'ai applique le code a mon fichier. Cela fonctionne mais pas pour toute les lignes.... et je n'arrive pas a comprendre pourquoi cela marche seulement dans 90% des cas. Je ne comprends pas quel est le point commun entre les 10% ne fonctionnant pas.

En FJ, vous trouverez mon exemple. par exemple la cellule Q11 ne marche pas. Par contre j'ai remarque que si je rajoute un montant dans la cellule Q12, alors cela fonctionne pour Q11 et pour Q12.
Etrange, non?
Rien d'étrange là-dedans. Vous écrivez :
VB:
For i = Lg + 1 To 3 Step -1
        If IsEmpty(Cells(i - 1, "P")) And IsEmpty(Cells(i - 1, "S")) Then
            i = i - 1
        Else

            'code

    Next i
Ce faisant, lorsque IsEmpty(Cells(i - 1, "P")) And IsEmpty(Cells(i - 1, "S")) est vrai, vous ne testez pas la ligne i-1 à la boucle suivante, mais la ligne i-2. Si vous voulez tester la ligne i-1, il ne faut pas ajouter de décalage d'une ligne supplémentaire ! Il suffit donc de supprimer la ligne i = i -1, ou mieux encore, remplacer les trois lignes
VB:
        If IsEmpty(Cells(i - 1, "P")) And IsEmpty(Cells(i - 1, "S")) Then
            i = i - 1
        Else
par la seule ligne
VB:
        If Not IsEmpty(Cells(i - 1, "P")) Or Not IsEmpty(Cells(i - 1, "S")) Then




ROGER2327
#5911


Jeudi 12 Merdre 139 (Saintes Miches, catéchumènes - fête Suprême Quarte)
10 Prairial An CCXX, 6,2243h - faux
2012-W22-2T14:56:18Z
 

alex53

XLDnaute Junior
Re : Remplir une cellule vide avec l'info du dessus-VBA-+ new probleme STEP

Bonjour le Forum,
Je me permets de remonter un vieux sujet que j'avais creer car j'ai une petite question. Le forum m'a grandement aide pour ecrire mon code, mais il y a un point que je ne comprends pas, c'est le For i = Lg + 1 To 3 Step -1
Voici le code que m'avait donne ROGER 2327

Code:
Sub Intercaler()
Dim Lg&, i%
    Application.ScreenUpdating = False
    Lg = Range("A" & Rows.Count).End(xlUp).Row
   
[B]    For i = Lg + 1 To 3 Step -1[/B]        
If IsEmpty(Cells(i - 1, "D")) And IsEmpty(Cells(i - 1, "G")) Then
            i = i - 1
        Else
            Cells(i, "A").EntireRow.Insert
            Rows(i).Resize(1, 2).Value = Rows(i - 1).Resize(1, 2).Value
           
            Cells(i, 3).Value = Cells(i - 1, 4).Value
            Cells(i - 1, 4) = Empty
           
            Cells(i, 6).Value = Cells(i - 1, 7).Value
            Cells(i - 1, 7) = Empty
           
            Cells(i, 5) = "CN"
        End If
    Next i
End Sub

Je ne comprends pas cette histoire de STEP !!!!!

Merci d'avance pour votre aide.

Alexandre
 

ROGER2327

XLDnaute Barbatruc
Re : Remplir une cellule vide avec l'info du dessus-VBA-FJ avec moitie du code

Bonjour à tous, bonjour alex53


Une excursion dans l'aide d'Excel va nous donner la réponse. Je cite :


For...Next, instruction
(...)

Répète un groupe d'instructions le nombre de fois indiqué.

Syntaxe

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]

Next [counter]

La syntaxe de l'instruction For…Next comprend les éléments suivants :

Élément Description

counter
Variable numérique utilisée comme un compteur de boucles. Cette variable ne peut être ni une variable de type Boolean, ni un élément de tableau.​
start
Valeur initiale de counter.​
end
Valeur finale de counter.​
step
Facultatif. Valeur d'incrémentation de counter après chaque exécution de la boucle. Si aucune valeur n'est indiquée, l'argument step prend par défaut la valeur 1.​
statements
Facultatif. Une ou plusieurs instructions entre For et Next à exécuter le nombre de fois indiqué.​



Remarques

L'argument step peut être positif ou négatif. Sa valeur contrôle l'exécution de la boucle de la façon suivante :

Valeur_________Condition d'exécution de la boucle

Positive ou 0
counter <= end
Négative
counter >= end



Une fois que toutes les instructions de la boucle ont été exécutées, l'argument step est ajouté à counter. Alors, les instructions de la boucle sont de nouveau exécutées (selon le résultat du même test que celui effectué à la première exécution), ou le contrôle sort de la boucle et exécute l'instruction qui suit immédiatement Next.

(...)

Tout est dit. En écrivant
VB:
For i = 10 To 2 Step -3
    '...
Next
on a Start = 10, End = 2, Step.
La boucle s’exécute d'abord avec i = 10 puis i = 7 (car 10-3=7), puis i = 4 (=7-3). Il n'y aura pas d'itération supplémentaire puisque après la troisième, i prend la valeur 1 (4-3) qui est strictement inférieur à end.


C'est pratique, l'aide de VBA. On comprend tout avec ça. En plus, c'est facile à consulter : on sélectionne For dans l'éditeur de code, on appuie sur la touche magique et on sait tout sur tout. (La touche magique, c'est la touche F1.)
Merci, Bill !



ROGER2327
#6100


Hunyadi 29 Gidouille 139 (hunyadi gras - Nom d’Ubu - fête Suprême Seconde)
25 Messidor An CCXX, 6,4638h - pintade
2012-W28-5T15:30:47Z
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 265
Membres
103 501
dernier inscrit
talebafia