VBA/Excel, Pourquoi mon copié/collé ne marche pas ? [Résolu]

Signaler
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011
-
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
-
Bonjour,

Je suis sous VBA/Excel et je cherche à faire un simple copié/collé quand certaines conditions sont remplies.
Voila le code, le coupable...
--------------------------------
Sub traitement()
Dim NbLignes As Long
Dim i As Long

NbLignes = ActiveSheet.UsedRange.Rows.Count


For i = NbLignes To 1 Step -1
        If Range("n" & i).Value = "N" Then
        Range("n" & i).EntireRow.Delete
        End If
        If Range("n" & i).Value = "" Then
        Range("n" & i).EntireRow.Delete
        End If
        If Range("f" & i).Value = "0" Then
        Range("g" & i).Select and Selection.Copy and Range("f" & i).Select and ActiveSheet.Paste
        End If
Next i
End Sub
----------------------------
Je sais, par défaut il ne marche pas (en rouge) mais le reste avant marche comme un charme.
Ce que je voulais faire c'est : "si la cellule contenu dans la colonne f égale 0 alors tu prends la cellule de la même ligne de la colonne g et tu la copies dans la colonne f. (de la même ligne)"
Tout cela pour chaque ligne de la colonne f.
Et je galère et je galère....

Si une âme charitable peut m'aider à faire un code qui marche...
Enfin merci par avance

Bière qui roule bière qui mousse

5 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,
Tu ne peux pas écrire des instructions à la suite et les séparer par AND

Si tu souhaites réellement tou ecrire sur une ligne remplace And par :

Sinon ecrit sur plusieurs ligne (c'est tout de meme plus lisible)

Pour en revenir à ton code, essaie ceci. (pas testé mais cela devrait fonctionner)
Sub traitement()
Dim NbLignes As Long
Dim i As Long

   NbLignes = ActiveSheet.UsedRange.Rows.Count
   For i = NbLignes To 1 Step -1
       If Range("n" & i).Value = "N" Or Range("n" & i).Value = vbNullString Then
           Range("n" & i).EntireRow.Delete
       End If
       
       If Range("f" & i).Value = "0" Then
           Range("f" & i).Value = Range("g" & i).Value
       End If
   Next i
End Sub , ----
[code.aspx?ID=41455 By Renfield]

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011

Arf, ça ne marche pas
Il ne fait pas le copié/collé
ça déconne là à mon avis (en purple) :
       If Range("f" & i).Value = "0" Then
           Range("f" & i).Value = Range("g" & i).Value

Il faudrait mettre un copié collé genre :
       If Range("f" & i).Value = "0" Then range("f" & i).copy Range("g" & i).paste

Mais ça ne marche

Bière qui roule bière qui mousse
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Salut,
Il faut etre plus explicit lorsque tu dis que cela ne marche pas.
Je viens de teste mon code et cela place  quand il faut la valeur de la colonne G dans la colonne F (c'est bien ce que tu souhaitais???)

NOTE: cela marche QUE si la colonne N ne contient pas N ou n'est pas vide bien entendu, sinon la ligne est supprimée.

Alors cela ne marche pas veut dire quoi??? une erreur ou simplement rien ne se passe. As tu essayer en Debug de voir pourquoi cela ne marchais pas.

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
28
Date d'inscription
mercredi 7 novembre 2007
Statut
Membre
Dernière intervention
20 février 2011

Salut,

Je suis désolé, je me suis embrouillé dans mes colonnes (le fichier que je traite est horrible) donc tu m'as donné une macro qui ne marche pas...

      NbLignes = ActiveSheet.UsedRange.Rows.Count
   For i = NbLignes To 1 Step -1       If Range("n" & i).Value "N" Or Range("n" & i).Value vbNullString Then
           Range("n" & i).EntireRow.Delete
       End If
      
       If Range("h" & i).Value = "0" Then
           Range("h" & i).Value = Range("g" & i).Value
       End If

En prenant les bonnes colonnes, ça pulse !
Je te remercie pour tout

Bière qui roule bière qui mousse
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
50
Re,
Pas de quoi.
Si tu estimes que ton problème est résolu, penses à appuyer sur le bouton réponse acceptée sur le ou les posts qui t'on aidé à avancer.

@+: Ju£i?n
Pensez: Réponse acceptée