VBA/Excel, Pourquoi mon copié/collé ne marche pas ?

Résolu
idieordeco Messages postés 28 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 20 février 2011 - 8 nov. 2007 à 00:08
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 - 9 nov. 2007 à 10:04
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

jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
8 nov. 2007 à 08:25
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
3
idieordeco Messages postés 28 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 20 février 2011
8 nov. 2007 à 23:05
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
0
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 nov. 2007 à 08:13
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
0
idieordeco Messages postés 28 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 20 février 2011
9 nov. 2007 à 09:57
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jrivet Messages postés 7393 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
9 nov. 2007 à 10:04
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
0